do...while语句和while语句相似,但是它们的格式是上下颠倒的:
do{
……
}while(条件A);
do...while语句会先执行省略号中的内容一次,然后才判断条件A是否成立。如果条件A成立,继续反复执行省略号的内容,直到某一次条件A不再成立,则退出循环。
还是1+2+3....+100的求和问题,写法如下(注意:while的末尾是有分号的)
#include<stdio.h>
int main(){
int n = 1,sum = 0;
do{
sum = sum + n;
n++;
}while(n<=100);
printf("sum=%d\n",sum);
return 0;
}
输出结果:5050
2.4.3 for语句
for语句的使用频率是三种循环语句中最高的,其常见格式如下:
for(表达式A;表达式B;表达式C){
……
}
先来解释这个格式的意思:
1)在for循环开始前,首先执行表达式A
2)判断表达式B是否成立:若成立,执行省略号内容;否则退出循环
3)在省略号内容执行完毕后,执行表达式C,之后回到(2)
示例如下:
#include<stdio.h>
int main(){
int i,sum = 0;
for(i = 1;i<=100;i++){
sum = sum + 1;
}
printf("sum = %d\n",sum);
return 0;
}
输出结果:sum =5050
for循环逻辑是这样的:
1)令 i =1
2)判断 i <=100是否成立:成立,令sum = sum + 1,并在之后执行i++变为2
3)判断 i <=100是否成立:成立,令sum = sum + 2,并在之后执行i++变为3
……
4)当i==100时,判断 i <=100是否成立:成立,令sum = sum + 100,并在之后执行i++变为101
5)判断 i <=100是否成立:不成立,退出循环
于是就有了sum = 1+2+3....+100 = 5050
2.4.4 break和continue语句
break在前面讲解switch的时候已经提到过:他可以强制退出switch语句。而事实上break同样适用于循环,即在需要的场合下直接退出循环(前面介绍的三种循环语句都可以)示例如下:
#include<stdio.h>
int main(){
int n,sum = 0;
for(int i = 1; i <=100; i++){
sum = sum + i;
if(sum >=2000) break;
}
printf("sum = %d\n",sum);
return 0;
}
输出结果:sum = 2016
countinue的作用跟break有点相似,他可以在需要的地方临时结束循环的当前轮回,然后进入下一个轮回,示例如下:
#include<stdio.h>
int main(){
int sum = 0;
for(int i = 1;i <=5;i++){
if(i%2==1)continue;
sum = sum + i;
}
printf("sum = %d\n",sum);
return 0;
}
输出结果:sum = 6
代码执行过程罗列:
1)i==1:i%2==1,因此continue执行 ,于是后面的语句都不执行,i+后进入下一层循环
2)i==2: i%2==0,因此continue不执行,sum =sum+i得sum==2,i++后进入下层循环
3)i==3: i%2==0,因此continue执行,于是后面的语句都不执行,i++后进入下层循环
4)i==4: i%2==0,因此continue不执行,sum =sum+i得sum==6,i++后进入下层循环
5)i==5: i%2==0,因此continue执行,于是后面的语句都不执行,i++后进入下层循环
6)i==6:不满足i<=5的条件,退出for循环