Visual C++ 2010- 程序流程

更新时间:2023-03-08 06:12:13 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

八、程序流程

1、循环

循环鼻祖:goto

计算机科学发展的早期,程序糟糕、粗糙而简短。循环由标签、语句和跳转组成。 在C++中,标签是后面跟冒号(:)的名称。标签放在合法C++语句的左边,跳转是通过在关键字goto后面加上标签的名称来实现的。

//此程序用于演示使用关键字goto实现循环 #include int main() { loop: } 注意:

a、作为一条原则,程序员应当避免使用goto语句。

2、使用while循环

只要条件为真,while循环将使程序重复执行一段代码。

//此程序用于演示使用while循环 #include int main() {

using namespace std;

cout<<\<

cout<<\<

goto loop; using namespace std; int counter=0;

int counter=0;

while(counter<5) { }

cout<<\<

如果不小心在循环后面加上分号,如: int counter; while(counter<5);

counter++;

在这个例子中,counter永远不会被执行。

while语句语法: while(condition)

statement;

condition可以是任何C++表达式,statement可以是任何合法的C++语句或语句块。如果condition为真,将执行statement,然后再次测试condition。这一过程将不断重复下去,直到condition为假为止。此时while循环将终止,接着执行statement后面的第一句语句。

continue和break:

有时候需要在执行while循环体中所有语句之前返回到while循环的开头。continue语句用于跳转到循环的开头。

而有时候需要在满足循环退出条件之前跳出循环。break语句立即跳出while循环,继续执行右大括号后的语句。

//此程序用于演示break的用法 #include int main() {

int n; counter++;

cout<<\<

}

for(n=100;n>=1;n--)

if(n%7==0) { } return 0;

std::cout<<\以内能被7整除的最大数为:\<

//此程序用于演示continue的用法 #include int main() { }

break语句语法: while(condition1) {

if(condition2)

break; //statement

}

continue语句语法: while(condition1) {

if(condition2) int n;

std::cout<<\之间能被13整除的数有:\; for(n=100;n<=200;n++) {

if(n!=0) }

std::cout<<\; return 0;

continue;

std::cout<

continue; //statement

}

while(true)循环:

while循环测试的条件可以是任何合法的C++表达式。只要条件为真,while循环将继续执行可以将true作为测试条件来创建永不结束的循环。

//此程序用于演示while true循环 #include int main() { }

3、实现do...while循环

while循环体可能永远都不会执行。while语句在执行循环体之前检查条件,如果条件为假,将跳过整个while循环体。

//跳过while循环体 #include int main() {

while(counter>0) {

int counter;

std::cout<<\; std::cin>>counter; int counter=0; while(true) { }

std::cout<<\<

counter++; if(counter>10)

break;

}

std::cout<<\; counter--;

std::cout<<\<

How many Hellos?:2 Hello! Hello!

Counter is Output:0 输出:

How many Hellos?:0 Counter is Output:0

如果希望至少打印Hello一次,可在while循环之前加上下面的if语句: if(counter<1)

Counter=1;

但这种做法被程序员称为“拙作(kludge)”,是一种既难看又不雅的解决方案。

4、使用do...while

do...while循环在测试条件前执行循环体,从而确保循环体至少被执行一次。

//do...while循环 #include int main() {

using namespace std; int counter;

cout<<\; cin>>counter; do {

cout<<\; counter--; return 0;

}

}while(counter>0);

cout<<\<

输出:

How many Hellos?:0 Hello! Counter is:-1

do...while语句语法: do

statement while(condition);

首先执行statement,然后计算condition。如果condition为真,就执行循环;否则终止循环。 注意:

a、如果需要确保循环至少执行一次;

b、要确保初始条件为假时不执行循环体,使用while循环;

c、除非可确保代码的功能清晰易懂,否则不要再循环中使用break和continue。总会有更清晰的方法来完成同样的任务; d、不要使用goto语句。

5、for循环

使用while循环进行编程时通常需要3步:设置初始条件、测试条件是否为真、在每次循环中修改条件变量。for循环将这3个步骤(初始化、测试和递增或递减)合并到一条语句中。for语句由关键字for和一对括号组成,括号中是3条用分号分隔的语句: for(initialization;test;action) { }

initialization为初始条件(初始化),可以是任何合法的C++语句,但通常用于创建并初始化一个计数变量。test进行测试,可以是任何合法的C++表达式,其功能与while循环中的条件相同。action是要执行的操作,虽然可以是任何合法的C++语句,但其通常是将计数变量递增或递减。

...

//此程序用于演示for循环 #include int main() { }

for语句语法:

for(initialization;test;action)

Statement;

initialization语句用来初始化计数变量或为循环作准备。test可以是任何合法的C++表达式,每次循环都将对其进行测试。如果test为真,就执行for循环体,然后执行action语句(通常是对计数器进行递增或递减)。

高级for语句:

a、对多条语句进行初始化和递增

初始化多个变量、测试复合逻辑表达式、执行多条语句的情况很常见。initialization语句和action语句可以是用逗号分隔的多条C++语句。

//此程序用于演示for循环 #include int main() { }

b、在for语句中使用空语句

for语句中的任何一条语句都可以省略。通过使用空语句,可以省略for语句中的第一和第三个子句,创建一个行为与while循环相同的for循环。空语句用分号表示。

for(int i=1,j=0;i<5;i++,j++)

