第5章循环控制语句
本章学习目标
?掌握循环控制语句结构
?掌握while、do…while循环语句的使用
?掌握break、continue、goto语句的使用
?掌握for循环语句的使用
?掌握循环控制语句的应用
在实际开发中,当遇到需要多次重复地执行一个或多个任务时,可使用循环语句来解决。循环语句的特点是在给定条件成立时,重复执行某个程序段。通常称给定条件为循环条件,称反复执行的程序为循环体。
第5章
5.1while语句
第5章
5.1
5.1.1while循环基本形式
while循环语句是循环结构的一种,其一般的形式如下所示。
while(循环条件){
循环体
}
while语句首先会检验括号中的循环条件,当条件为真时,执行其后的循环体。每执行一遍循环,程序都将回到while语句处,重新检验条件是否满足。如果一开始条件就不满足,则不执行循环体,直接跳过该段代码。如果次检验时条件满足,那么在次或其后的循环过程中,必须有使得条件为假的操作,否则循环将无法终止。
while循环语句的执行流程如图5.1所示。
图5.1while循环语句的执行流程
无法终止的循环被称为死循环或无限循环。
while循环的使用如下所示。
while(sum < 100){
sum =1;
}
如上述代码操作,while语句先判断sum变量是否小于100,如果小于100,则条件为真,执行其后的语句,即sum =1,如果不小于100,则条件为假,跳过其后面的语句。如果开始时的sum小于100,则执行循环,每次循环都使得sum加1,直到sum不满足小于100时,循环结束。
接下来通过具体的示例展示while循环的实际使用,功能需求为计算1累加到100的结果,具体如例所示。
例5-1计算累加和
1#include
2
3int main(int argc, const char *argv[])
4{
5 int Sum = 0;
6 int Number = 1;
7
8 while(Number <= 100){
9 Sum = Sum Number;
10 Number ;
11 }
12
13 printf(”The Result is %d\”, Sum);
14 return 0;
15}
The Result is 5050
上述示例中,因为要计算1~100的累加结果,所以要定义两个变量,Sum为计算的结果,Number表示1~100的数字。使用while语句判断Number是否小于等于100,如果条件为真,则执行其后语句块中的内容,如果为假,则跳过语句块执行后面的内容,初始Number的值为1,判断条件为真,执行循环语句。在语句块中,总和Sum等于上一轮循环得到的总和加上本轮Number表示的数字,完成累加操作。Number自加1后,while再次判断新的Number值,当Number值大于100时,循环操作结束,将结果sum输出。
5.1.2break语句
break语句用来终止并跳出循环,继续执行后面的代码,break语句的一般形式如下所示。
break;
break语句不能用于循环语句和switch语句之外的任何其他语句中。
上述break语句与switch…case分支结构中的break语句的作用是不同的。
接下来通过示例展示break语句的使用,如例5-2所示。
例5-2break语句
1#include
2
3int main(int argc, const char *argv[])
4{
5 int i = 0;
6
7 while (i < 3){
8 i ;
9 if(i == 2) /*当i等于2时,跳过本轮循环*/
10 break;
11 printf(”i的值为%d\”, i);
12 }
13
14 return 0;
15}
i的值为1
上述示例中,while循环执行的条件为变量i的值小于3,变量i的初始值为0,执行判断后满足条件,进入循环,变量执行自加,其值变为1,执行if判断,不满足条件,不执行break语句,后通过printf()函数输出i的值为1。继续执行下一次循环,变量i的值变为2,执行if判断,满足条件,执行break语句,跳出整个循环,程序结束。
5.1.3continue语句
有时在循环语句中,当满足某个条件时,希望结束本次循环,即跳过本次循环中尚未执行的部分,继续执行下一次循环操作,而非直接跳出全部循环。在C语言中使用continue语句实现这一需求。continue语句的一般形式如下所示。
continue;
continue语句与break语句的区别是:continue语句只结束本次循环,而不是终止整个循环的执行,break语句则是结束整个循环过程,不再判断执行循环的条件是否成立。
接下来通过示例展示continue语句的使用,如例5-3所示。
例5-3continue语句
1#include
2
3int main(int argc, const char *argv[])
4{
5 int i = 0;
6
7 while (i < 3){
8 i ;
9 if(i == 2) /*当i等于2时,跳过本轮循环*/
10 continue;
11 printf(”i的值为%d\”, i);
12 }
13
14 return 0;
15}
i的值为1
i的值为3
上述示例中,while循环执行的条件为变量i的值小于3,变量i的初始值为0,执行?断后满足条?,进入循环,变量执行自加,其值变为1,执行if判断,不满足条件,不执行continue语句,后通过printf()函数输出i的值为1。继续执行下一次循环,变量i的值为1,执行判断后满足条件,再次进入循环,变量执行自加,其值变为2,执行if判断,满足条件,执行continue语句,跳过其后所有语句,即不执行输出。继续执行下一次循环,变量i的值为2,执行判断后满足条件,再次进入循环,变量执行自加,其值变为3,执行if判断,不满足条件,不执行continue语句,通过printf()函数输出i的值为3。
5.1.4goto语句
goto语句为无条件转移语句,可以使程序立刻跳转到函数内部的任意一条可执行语句。goto关键字后需要带一个标识符,该标识符是同一个函数内某条语句的标号。标号可以出现在任何可执行语句的前面,并且以一个冒号“:”作为后缀。goto语句的一般形式如下所示。
goto 标识符;
goto后的标识符就是跳转的目标,该标识符需要在程序的其他位置定义,但其需要在函数的内部。
跳转的方向可以向前,也可以向后,可以跳出一个循环,也可以跳入一个循环。
接下来通过示例展示goto语句的使用,如例5-4所示。
例5-4goto语句
1#include
2
3int main(int argc, const char *argv[])
4{
5 int i = 0;
6
7 while (i < 3){
8 i ;
9 if(i == 2) /*当i等于2时,跳过本轮循环*/
10 goto done;
11 printf(”i的值为%d\”, i);
12 }
13
14done:
15 printf(”Exit the program\”);
16 return 0;
17}
i的值为1
Exit the program
上述示例中,while循环执行的条件为变量i的值小于3,变量i的初始值为0,执行判断后满足条件,进入循环,变量执行自加,其值变为1,执行if判断,不满足条件,不执行goto语句,后通过printf()函数输出i的值为1。继续执行下一次循环,变量i的值为1,执行判断后满足条件,再次进入循环,变量执行自加,其值变为2,执行if判断,满足条件,执行goto语句,跳转到done标识符并执行对应的语句。
5.2do…while语句
do…while语句与while语句类似,它们之间的区别在于:while语句是先判断循环条件的真假,再决定是否执行循环体。而do…while语句则先执行循环体,然后再判断循环条件的真假,因此do…while语句中的循环体至少要被执行一次。do…while语句的一般形式如下所示。
do{
循环体
}while(循环条件);
do…while语句的执行流程如图5.2所示。
图5.2do…while语句的执行流程
如图5.2所示,do…while语句首先会先执行一次循环体中的语句,然后判断表达式,当表达式的值为真时,返回重新执行循环体语句。执行循环,直到表达式的判断为假为止,此时循环结束。
接下来通过示例展示do…while语句的使用,具体如例5-5所示。
例5-5do…while语句
1#include
2
3int main(int argc, const char *argv[])
4{
5 int Sum = 0;
6 int Num = 1;
7
8 do{
9 Sum = Sum Num;
10 Num ;
11 }while(Num <= 100);
12
13 printf(”The result is %d\”, Sum);
14
15 return 0;
16}
The result is 5050
上述示例中,Num表示1~100之间的数字,Sum表示计算的总和。程序先执行do后面的循环体语句,在循环体语句中,总和Sum等于上一轮循环得到的总和加上本轮Num表示的数字,完成累加操作。Num自加1后,while再次判断新的Num值,如果Num值小于或等于100时,则继续执行do后面的循环体语句,否则跳出循环。
do…while语句与while语句的不同是:前者是先执行再判断,后者是先判断后执行。