Saturday 21 May 2016

Statements and flow control ในc++


Statements and flow control ในc++

คำสั่ง c ++ ง่ายๆคือแต่ละคำแนะนำของแต่ละโปรแกรมเช่นการประกาศตัวแปรและการแสดงออกที่เห็นใน
ส่วนก่อนหน้า
 พวกเขามักจะจบลงด้วยอัฒภาค (;) และจะดำเนินการในลำดับเดียวกันที่ปรากฏในโปรแกรม

แต่โปรแกรมไม่ได้ จำกัด อยู่ในลำดับเชิงเส้นของงบ ในระหว่างขั้นตอนของโปรแกรมอาจทำซ้ำส่วนของรหัสหรือใช้
การตัดสินใจและการแยกไปสองทาง เพื่อที่ C ++ ให้งบการควบคุมการไหลที่ให้บริการเพื่อระบุสิ่งที่จะต้องมีการ
ทำโดยโปรแกรมของเราเมื่อใดและภายใต้สถานการณ์

หลายของงบการควบคุมการไหลที่อธิบายไว้ในส่วนนี้ต้องใช้ทั่วไป (ย่อย) คำสั่งเป็นส่วนหนึ่งของไวยากรณ์ คำสั่งนี้อย่างใด
อย่างหนึ่งอาจจะเป็นที่เรียบง่าย c ++ -such เป็นคำสั่งเดียวยกเลิกด้วยเครื่องหมายอัฒภาค (;) - คำสั่งหรือประกอบ
 รวมเป็น statement คือกลุ่มของงบ (แต่ละของพวกเขายกเลิกโดยอัฒภาคของตัวเอง) แต่ทุกกลุ่มเข้าด้วยกันในบล็อก
ล้อมรอบในวงเล็บปีกกา {}:

{statement1; statement2; statement3; }

บล็อกทั้งหมดถือว่าเป็นคำเดียว (ประกอบด้วยตัวเอง substatements หลาย) เมื่อใดก็ตามที่เป็นคำสั่งทั่วไปเป็นส่วนหนึ่ง
ของไวยากรณ์ของคำสั่งควบคุมการไหลนี้สามารถเป็นได้ทั้งคำสั่งง่ายๆหรือคำสั่งสารประกอบ
Selection statements: if and else
ถ้าคำหลักที่จะใช้ในการดำเนินการคำสั่งหรือบล็อกถ้าหากว่าสภาพเป็นจริง ไวยากรณ์ที่เป็น:

ถ้า (เงื่อนไข) คำสั่ง
if (condition) statement

นี่คือสภาพการแสดงออกที่ถูกประเมิน ถ้าเงื่อนไขนี้เป็นความจริงคำสั่งจะถูกดำเนินการ ถ้ามันเป็นเท็จคำสั่งจะไม่ทำงาน
 (มันจะถูกละเว้นเพียง) และโปรแกรมยังคงขวาหลังจากคำสั่งเลือกทั้งหมด
if (x == 100)
  cout << "x is 100";
If x is not exactly 100คำสั่งนี้จะถูกละเว้นและไม่มีการพิมพ์ต่อ

หากคุณต้องการที่จะรวมมากกว่าคำเดียวที่จะดำเนินการเมื่อเงื่อนไขเป็นจริงงบเหล่านี้จะต้องถูกปิดล้อมอยู่ในวงเล็บ ({}) สร้างบล็อก:
if (x == 100)
{
   cout << "x is ";
   cout << x;
}
ยกตัวอย่างเช่นส่วนรหัสต่อไปพิมพ์ข้อความ (x 100) แต่ถ้าค่าที่เก็บไว้ในตัวแปร x ย่อมเป็น 100:
ตามปกติการเยื้องและแบ่งบรรทัดในรหัสไม่มีผลดังนั้นรหัสดังกล่าวเทียบเท่ากับ:
if (x == 100) { cout << "x is "; cout << x; }

เลือกstatementsด้วยถ้ายังสามารถระบุสิ่งที่เกิดขึ้นเมื่อเงื่อนไขไม่ได้เป็นจริงโดยการใช้คำหลักอื่นที่จะแนะนำคำสั่งทางเลือก
ไวยากรณ์ที่เป็น:

if (condition) statement1 else statement2

For example:
if (x == 100)

พิมพ์นี้ X คือ 100, ถ้าแน่นอน x มีค่าเป็น 100 แต่ถ้ามันไม่ได้และถ้ามันไม่ได้ก็พิมพ์ X ไม่ได้ 100 แทน
หลายถ้าโครงสร้างอื่น + สามารถตัดแบ่งด้วยความตั้งใจของการตรวจสอบช่วงของค่าที่ ตัวอย่างเช่น:
if (x > 0)
  cout << "x is positive";