std::cout<<\<

for(counter=0;counter<5;counter++)

std::cout<<\ \;

std::cout<<\<

//此程序用于演示在for语句中使用空语句 #include int main() { }

这种用法不常用,这个程序只是用来演示for循环的灵活性。

c、空的for语句

//此程序用于演示空的for语句 #include int main() { }

int counter=0; int max;

std::cout<<\; std::cin>>max; for(;;) { } return 0;

if(counter

break;

std::cout<<\ \<

int counter=0;

for(;counter<5;)//等价于while(counter<5) { }

std::cout<<\<

counter++;

std::cout<<\ \;

该for语句被简化到极致,省略了初始化、测试和操作部分。虽然这个程序看起来有些荒谬,但有时候确实需要使用for(;;)或while(true)。

d、空for循环

由于在for循环头中可以做很多事,有时候不需要循环体做任何事。这种情况下,必须在循环体中使用空语句(;)。分号可以与循环头位于同一行,但这样容易被人忽略。

//此程序用于演示在for循环中使用 #include int main() { }

在循环体中没有什么可以做,因此使用空语句(;)。但这不是一个良好设计的for循环:操作语句执行的操作太多。较好的做法是: for(int i=0;i<5;i++)

e、循环嵌套

任何循环都可以嵌套到另一个循环中。外层循环没执行一次,内层循环将完整执行一遍。

//此程序用于演示嵌套for循环 //打印9*9乘法表 #include int main() {

using namespace std; int i,j;

for(i=1;i<=9;i++) {

for(j=1;j<=i;j++) { }

cout<

cout<<\

for(int i=0;i<5;std::cout<<\<

; return 0;

}

}

cout<

return 0;

6、使用switch语句控制程序流程

如果if和if...else语句嵌套过深,这些语句很容易令人迷惑,C++提供了一种替代品。if语句只能处理一种取值,而switch语句能够为多个取值提供不同的分支。switch语句的通用格式如下:

switch(expression) {

case valueOne:statement;

break;

case valueTwo:statement;

break;

......

case valueN:statement;

break;

default: }

其中expression可以是任何合法的C++表达式,statement可以是任何合法的C++语句或语句块。注意case值必须是整数或者结果为整数的表达式,在这种表达式中不能使用关系运算符或bool运算符。

如果某个case值与表达式匹配,程序跳转到该case后面的语句处执行,知道遇到break语句或到达switch语句块末尾为止。如果没有匹配的值,程序跳转到默认(default)分支处执行。如果既没有匹配的值,也没有默认分支,程序将跳出switch语句。 注意:

a、如果根本不需要default分支,可使用它来检测不可能出现的情况,并打印错误消息。这对调试很有帮助。

b、如果case语句后面没有break语句,程序将执行下一条case语句,虽然有时候需要这样做,但通常是错误的。如果需要让程序继续执行下去,请用注释来指出你并非忘记了使用break。

//此程序用于演示switch语句的用法 #include int main()

statement;

{ }

switch语句的语法: switch(expression) {

case valueOne:statement;

break;

case valueTwo:statement;

break;

......

case valueN:statement;

break;

default:

statement;

using namespace std; unsigned short int number;

cout<<\请输入今天是一周中的第几天?\; cin>>number; switch(number) {

case 1:cout<<\今天是星期一!\; }

cout<

break; break; break; break; break; break; break;

case 2:cout<<\今天是星期二!\; case 3:cout<<\今天是星期三!\; case 4:cout<<\今天是星期四!\; case 5:cout<<\今天是星期五!\; case 6:cout<<\今天是星期六!\; case 7:cout<<\今天是星期天!\; default:cout<<\输入有误!\;

}

switch语句让你能够为多个值提供不同的分支。它计算表达式的值,如果与某个case值匹配,就跳到该行执行。然后继续执行,知道到达switch语句的结尾或遇到break语句为止。如果表达式和任何case值都不匹配,且有默认语句,则执行默认语句;否则结束switch语句。

使用switch语句来处理菜单:

//此程序用于使用switch语句来处理菜单 #include int menu(); void DoTasks(int); using namespace std; int main() {

bool exit=false; for(;;) {

int choice=menu();//调用menu函数,向屏幕打印菜单并返回用户的选择 switch(choice) { case (1):

DoTasks(1); break; DoTasks(2); break; DoTasks(3); break;

continue;//避免了对exit的测试 break; exit=true; break;

cout<<\请重新选择!\<

case (2):

case (3):

case (4):

case (5):

default:

}

}

}

break;

if(exit==true)

break;

return 0;

int menu() { }

void DoTasks(int which) { }

在该程序中死循环被用来提供菜单,要求用户进行选择,然后根据用户的选择执行相应的操作,并返回到菜单。循环将不断执行,直到用户选择退出。死循环是没有退出条件的循环。要退出循环,必须使用break语句。 注意:

a、没有在case语句中使用break时,一定要对其原因进行说明。

if(which==1)

cout<<\做任务 1\<

cout<<\ 菜单 ****\<>choice; cout<

b、在switch语句中一定要使用default,哪怕只是为了检查看似不可能的情形。 c、如果更清晰的switch语句可行,不要使用复杂的if...else语句。 d、别忘了在每个case的末尾加上break语句,除非你希望继续执行下去。

—q83831295

本文来源:https://www.bwwdw.com/article/plj.html

Top