C语言-循环结构
while
do while
for
break
continue
while循环
while循环的一般形式为:
while(/* 表达式 */){
/* 语句块 */;
}
意思是,先计算“表达式”的值,当值为真(非0)时,执行“语句块”;执行完“语句块”,再次计算表达式,如果为真,继续执行“语句块”······这个过程会一直重复,知道表达式值为假(0),就跳出循环,执行while后面的代码。
我们通常将“表达式”称为循环条件,把“语句块”称为循环体,整个循环的过程就是不停的判断循环条件,并执行循环体代码的过程。
我们要注意如果循环条件中不包含变量,会发生什么;
- 循环条件成立时的话,while循环会一直执行下去,永不结束,称为“死循环”。例如:
#include <stdio.h>
int main(){
while(1){
printf("1");
}
return 0;
}
- 循环条件不成立的话,while循环就会一次都不执行。例如:
#include <stdio.h>
int main(){
while(0){
printf("1");
}
return 0;
}
do-while循环
do-while循环的一般形式为:
do{
/* 语句块 */
}while(/* 表达式 */);
do-while循环和while循环不同的是:他会先执行“语句块”,然后再判断表达式是否为真,如果为真则继续执行循环,如果为假,则终止循环。因此也就是说do-while循环至少执行一次“语句块”。
for循环
for循环的一般形式为:
for(/* 表达式1 */; /* 表达式2 */; /* 表达式3 */){
/* 语句块 */
}
它的运行过程:
- 先执行“表达式1”。
- 再执行“表达式2”,如果它的值为真(非0),则执行循环体,否则结束循环。
- 执行完循环体后再执行“表达式3”,然后执行“表达式2”,判断它的值是否为真(非0),则执行循环体,否则结束循环。
- 重复执行步骤3,直到“表达式2”的值为假,结束循环。
for循环的三个表达式
for循环中的“表达式1(初始化条件)”、“表达式2(循环条件)”和“表达式3(自增或者自减)”都是可选项,都可以省略(但是分号;必须留下)。
- 修改“从1加到100的和”的代码,省略“表达式1(初始化条件)”:
#include <stdio.h>
int main()
{
int i = 1, sum = 0;
for( ; i<=100; i++)
{
sum+=i;
}
printf("%d",sum);
}
- 省略“表达式2(循环条件)”,如果他不做其他处理将导致整个循环陷入死循环。死循环就是循环永远成立,它会一直执行下去。
#include <stdio.h>
int main()
{
int i, sum=0;
for(i=1; ; i++)
sum=sum+i;
}
- 省略“表达式3(自增或者自减)”,就不会修改“表达式2(循环条件)”中的变量,这时可在循环体中插入修改变量的语句。
#include <stdio.h>
int main()
{
int i, sum=0;
for(i=1;i<=100;)
{
sum+=i;
i++;
}
}
- 它也可以将全部表达式都删除,那
for(;;)
就相当于while(1)
- “表达式1”可以是初始化语句,也可以是其他语句。例如:
#include <stdio.h>
int main()
{
int i,sum;
for(i=1,sum=0;i<=100;i++)
sum+=i;
printf("%d",sum);
}
- “表达式2”一般为关系表达式或者逻辑表达式,也可以是字符或者数字,只要其值非零,就执行循环。例如:
for(i=0;(c=getchar())!='\n';i+=c);
break 关键字
当break关键字用于循环时,会终止当前循环而执行循环后面的代码,而break语句经常和if语句连用,即满足条件然后跳出循环。在多层循环中break关键字只能向外跳出一层循环。例如:
#include <stdio.h>
int main()
{
int i=1, j;
while(1)
{ // 外层循环
j=1;
while(1)
{ // 内层循环
printf("%-4d", i*j);
j++;
if(j>4) break; //跳出内层循环
}
printf("\n");
i++;
if(i>4) break; // 跳出外层循环
}
return 0;
}
运行结果:
1 2 3 4
2 4 6 8
3 6 9 12
4 8 12 16
continue 语句
continue语句的作用时提前结束本次循环,直接进入下一次循环。
#include <stdio.h>
int main()
{
char c = 0;
while(c!='\n')
{ //回车键结束循环
c=getchar();
if(c=='4' || c=='5')//按下的是数字键4或5
{
continue; //跳过当次循环,进入下次循环
}
putchar(c);
}
return 0;
}
运行结果:
0123456789↙
01236789
break与continue的对比;break用来结束所有循环,循环语句不在有执行的机会,而continue是结束本次循环,提前进入下一次循环,如果循环条件成立,则继续执行循环。
循环的嵌套
理解了上面那些程序,我们就来谈谈,循环的嵌套,我们用一个简单的九九乘法表来。
#include <stdio.h>
int main()
{
int i,j;
for(i=0;i<10;i++)
{
for(j=0;j<=i;j++)
{
printf("%d*%d=%d ",i,j,i*j);
}
printf("\n");
}
return 0;
}
运行结果:
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81