我们都说C语言是一种结构化的程序设计语言,其结构分为三种,顺序结构、选择结构、循环结构。
在之前的文章中,我详细讲解过了顺序结构和选择结构,那么在本文章中,将讲解C语言中的最后中结构——循环结构。
C语言中,提供好了三种循环语句,它们分别是while、do…while、for循环语句。
接下来我们讲解一下,三大循环语句之一的while循环!
讲这个的目的是,让我们从自己熟悉的知识出发,去接触新的知识,会达到事半功倍的效果。
whlie的语法形式:
if(表达式)
语句;
while(表达式)
语句;//如果循环想要表达更多的语句内容时,记得加上大括号哦!(这个点跟if一样)
请读者看下面两个代码:
#include
int main()
{
if(1)
//if后面的表达式为真时,就会打印"今天又是元气满满的一天"
printf("今天又是元气满满的一天!\n");
return 0;
}
#include
int main()
{
while(1)
//while后面的表达式为真时,就会死循环的打印"今天又是元气满满的一天"
printf("今天又是元气满满的一天!\n");
return 0;
}
细心的读者就已经发现它们两个的区别了。循环循环,总得是个不断重复的干某件事过程吧。
这个就是选择语句跟循环语句本质的区别。
下面我将给读者们展示一张流程图(不要眨眼哦~)
首先上来就是进行条件判断,如果此条件为真,就进入循环体,执行循环体中的语句,当执行完循环体的语句时,又会回到最初的地方接着执行判断表达式,如此循环反复。如果条件为假,则就不会执行循环体里面的语句,我们经常讲这个为"跳过循环"。
总之,你只需要记住一句话,判断表达式为真,就执行循环语句的内容,接着再判断。判断表达式为假,结束循环。
讲了这么知识,是时候该我们上场表演了。
例子1:在屏幕上打印1~10的数字
#include
int main()
{
int num = 1;
while(num <= 10)
{
printf("%d ",num);
num = num + 1; //熟练的读者,直接用num++
}
return 0;
}
#include
int main()
{
int num = 0;
scanf("%d", &num);
while(num) //至于为什么将num作为判断表达式,请读者细品。
{
int temp = num % 10;
num = num / 10;
printf("%d ", temp);
}
return 0;
}
上面讲解完了循环三巨头之一的while循环,接着我们讲 for 循环
for(表达式1;表达式2;表达式3)
语句;//如果循环想要表达更多的语句内容时,记得加上大括号哦!
表达式1:用于循环变量的初始化
表达式2:用于循环结束条件的判断
表达式3:用于循环变量的调整
首先执行表达式1初始化循环变量,接下来,就执行表达式2的判断部分,表达式2的结果如果为假,则循环结束;表达式2的结果如果为真时,则执行循环语句,循环语句执行完后,再去执行表达式3,调整循环变量,然后再去表达式2的地方执行条件判断,表达式2的值是否为假,决定着循环是否继续。
不难发现,在整个循环的过程中,表达式1只在一开始执行了1次,后面的操作它都不参与了,剩下的就是表达式2、循环语句、表达式3在循环执行 直至循环退出。
例子1:在屏幕上打印1~10
#include
int main()
{
int i = 0;
for(i = 1; i <= 10; i++)
{
printf("%d ", i);
}
return 0;
}
在这里,你可以对比while循环的写法,感受它们两个的区别。
例子2:计算1~100 之间的3的倍数的数字之和
写到这里,聪明的读者们就会提出一个疑问,那我们能不能直接去除掉没有必要的循环和判断?
有!!!睁大眼睛看好了
我们只剩下一个循环巨头没讲了,那就是do while循环
do
{
语句;
}while(判断表达式);
这里需要注意一个点,也是初学者最容易遗忘的点。那就是,while的判断表达式后面记得加上一个";"。
在 do while 循环中先执⾏图上的“语句”,执⾏完语句,在去执⾏“判断表达式”,判断表达式的
结果是!=0,则继续循环,执⾏循环语句;判断表达式的结果==0,则循环结束。
所以在 do while 语句中循环体是⾄少执⾏⼀次的,这是 do while 循环⽐较特殊的地⽅。
在do while循环中先执行图上的“语句”执行完语句后,再去执行"判断表达式",判断表达式的结果是**!=0**,则继续执行循环语句;判断表达式的结果是**==0**,则结束循环。
所以在do while语句中循环体至少是执行一次的,这个也正是do while区别于其他循环语句的特点。
例子1:在屏幕上打印1~10的值
#include
int main()
{
int i = 1;
do
{
printf("%d ", i);
i = i + 1;
}while(i <= 10);
return 0;
}
在执行循环的过程中,如果发生了某些特殊的情况,导致我们想提前终止循环,那该怎么办?
C语言就给我们提供了两种语句:break 和 continue
那它们有什么区别?
下面我来讲解一下。
如果我们想终止循环,有两种形式:
break:用于永久的终止循环,只要break执行,直接就会跳出循环,继续往后执行别的语句。
continue:用于跳过本次循环中的continue后面的代码,在for循环和while循环中有所差异。
#include
int main()
{
int i = 1;
while(i <= 10)
{
if(i == 5)
break; //当i等于5后,就执行break,循环就终止了
printf("%d ", i);
i++;
}
return 0;
}
打印了1,2,3,4后,当i等于5的时候,循环在 break 的地⽅终⽌,不再打印,不再循环。
所以 break 的作⽤就是永久的终⽌循环,只要 break 被执⾏, break 外的第⼀层循环就终⽌了。
那以后我们在循环中,想在某种条件下终⽌循环,则可以使⽤ break 来完成我们想要的效果。
continue 是继续的意思,在循环中的作⽤就是跳过本次循环中 continue 后边的代码,继续进⾏下⼀次循环的判断。
上⾯的代码,如果把 break 换成 continue 会是什么结果呢?
#include
int main()
{
int i = 1;
while(i <= 10)
{
if(i == 5)
continue;
//当i等于5时,执行continue语句,直接跳过continue后面的语句,回到循环判断的地方
//因为这里跳过了i++,所以i一直是5,程序陷入了一个死循环
printf("%d", i);
i++;
}
return 0;
}
到这⾥我们就能分析出来, continue 可以帮助我们跳过某⼀次循环 continue 后边的代码,直接
到循环的判断部分,进⾏下⼀次循环的判断,如果循环的调整是在 continue 后边的话,可能会造成
死循环。
这里补充一个点,当遇到多层循环嵌套时,break和continue本质上都是只能跳出一层循环
C语⾔提供了⼀种⾮常特别的语法,就是 goto 语句和跳转标号, goto 语句可以实现在同⼀个函数
内跳转到设置好的标号处。其本质就是强制改变编译器执行语句的顺序。
例如:
#include
int main()
{
printf("今天学习了吗?\n");
goto next;
printf("包学习的!\n");
next:
printf("跳过了\"包学习的!\"的打印\n");
return 0;
}
我们都说事物有优势,亦有其弊端。
如果goto语句使用不当,就导致函数内部的语句随意跳转,打乱了程序的执行顺序,所以我的建议是能不用尽量不去使用,但是goto语句也不是那么一无是处的,在多层循环的代码中,如果想快速跳出使用goto就非常方便了。
for(...)
{
for(...)
{
for(...)
{
if(disaster)
goto error;
}
}
}
error:
本来for循环中的break语句一次只能跳出一层循环,如果要跳出3层循环嵌套就得使用3个break才能跳出循环,所以这种情况下我们使用goto语句是最快捷的方式。
在本章节,我们讲解了三大循环语句(while、for、do while),还讲解了break和continue语句的用法(强制打断循环的内容),顺便对goto语句也提了一嘴。
希望这些知识,读者们下来能够好好的理解吸收!!!
如果觉得文章写得不错的话,记得点个免费的赞。
学习很难,但坚持一定很酷!!!