第五章:循环结构程序设计
5.1 为什么需要循环控制
在日常生活中或是在程序所处理的问题中常常遇到需要重复处理的问题,因此需要循环结构(又称重复结构)
5.2 用while语句实现循环
while语句的一般形式如下:
while (表达式) 语句
其中,语句又被称为循环体,多被括在大括号中;表达式又被称为循环条件表达式,当此表达式值为真(非0)时,就执行循环体语句,反之则不执行。表达式的值只能是真或假。
while语句可以简单记为:
**只要当循环条件表达式为真(即给定的条件成立),就执行循环体语句。
5.3 用do…while语句实现循环
除了while语句外,C语言还提供了do…while语句来实现循环结构。如:
int i=1;
do
{
printf("%d",i++);
}
while(i<=100);
它的作用是:执行(用do表示做)printf语句,然后在while后面的括号内的表达式中检查i的值,当i小于或等于100时,就返回再执行一次循环体(printf语句),直到i大于100为止。该程序的结果是输出1-100。i++是先输出i的值,然后再使i的值+1。若改成++i,则先使i的值+1,再输出i的值。
do…while语句和while语句的区别在于,do…while语句的执行过程为:先执行循环体,然后再检查条件是否成立,若成立,再执行循环体。
同时,当具有相同循环体且while后面的表达式的第一次值为“真”时,两种循环得到的结果相同;否则,二者结果不同。
5.4 用for语句实现循环
for语句更为灵活,不仅可以用于循环次数已经确定的情况,还可以用于循环次数不确定而只给出循环结束条件的情况。其一般形式为:
for (表达式1;表达式2;表达式3)
语句
其中:
表达式 | 作用 |
---|---|
1 | 设置初始条件,只执行一次。可以为0个、1个或多个变量设置初值(如i=1) |
2 | 是循环条件的表达式,用来判断是否继续循环。在每次执行循环体前先执行此表达式,决定是否继续执行循环 |
3 | 作为循环的调整,例如使循环变量增值,它是在执行完循环体后才进行的 |
最常用的for语句形式是:
如:
for (i=1;i<=100;i++){
sum = sum + i;
}
注意:
(1)
(2)“表达式1”可以省略,即不设置初值,但表达式1后面的分号不能省略,且循环变量的初值需要提前定义。
(3)“表达式2”也可以省略,即不设置检查循环的条件,相当于无限循环。但分号不能省略。(4)“表达式3”也可以省略,但在循环体中应有相应的语句使循环正常结束。
(5)可以只有表达式2而没有表达式1和3,此时需要在循环语句前定义循环变量,在循环体中调整循环变量。
(6)3个表达式都可以省略,相当于while(1)。
(7)表达式1和表达式3都可以是与循环控制无关的任意表达式,但必须使循环能正常执行。
(8)表达式1和表达式3可以是一个简单的表达式,也可以是逗号表达式,即包含一个以上的简单表达式,中间用逗号间隔。
(9)表达式2一般是关系表达式或逻辑表达式,但也可以是数值表达式或字符表达式,只要其值为非零,就执行循环体。
(10)C99允许在for语句中的“表达式1”定义变量并赋予初值。
5.5 循环的嵌套
5.6 几种循环的比较
5.7 改变循环的执行状态
5.7.1 用break语句提前终止循环
例: 在全系1000名学生中举行慈善募捐,当总数达到10万元时就结束,统计此时捐款的人数以及平均每人捐款的数目。
# include<stdio.h>
# define SUM 100000
int main(){
float amount,average,total=0;
int i;
for (i=0;i<=1000;i++){
printf("请输入第%d个人的捐款数额:",i+1);
scanf("%f",&amount);
total += amount;
if (total>=SUM) break; //如果金额达到100000就停止循环
}
average = total/(i+1);
printf("本次募捐人数为:%d\n金额为:%9.2f\n平均每人捐款:%9.2f\n",i+1,total,average);
return 0;
}
结果:
break的作用是使流程跳到循环体之外,接着执行循环体下面的语句。break语句只能用于循环语句和switch语句中,而不能单独使用
5.7.2 用continue语句提前结束本次循环
例: 要求输出100-200内不能被3整除的数。
# include<stdio.h>
int main(){
int num;
for (num=100;num<201;num++){
if (num%3==0){
continue;
}
printf("%d不能被3整除\n",num);
}
return 0;
}
5.7.3 break语句和continue语句的区别
break语句结束整个循环过程,不再判断执行循环的条件是否成立;而continue语句只结束本次循环,而不是终止整个循环的执行。
当有双重循环(嵌套循环)时,break会中断所在循环的执行,而continue也是会结束所在循环的本次循环。即,当break在内循环体中,则会提前终止内循环;continue也是同理,会提前结束本次内循环。
5.8 循环程序举例
略