目录
通过分支语句,我们明白,当条件满足的情况下,对应的语句会执行,否则不执行,但是这个语句只会执行一次。然而生活中很多实际的例子是:同一件事我们需要完成很多次,于是,C语言中引入了循环语句,可以实现循环。
while循环
while循环语法结构:
while(表达式)
循环语句;
while语句的执行流程:
和if语句一样,while语句不加{}一次只能控制一条语句,加上{}后可控制多条语句。
例如:实现在屏幕上打印1~10的数字
int main()
{
int i = 1;
while (i <= 10)
{
printf("%d ", i);
i +=1;
}
return 0;
}
若这里不加{},则循环语句只执行一次,打印一个1就结束。
while语句中的break和continue
break实例:
这里简单分析一下这段代码,当i初始化等于1时,满足循环条件小于10,进入循环,循环依次进行,当i=1时,不等于5,,打印1,i++;当i=2时,不等于5,,打印2,i++;当i=3时,不等于5,,打印3,i++;当i=4时,不等于5,,打印4,i++。此时i等于5,满足i==5的条件,进入if判断,执行break,直接跳出整个循环,因此屏幕上只打印1 2 3 4 。
总结:
break在while循环中的作用:在循环中只要遇到break,就跳出循环,停止后期所有的循环,直接终止循环。因此,while中的break是用于永久终止循环的。(一个break跳出一层循环。)
continue实例:
在这里,屏幕上虽然只打印出了1 2 3 4 ,但是控制台上的光标依然在闪烁,这里表示循环一直在进行,这里做一个简单的分析:当初始化i等于1,i<=10,满足条件进入循环,循环依次执行,当i=1时,不等于5,打印1,i++;i=2时,不等于5,打印2,i++;i=3时,不等于5,打印3,i++;i=4时,不等于5,打印4,i++。此时i=5,执行continue,结束本次循环,不执行打印与i++,直接回到while循环,由于没有执行i++,所以这里的i还是等于5,进入if判断,满足i=5,再次回到while循环,所以光标一直在while循环与continue之间跳动(如下图),循环一直进行,所以屏幕上打印1 2 3 4却不显示结束,而是显示光标一直在跳动。
总结:
continue在while循环中是用于终止本次循环的,也就是本次循环中的continue后面的代码不会执行,但不是跳出while循环,而是直接跳转到while语句判断部分,进行下一次循环的入口判断。
那么怎么跳出这个死循环呢?只需要改动一下代码,就可以跳出死循环,如下图:
通过这个例子,可以得出while循环使用的步骤:
1、初始化。例如:int i=0;
2、条件判断部分。例如:while(i<=10)
3、调整部分。例如:i++;
因此一旦条件改变,while容易进入死循环,接下来,我将介绍for循环,对比两种循环。
for循环
for循环语法结构:
for(表达式1;表达式2;表达式3)
循环语句;
表达式1:表达式1为初始化部分,用于初始化循环变量。
表达式2:表达式2为条件判断部分,用于判断循环是否终止。
表达式3:表达式3为调整部分,用于循环条件的调整。、
for循环的变种:
for(表达式1;表达式2;表达式3)中的表达式可以任意省略(尽量不要随意省略),甚至可以都省略。例如:
int main()
{
for (;;)
{
printf("编程\n");
}
return 0;
}
不过这样就没有判断 条件,编译器会默认为真,会无限循环打印。
for循环中的控制变量可以不止一个。例如:
int main()
{
int x, y;
for (x = 0, y = 1; x < 2 && y < 4; ++x, y++)
{
printf("编程\n");
}
return 0;
}
x初始化为0,y初始化为1,x<2与y<3同时满足,执行循环体,打印编程,x+1=2,y+1=2,x<2与y<3同时满足,执行循环体,打印编程,x+1=3,y+1=3,y<4满足但是x<2不满足,因此结束循环。若用一个控制变量实现该代码效果,下面两段代码可以替换:
int main()
{
int x = 0;
int y = 0;
for (x = 0; x < 2; x++)
{
for (y = 1; y < 2; y++)
printf("编程\n");
}
return 0;
}
int main()
{
int x = 0;
int y = 0;
for (x = 0; x < 1; x++)
{
for (y = 1; y < 3; y++)
printf("编程\n");
}
return 0;
}
for语句书写建议:
1、不可在for循环体内修改循环变量,防止for循环失去控制(代码会比较混乱)。例如:
这段代码等同于:
int main()
{
int i = 0;
while (i < 10)
{
printf("编程\n");
i += 2;
}
return 0;
}
2、建议for语句的循环控制变量的取值采用前闭后开区间的写法。例如
int i = 0;
for(i=0;i<11;i++) //建议
//for(i=0;i<=10;i++)不建议
for语句的执行流程:
和if、while语句一样,for语句不加{}一次只能控制一条语句,加上{}后可控制多条语句。
例如:实现在屏幕上打印1~10的数字
可以发现在while循环中的三个条件,由于格式的问题,使得三个部分很可能相隔较远,这样查找修改就不够集中和方便。所以,for循环的格式更胜一筹。(for循环使用的频率也是最高的)
for循环中的break和continue
break实例:
当i=1,小于11,进入for循环,不等于5,打印1,执行i++,i=2,小于11,进入for循环,不等于5,打印2;执行i++,i=3,小于11,进入for循环,不等于5,打印3;执行i++,i=4,小于11,进入for循环,不等于5,打印4;执行i++,i=5,满足if判断条件,执行break,跳出整个循环,因此屏幕上打印1 2 3 4。因此,我们发现在for循环中,break语句的作用和在while中是一样的。
总结:
break在for循环中的作用:在循环中只要遇到break,就跳出循环,停止后期所有的循环,直接终止循环。因此,for中的break是用于永久终止循环的。(一个break跳出一层循环。)
continue实例:
这里简单分析一下这段代码, 当i=1,小于11,进入for循环,不等于5,打印1,执行i++,i=2,小于11,进入for循环,不等于5,打印2;执行i++,i=3,小于11,进入for循环,不等于5,打印3;执行i++,i=4,小于11,进入for循环,不等于5,打印4;执行i++,i=5,满足if判断条件,执行continue,跳过本次循环,不执行后面的打印,直接来到for循环,继续执行i++,i=6,小于11,进入for循环,不等于5,打印6;执行i++,i=7,小于11,进入for循环,不等于5,打印7;执行i++,i=8,小于11,进入for循环,不等于5,打印8;执行i++,i=9,小于11,进入for循环,不等于5,打印9;执行i++,i=10,小于11,进入for循环,不等于5,打印10;执行i++,i=11,不满足循环条件(<=11),结束循环。因此,我们发现在for循环中,continue语句的作用和在while中是一样的。同时从这里也可以反应出,for循环与while循环的作用没有区别,但是从形式上来说,for的形式更优。
总结:
continue在for循环中是用于终止本次循环的,也就是本次循环中的continue后面的代码不会执行,但不是跳出for循环,而是直接跳转到for语句判断部分,进行下一次循环的入口判断。
do while循环
do while循环语法结构:
do
循环语句;
while(表达式);
和if、while、for语句一样,do while语句不加{}一次只能控制一条语句,加上{}后可控制多条语句。
do while语句的执行流程:
从do while语句的执行流程可以看出do while语句的特点:即程序运行就执行循环体一次,然后再进行条件判断,这就保证了循环至少执行一次,使用的场景有限,所以不是经常使用。
例如:实现在屏幕上打印1~10的数字
当i初始化等于1时,不用判断,直接打印i,i++,i=2,此时进行判断,i=2<11,继续执行循环体,打印2,i++,i=3,判断i=3<11,继续执行循环体;打印3,i++,i=4,判断i=4<11,继续执行循环体......打印9,i++,判断i=10<11,继续执行循环体;打印10,i++,i=11,判断i=11,不小于11,因此不满足循环判断条件,结束循环。
do while循环中的break和continue
break实例:
当i=1时,进入循环,打印1,执行i+1=2,进行条件判断2<11,继续执行循环;打印2,i++,i=3,进行条件判断3<11,继续循环;......打印10,i++,i=11,进行条件判断11!<11,循环结束。
总结:
break在do while循环中的作用:在循环中只要遇到break,就跳出循环,停止后期所有的循环,直接终止循环。因此,do while中的break是用于永久终止循环的。(一个break跳出一层循环。)
continue实例:
在这里,屏幕上虽然只打印出了1 2 3 4 ,但是控制台上的光标依然在闪烁,这里表示循环一直在进行,这里做一个简单的分析:当初始化i等于1,进入循环,打印1,i++,i=2,进行while条件判断,2<11,继续执行循环体;打印2,i++,i=3,进行while条件判断,3<11,继续执行循环体;打印3,i++,i=4,进行while条件判断,4<11,继续执行循环体;打印4,i++,i=5,满足分支语句if判条件i等于5,结束本次循环,i=5,进入dq while循环,满足分支语句if判条件i等于5,结束本次循环......所以屏幕上打印1 2 3 4却不显示结束,而是显示光标一直在跳动。
总结:
continue在for循环中是用于终止本次循环的,也就是本次循环中的continue后面的代码不会执行,但不是跳出for循环,而是直接跳转到for语句判断部分,进行下一次循环的入口判断。