else if (x < 0)
  cout << "x is negative";
else
  cout << "x is 0";

  cout << "x is 100";
else
  cout << "x is not 100";



Iteration statements (loops)

ลูปซ้ำคำสั่งจำนวนหนึ่งครั้งหรือในขณะที่สภาพเป็นจริง Loops repeat a statement a certain
 number of times, or while a condition is fulfilled. They are
introduced by the keywords while, do, and for.

The while loop
while (expression) statement
ในขณะที่วงเพียงแค่ทำซ้ำคำสั่งในขณะที่การแสดงออกเป็นความจริง ถ้าหลังจากการดำเนินการของคำสั่งใด ๆ แสดงออกเป็นความจริงอีก
ต่อไปห่วงสิ้นสุดและโปรแกรมที่ยังคงright after the loop สำหรับตัวอย่างเช่นสมมติมีลักษณะที่นับถอยหลังใช้
ในขณะที่วง A:
// custom countdown using while
#include <iostream>
using namespace std;

int main ()
{
  int n = 10;

  while (n>0) {
    cout << n << ", ";
    --n;
  }

  cout << "liftoff!\n";

output
10, 9, 8, 7, 6, 5, 4, 3, 2, 1, liftoff!


คำสั่งแรกในชุดหลัก N เพื่อมูลค่า 10 นี้เป็นจำนวนครั้งแรกในการนับถอยหลัง แล้วในขณะที่วงเริ่มต้น:
 ถ้าค่านี้เป็นไปตามเงื่อนไขที่ N> 0 (ยังไม่มีข้อความที่เป็นมากกว่าศูนย์) แล้วบล็อกที่เป็นไปตามเงื่อนไขที่จะดำเนินการ
และทำซ้ำได้นานเท่าที่สภาพ (n> 0) ยังคงเป็น จริง

กระบวนการทั้งหมดของโครงการก่อนหน้านี้สามารถตีความไปตามสคริปต์ต่อไปนี้ (เริ่มต้นในหลัก):

     n มีการกำหนดค่า
     สภาพในขณะที่มีการตรวจสอบ (n> 0) ณ จุดนี้มีสองเป็นไปได้:
         สภาพเป็นจริง: คำสั่งจะถูกดำเนินการ (ขั้นตอนที่ 3)
         เงื่อนไขเป็นเท็จ: ไม่สนใจคำสั่งและดำเนินการต่อหลังจากที่มัน (ขั้นตอนที่ 5)
     รันคำสั่ง:
     cout << n << ", ";
     --n;
     (พิมพ์ค่าของ n n และลดลงจาก 1)
     ในตอนท้ายของบล็อก กลับโดยอัตโนมัติไปยังขั้นตอนที่ 2
     โปรแกรมต่อเนื่องทันทีหลังจากที่บล็อก:
      print liftoff!  และจบโปรแกรม
สิ่งที่จะต้องพิจารณาด้วยในขณะที่ห่วงก็คือวงที่ควรจะจบในบางจุดและทำให้คำสั่งที่จะปรับเปลี่ยนค่าการตรวจสอบในสภาพ
ในบางวิธีเพื่อที่จะบังคับให้มันกลายเป็นเท็จในบางจุด มิฉะนั้นวงวนลูปจะยังคงอยู่ตลอดไป ในกรณีนี้รวมถึงวง --n
ที่ลดลงค่าของตัวแปรที่จะถูกประเมินในสภาพ (N) โดยหนึ่ง - นี้ในที่สุดจะทำให้สภาพ (n> 0)
เท็จหลังจากที่จำนวนหนึ่งของการทำซ้ำห่วง . การจะมีความเฉพาะเจาะจงมากขึ้นหลังจาก 10 ซ้ำ, N จะกลายเป็น 0
ทำให้สภาพไม่จริงและสิ้นสุดในขณะที่วง

The do-while loop

A very similar loop is the do-while loop, whose syntax is:

do statement while (condition);

// echo machine
#include <iostream>
#include <string>
using namespace std;

int main ()
{
  string str;
  do {
    cout << "Enter text: ";
    getline (cin,str);
    cout << "You entered: " << str << '\n';
  } while (str != "goodbye");

output
Enter text: hello
You entered: hello
Enter text: who's there?
You entered: who's there?
Enter text: goodbye
You entered: goodbye

 do-while loopมักจะเป็นที่ต้องการมากกว่าในขณะที่วงเมื่อคำสั่งที่จะต้องมีการดำเนินการอย่างน้อยหนึ่งครั้ง
เช่นเมื่อเงื่อนไขที่ว่ามีการตรวจสอบไปยังจุดสิ้นสุดของวงถูกกำหนดภายในงบห่วงตัวเอง ในตัวอย่างก่อนหน้า
นี้ผู้ใช้ป้อนข้อมูลภายในบล็อกคือสิ่งที่จะตรวจสอบว่าวงปลาย ดังนั้นแม้ว่าผู้ใช้ต้องการที่จะสิ้นสุดการวนรอบเร็วที่สุด
เท่าที่เป็นไปได้โดยการป้อนลาบล็อกในวงจะต้องมีการดำเนินการอย่างน้อยหนึ่งครั้งเพื่อให้สำหรับการป้อนข้อมูลและ
เงื่อนไขสามารถในความเป็นจริงเท่านั้นที่ได้รับการพิจารณาหลังจากที่มัน จะถูกดำเนินการ

โปรดทราบว่าความซับซ้อนของวงนี้เป็นที่น่ารำคาญสำหรับคอมพิวเตอร์และอื่น ๆ นับถอยหลังทั้งจะดำเนินการได้ทันทีโดยไม่ชักช้า
ในทางปฏิบัติใด ๆ ระหว่างองค์ประกอบของการนับ (ถ้าสนใจดู sleep_for สำหรับตัวอย่างการนับถอยหลังกับความล่าช้า)

The for loop

The for loop is designed to iterate a number of times. Its syntax is:

for (initialization; condition; increase) statement;


// countdown using a for loop
#include <iostream>
using namespace std;

int main ()
{
  for (int n=10; n>0; n--) {
    cout << n << ", ";
  }
  cout << "liftoff!\n";
}

output
10, 9, 8, 7, 6, 5, 4, 3, 2, 1, liftoff!

ทั้งสามสาขาในfields in a for-loopเป็นตัวเลือก สามารถทิ้งไว้ว่างเปล่า แต่ในทุกกรณีสัญญาณอัฒภาคระหว่างพวกเขาจะต้อง
ตัวอย่างเช่นสำหรับ (; n <10;) เป็นห่วงโดยไม่ต้องเริ่มต้นหรือเพิ่มขึ้น (เทียบเท่ากับในขณะที่วง);
และ (; n <10; n ++) เป็นห่วงกับการเพิ่มขึ้น แต่ไม่มีการเริ่มต้น (อาจจะเพราะตัวแปรที่ถูกเริ่มต้นได้แล้วก่อนที่จะห่วง)
 ห่วงที่มีสภาพไม่เทียบเท่ากับวงที่มีจริงเป็นเงื่อนไข (เช่นวง จำกัด )

เพราะแต่ละเขตข้อมูลจะถูกดำเนินการในเวลาใดเวลาหนึ่งในวงจรของloopก็อาจจะมีประโยชน์ในการดำเนินการมากกว่าการแสดงออกเดียวใด ๆ
ของการเริ่มต้นเงื่อนไขหรือคำสั่ง แต่น่าเสียดายที่เหล่านี้ไม่ได้งบ แต่สำนวนที่เรียบง่ายและทำให้ไม่สามารถถูกแทนที่ด้วยบล็อก ในฐานะที่เป็นสำนวนที่
พวกเขาสามารถ แต่ทำให้การใช้งานของผู้ประกอบการจุลภาค (,): นี​​้เป็นตัวคั่นแสดงออกและสามารถแยกการแสดงออกหลายที่เดียวคาด
ว่าโดยทั่วไป ตัวอย่างเช่นการใช้มันก็จะมีความเป็นไปได้สำหรับการห่วงที่จะจัดการกับสองตัวแปรเคาน์เตอร์เริ่มต้นและเพิ่มทั้งสอง:
for ( n=0, i=100 ; n!=i ; ++n, --i )
{
   // whatever here...
}

This loop will execute 50 times if neither n or i are
 modified within the loop:



Range-based for loop

The for-loop has another syntax, which is used exclusively with ranges:

for ( declaration : range ) statement;

example of range-based for loop using strings:
// range-based for loop
#include <iostream>
#include <string>
using namespace std;

int main ()
{
  string str {"Hello!"};
  for (char c : str)
  {
    std::cout << "[" << c << "]";
  }
  std::cout << '\n';
}

output
[H][e][l][l][o][!]

Range based loops usually also make use of type deduction for the type of the elements with auto. Typically, the range-based loop above can also be written as:
for (auto c : str)
  std::cout << "[" << c << "]";
นี่คือประเภทของ C จะถูกหักโดยอัตโนมัติเป็นชนิดขององค์ประกอบใน STR

Jump statements

Jump statementsอนุญาตให้เปลี่ยนแปลงการไหลของโปรแกรมโดยการดำเนินการกระโดดไปยังspecific locations

For example, let's stop the countdown before its natural end:
// break loop example
#include <iostream>
using namespace std;

int main ()
{
  for (int n=10; n>0; n--)
  {
    cout << n << ", ";
    if (n==3)
    {
      cout << "countdown aborted!";
      break;
    }
  }
}

output
10, 9, 8, 7, 6, 5, 4, 3, countdown aborted!


The continue statement

The continue statement causes the program to skip the rest of the loop in the current iteration, as if the end of the statement block had been reached, causing it to jump to the start of the following iteration. For example, let's skip number 5 in our countdown:
// continue loop example
#include <iostream>
using namespace std;

int main ()
{
  for (int n=10; n>0; n--) {
    if (n==5) continue;
    cout << n << ", ";
  }
  cout << "liftoff!\n";
}

output
10, 9, 8, 7, 6, 4, 3, 2, 1, liftoff!

The goto statement

gotoช่วยให้การทำ jumpที่จะจุดอื่นในโปรแกรม  jump นี้ไม่มีเงื่อนไขละเว้นระดับการทำรัง
และไม่ก่อให้เกิดสแต็คใด ๆ โดยอัตโนมัติคลี่คลาย ดังนั้นจึงเป็นคุณลักษณะที่จะใช้ด้วยความระมัดระวัง
และควรอยู่ในบล็อกเดียวกันของงบโดยเฉพาะอย่างยิ่งในการปรากฏตัวของตัวแปรท้องถิ่น

จุดปลายทางจะถูกระบุด้วยฉลากที่ใช้แล้วเป็นอาร์กิวเมนต์สำหรับคำสั่งกลับไปข้าง ๆ ป้ายทำจากระบุที่ถูกต้องตามด้วยโคลอน (:)

ข้ามไปโดยทั่วไปถือว่าเป็นคุณลักษณะระดับต่ำโดยไม่มีกรณีการใช้งานโดยเฉพาะอย่างยิ่งในปัจจุบันระดับที่สูงกว่าการเขียนโปรแกรม
กระบวนทัศน์ที่ใช้โดยทั่วไปกับ C ++ แต่เพียงเป็นตัวอย่างนี่เป็นรุ่นของวงนับถอยหลังของเราโดยใช้goto:

// goto loop example
#include <iostream>
using namespace std;

int main ()
{
  int n=10;
mylabel:
  cout << n << ", ";
  n--;
  if (n>0) goto mylabel;
  cout << "liftoff!\n";
}

output
10, 9, 8, 7, 6, 5, 4, 3, 2, 1, liftoff!

Another selection statement: switch.

ไวยากรณ์ของคำสั่งเปลี่ยนเป็นบิตที่แปลกประหลาด โดยมีวัตถุประสงค์คือเพื่อตรวจสอบค่าในจำนวนของการ
แสดงออกที่เป็นไปได้อย่างต่อเนื่อง มันเป็นสิ่งที่คล้ายกับเชื่อมโยง IF-อื่น แต่ จำกัด ให้การแสดงออกอย่างต่อเนื่อง
 ไวยากรณ์ทั่วไปมากที่สุดของมันคือ:
syntax is:

switch (expression)
{
  case constant1:
     group-of-statements-1;
     break;
  case constant2:
     group-of-statements-2;
     break;
  .
  .
  .
  default:
     default-group-of-statements
}


switch example
switch (x) {
  case 1:
    cout << "x is 1";
    break;
  case 2:
    cout << "x is 2";
    break;
  default:
    cout << "value of x unknown";
  }

if-else equivalent
if (x == 1) {
  cout << "x is 1";
}
else if (x == 2) {
  cout << "x is 2";
}
else {
  cout << "value of x unknown";
}

For example:

    switch (x) {
  case 1:
  case 2:
  case 3:
    cout << "x is 1, 2 or 3";
    break;
  default:
    cout << "x is not 1, 2 nor 3";
  }

    ขอให้สังเกตว่าswitchที่มี จำกัด เพื่อเปรียบเทียบevaluated expression
กับconstant expressionsอย่างต่อเนื่อง มันไม่ได้เป็นไปได้ที่จะใช้ตัวแปรเป็นป้ายชื่อหรือช่วงเพราะ
จะไม่ถูกต้อง c ++ แสดงออกอย่างต่อเนื่อง

เพื่อตรวจสอบช่วงหรือค่าที่ไม่คงที่มันจะดีกว่าที่จะใช้ concatenations ของ if and else if statements.
by relative7prof

0 ความคิดเห็น:

Post a Comment