第3章控制语句 使用高级语言编写的程序是由控制语句组成的。普通的语句都是顺序执行的,即按照先后顺序一条一条地执行。除此之外,C++还提供了两种结构的控制语句——选择结构和循环结构。 3.1选择结构 选择结构的语句是用于根据条件控制程序的执行流向,是程序中最常用的语句。C++的选择结构包含以下几种语句: ifelse选择语句、嵌套的ifelse语句、ifelse if语句和switch语句。 3.1.1ifelse选择语句 ifelse选择语句的语法结构为: if (表达式)语句1; else语句2; 执行顺序为: 首先求出表达式的值,如果表达式的值为true或为非零值,则执行语句1; 若表达式的值为false或0,则执行语句2。图3.1为ifelse语句的流程图。 图3.1ifelse语句流程图 ifelse语句中的语句1和语句2可以是一条语句,也可以是由花括号括住的多条语句。语句2可以为空,当语句2为空时,else可以省略。 例3.1输入两个数,判断是否相等,并输出判断结果。 #include using namespace std; void main() { int i,j; cin>>i>>j; if(i==j) cout<<"i==j"< using namespace std; void main() { int i,j; cin>>i>>j; if(i!=j) if(i>j) cout<<"i>j"< using namespace std; void main() { int i,j; cin>>i>>j; if(i==j) cout<<"i=j"<j"< using namespace std; void main() { char grade; cout<<"请输入一个A到D的大写字母\n"; cin>>grade; switch(grade) { case 'A' :cout<<"85~100\n"; break; case 'B' :cout<<"70~84\n";break; case 'C' :cout<<"60~69\n";break; case 'D' :cout<<"60以下\n"; break; default : cout<<"输入的字母错误\n"; } } 例3.4程序的运行结果如图3.5所示。 图3.5例3.4程序的运行结果 3.2循环结构 循环结构的语句根据条件重复地执行程序中的某一条或某一段语句,也是程序中最常用的语句。C++包含以下几种循环结构的控制语句: while循环语句、dowhile循环语句和for循环语句。 3.2.1while循环语句 while是最常用的循环语句,其语法形式为: while(表达式) 循环体语句; 图3.6while语句流程图 其中,循环体语句部分可以是一条语句,也可以是由花括号括住的多条语句。 执行顺序如下。 (1) 先计算并判断表达式的值,若为0或false,则跳转到第(4)步。 (2) 若表达式的值非零或为true,则执行循环体中的语句。 (3) 返回第(1) 步。 (4) 退出循环体,接着执行循环体后的语句。 图3.6为while语句的流程图。 例3.5输入一个正整数n,求其阶乘n!(n!=1×2×3×…×(n-1)×n)。 #include using namespace std; void main() { unsigned short n; int i=1; unsigned long result=1; cout<<"请输入一个不大于30的正整数\n"; cin>>n; while(i<=n) { result*=i; i++; } cout< using namespace std; void main() { unsigned short n; int i=1; unsigned long result=1; cout<<"请输入一个不大于30的正整数\n"; cin>>n; do { result*=i; i++; } while(i<=n); cout< using namespace std; void main() { unsigned short n; unsigned long result=1; cout<<"请输入一个不大于30的正整数\n"; cin>>n; for(int i=1;i<=n;i++) result*=i; cout< using namespace std; void main() { int i=0; for(;i<=2;) { cout<<"Welcome to C++\n"; i++; } } 程序的功能是使用for循环语句输出三行字符串“Welcome to C++”。for语句中省略了表达式1和表达式3,在for语句的前面初始化循环控制变量i的值为1; 而循环体内部的语句i++在每次循环执行时,修改循环控制变量i的值。这样的for循环等价于一个类似的while循环。图3.10为例3.8程序的运行结果。 图3.10例3.8程序的运行结果 C++11新引入了一种基于范围的for循环语句,用这种for循环语句访问数组和集合中的元素时,比使用传统的for循环语句书写更加方便,程序更容易理解。本书将在第4章中结合数组介绍这种基于范围的for循环语句。 3.2.4嵌套的循环语句 如果在循环体语句中又出现了循环结构语句,就形成了嵌套的循环结构。通常把嵌套的循环语句称为多重循环语句。在嵌套的循环结构中,外部的循环叫外层循环; 而被包含在其他循环内部的循环叫内层循环。这里外层和内层都是相对而言的。 例3.9输出一个由星号*组成的三角形图案。 #include using namespace std; void main() { for(int i=1;i<=5;i++) { for(int j=0;j<=10-i;j++) cout<<' '; for(int k=1;k<=(2*i-1);k++) cout<<'*'; cout< using namespace std; void main() { int i=0; while(i<10) { if(i++==5) break; cout<<"欢迎学习C++\n"; } } 例3.11在循环中使用continue语句。 #include using namespace std; void main() { int i=0; while(i<10) { if(i++==5) continue; cout<<"欢迎学习C++\n"; } } 以上两例的程序几乎完全相同,唯一的区别是: 例3.10程序的循环中使用了break语句,而例3.10程序的循环中使用了continue语句。 例3.10中,当i的值为5时,执行break语句,马上退出循环体,程序运行结束。结果是只输出了5行字符串。 例3.11中,当i的值为5时,执行continue语句,马上退出本次循环,循环体中后面的语句被跳过。但是,循环并没有终止,从i=6开始继续执行下一次循环。结果是输出了9行字符串。 break语句和continue语句只能使程序控制转到一个确定的地方,所以可以把它们叫作有条件的转移语句。 3.3.2goto语句 C++还有一个功能更加强大的转移语句——goto语句。它和语句标号相配合,可以使控制转移到程序中的任何地方,所以叫无条件转移语句。goto语句的使用会使程序的结构变得杂乱无章,违反了结构化程序设计的原理,所以应尽可能少用或不用goto语句。 小结 C++语言的控制语句形式简洁、功能强大,主要包括选择结构和循环结构两种类型。两种结构的控制语句可以相互嵌套,完成复杂的控制逻辑。 选择结构的语句用于根据条件控制程序的执行流向。C++的选择结构包含以下几种语句: ifelse选择语句、嵌套的ifelse语句、ifelse if语句和switch语句。 循环结构的语句根据条件重复地执行程序中的某一条或某一段语句。C++包含以下几种循环结构的控制语句: while循环语句、dowhile循环语句和for循环语句。 除了选择结构和循环结构的语句之外,C++还包括几个特殊的流控制语句,它们是break语句、continue语句和goto语句。 习题 3.1编写一段程序,提示用户输入一个英文字母,使用if语句判断用户输入的字母是大写 字母还是小写字母,然后输出相关信息。 3.2以下程序段输出若干行字符串“How are you!”,行数由用户输入的整数决定,如果用户输入0,则输出一行字符串“Hello!”,请找出下面程序中存在的语法错误。 int n; cout<<"请输入一个整数: "; cin>>n; if(n=0) cout<<"Hello!\n"; else for(int i=0;i