目录
[1.1 if 和 while 的对比](#1.1 if 和 while 的对比)
[1.2 while 语句的执行流程](#1.2 while 语句的执行流程)
[6.3 while循环简单例题](#6.3 while循环简单例题)
[2、for 循环](#2、for 循环)
[2.1 语法形式](#2.1 语法形式)
[2.2 for循环与while循环对比](#2.2 for循环与while循环对比)
[2.3 for循环的执行流程](#2.3 for循环的执行流程)
[2.4 for循环的简单例题](#2.4 for循环的简单例题)
[2.5 扩展:for循环的初始化,判断,调整三个部分都是可以省略的](#2.5 扩展:for循环的初始化,判断,调整三个部分都是可以省略的)
[3、do-while 循环](#3、do-while 循环)
[3.1 语法形式](#3.1 语法形式)
[3.2 do-while 循环的执行流程](#3.2 do-while 循环的执行流程)
[3.3 do-while循环的简单例题](#3.3 do-while循环的简单例题)
[4.1 while循环中的break 和continue](#4.1 while循环中的break 和continue)
[4.1.1 break举例](#4.1.1 break举例)
[4.1.2 continue举例](#4.1.2 continue举例)
[4.2 for循环中的break 和continue](#4.2 for循环中的break 和continue)
[4.2.1 break 举例](#4.2.1 break 举例)
[4.2.1 continue举例](#4.2.1 continue举例)
[4.3 do-while循环中的break和continue](#4.3 do-while循环中的break和continue)
[5.1 例题](#5.1 例题)
[5.2 题目分析:](#5.2 题目分析:)
[5.3 代码演示](#5.3 代码演示)
前言:
嗨嗨嗨!新的一篇来啦!这一次,我携带着满满的关于while、for和do-while等的精彩内容,准备与大家分享。希望你们喜欢这一顿知识的大餐,也希望我的文章能为你的编程之路增添一份乐趣。别忘了,这篇文章也意味着"分支与循环"板块的完美收官哦!期待你们的阅读,我们文末见分晓!
话不多说,直接上正文
1、while循环
C语言提供了3种循环语句**,while** 就是其中一种,接下来将要介绍一下while语句。
while 语句的语法结构和if语句非常相似。
1.1 if 和 while 的对比
1 if(表达式)
2 语句;
3
4 while(表达式)
5 语句;//如果循环体想包含更多的语句,可以加上大括号
代码演示:
cs
//代码 1 if
#include <stdio.h>
int main()
{
if(1)
printf("hehe \n");//if后边条件满足,打印一次hehe
return 0;
}
//代码 2 while
#include <stdio.h>
int main()
{
while(1)
printf("hehe \n");//while后边条件满足,循环打印hehe
return 0;
}
代码结果:
代码1:
代码2 :
我们从上面代码结果可以直观的看到他们之间的区别,while语句时可以实现循环效果的。
while 和 if 一样,想要控制多条语句需要加上 {}
代码演示:
cpp
#include <stdio.h>
int main()
{
while(1)
{
printf("hello \n");
printf("China \n");
}
return 0;
}
代码结果:
1.2 while 语句的执行流程
#include <stdio.h>
int main()
{
while(1) //while后的表达式称为判断表达式
printf("hehe \n");
return 0;
}
首先上来就是执行判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执行循环语句,语句执行完后再继续判断,是否进行下一次判断。
6.3 while循环简单例题
例:在屏幕上打印1~10的值
代码演示:
cs
#include <stdio.h>
int main()
{
int i = 1;//初始化
while (i<=10)//判断
{
printf("%d\n",i);
i++;//调整
}
return 0;
}
代码结果:
解读:
i = 1 进到while 循环,由于i=1 <10,因此表达式为真,打印出1 后再加1(后置++) ,然后 i = 2 再次进入到while 循环,打印出 2 后再加1 ,以此类推,当 i = 10 进入循环然后打印出来再加1,i= 11 不满足i <= 10的表达式,结果为假,因此循环结束。
while循环落下帷幕,for循环的精彩即将上演
或许你会好奇,为何在拥有while的足智多谋后,我们还需要for的加入?别急,且听我细细道来。
2、for 循环
2.1 语法形式
for 循环时三种循环中使用最多的,for 循环的语法形式如下:
1 **for (**表达式1; 表达式2; 表达式3;)
2 语句: //如果循环体想包含更多语句,可以加上大括号{}
表达式1 :用于循环变量的初始化
表达式2 :用于循环结束条件的判断
**表达式3 :**用于循环变量的调整
2.2 for循环与while循环对比
while循环代码格式:
cs
#include <stdio.h>
int main()
{
int i = 1;//初始化
while (i<=10)//判断
{
printf("%d\n",i);
i++;//调整
}
return 0;
}
从上面代码中,我们可以看到初始化,判断,调整三块是分开的,而且这三个数据无论哪一个变了,都会影响到循环结果。因此,在这个循环比较大的情况下,我们对循环的掌控就没有那么全面,很容易出现错误。
我们在来看for 循环的代码书写格式
cs
for (表达式1; 表达式2; 表达式3;)
初始化 判断 调整
语句: //如果循环体想包含更多语句,可以加上大括号{}
for循环中,初始化,判断,调整 是整合在一起的。到这应该就明白了为什么for 循环的使用是最多的了吧!for循环 在面对大型循环的时候,容错会比while循环高。
总结:for和while在实现循环的过程中都有初始化、判断、调整这三个部分,但是for循环的三个部分非常集中,便于代码的维护,而如果代码较多的时候while循环的三个部分就比较分散,所以从形式上 for循环要更优一些。
2.3 for循环的执行流程
解读:
首先执行 表达式1 初始化 循环变量,接下来就是执行 表达式2 的判断 部分,表达式2的结果如果==0,则循环结束;表达式2的结果如果 !=0 则执行循环语句,循环语句执行完后,再去执行表达式3 ,调整 循环变量,然后再去 表达式2 的地方执行判断,表达式2的结果是否为0,决定循环是否继续。
整个循环的过程中,表达式1初始化部分只被执行1次,剩下的就是表达式2、循环语句、表达式3在循环。
2.4 for循环的简单例题
在屏幕上打印1~10的值
代码演示:
cs
int main()
{
int i = 0;
for(i = 1;i <= 10;i++)
{
printf("%d",i);
}
return 0;
}
演示结果:
可以看到和while循环结果是相同的,在严格意义上,没有规定必须用哪一个,你可以根据自己的情况来选择,哪一种顺手就用哪一种。
2.5 扩展:for循环的初始化,判断,调整三个部分都是可以省略的
代码演示:
cs
int maiin()
{
for( ; ;)
{
printf("hehe\n");
}
return 0;
}
for循环中的这三个可以同时省略,也可以单个省略。
但是:如果判断部分被省略,那么判断部分就恒为真,就会造成死循环。
for循环的旅程就此结束,接下来是do-while循环的低调亮相时刻。虽然它很少被重用,但它的存在仍然为程序世界增添了一份独特的风采。让我们期待它在特定场景下的精彩表现吧!
3、do-while 循环
3.1 语法形式
在循环语句中do-while 语句的使用最少,它的语法形式如下:
cpp
do
语句;
while(表达式);
while 和 for 这两种循环都是先判断 ,条件如果满足就进入循环 ,执行循环语句 ,如果不满足就跳出循环;
而 do while 循环则是先直接进入循环体 ,执行循环语句 ,然后再执行 while 后的判断表达式,表达式为真,就会进行下一次,表达式为假,则不再继续循环。
3.2 do-while 循环的执行流程
在do while 循环中先执行图上的"语句",执行完语句,在去执行"判断表达式",判断表达式的结果是**!=0** ,则继续循环,执行循环语句;判断表达式的结果 ==0, 则循环结束。
所以在do while语句 中循环体是至少执行一次的,这是do while循环比较特殊的地方。
3.3 do-while循环的简单例题
在屏幕上打印1~10的值
代码演示:
cs
int main()
{
int i = 1;//初始化
do
{
printf("%d ", i);
i++;//变量
} while (i <= 10);//判断
return 0;
}
代码结果:
4、break和continue语句
4.1 while循环中的break 和continue
在循环执行的过程中,如果某些状况发生的时候,需要提前终止循环,这是非常常见的现象。C语言中提供了break 和continue 两个关键字,就是应用到循环中的。
break 的作用是用于永久的终止循环,只要break 被执行,直接就会跳出循环,继续往后执行。 continue 的作用是跳过本次循环中 continue后边的代码,在for 循环和while循环中有所差异的。
4.1.1 break举例
代码演示:打印结果是多少?
cs
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
分析:打印了1,2,3,4后,当i 等于5的时候,循环在break的地方终止,不再打印,不再循环。
所以break 的作用就是永久的终止循环,只要break 被执行,break 外的第一层循环就终止了。
那以后我们在循环中,想在某种条件下终止循环,则可以使用break来完成我们想要的效果。
4.1.2 continue举例
continue 是继续的意思,在循环中的作用就是跳过本次循环中continue后边的代码,继续进行下一次循环的判断。
上面的代码,如果把 break 换成 continue 会是什么结果呢?
代码演示:打印结果是多少?
cs
int main()
{
int i = 1;
while (i <= 10)
{
i++;
if (i == 5)
continue;
printf("%d",i);
}
return 0;
}
代码结果:
1 2 3 4 6 7 8 9 10 11
分析结果:
i=1 进来后遇到i++ 变为2, 因为2!=5 ,continue 未执行,打印 2,然后继续循环,直到i=5 后执行continue ,跳过printf ,因此5不打印。再来到i++ 这时 i 的值变为6,continue 未执行,继续打印6 直到i=10后再加1,循环结束。
观察continue 的这两组代码,你有发现什么不同吗?
int main() int main()
{ {
int i = 1; int i = 1;
while (i <= 10) while (i <= 10)
{ {
if (i == 5) i++;
break; if (i == 5)
printf("%d",i); break;
i++; printf("%d",i);
} }
return 0; return 0;
} }
没错! i++ 的位置不同了 。那么,为什么我们要将i++ 的位置调到continue的前面呢?
来,代码结果展示:
这个代码是还在运行的,不过打印完1 2 3 4 后死循环了。
解释一下:continue 的作用是跳过本次循环中 continue后边的代码,因此当i=5进入while循环后continue被执行会直接跳过它后面的两行代码:
cs
printf("%d",i);
i++;
然后直接来到while( i<=10)这一行,继续再次进入while循环,continue再次被执行...因此进入死循环。
现在应该明白i++为什么要放到continue前面了吧!
4.2 for循环中的break 和continue
4.2.1 break 举例
for和while里的break用法一样,不管循环还需要循环多少次,只要执行到了break,循环就会彻底终止。
代码演示:
cs
int main()
{
int i = 0;
for(i = 1;i <= 10;i++)
{
if(i == 5)
break;
printf("%d",i);
}
return 0;
}
代码结果:
1 2 3 4
break的作用是永久终止循环,未来我们在每个条件发生的时候,不想再继续循环的时候,就可以使用break来完成。
4.2.1 continue举例
上面的代码,如果把break换成continue会发生什么结果呢?
代码演示:
cs
int main()
{
int i = 0;
for(i = 1;i <= 10;i++)
{
if(i == 5)
continue;
printf("%d",i);
}
return 0;
}
代码结果:
2 3 4 6 7 8 9 10 11
4.3 do-while循环中的break和continue
do-while语句中的break和continue的作用于while循环中几乎一模一样
cs
#include <stdio.h>
int main()
{
int i = 1;
do
{
if(i == 5)
break;
printf("%d",i);
i = i + 1;
} while(i<=10);
return 0;
}
cs
#include <stdio.h>
int main()
{
int i = 1;
do
{
if(i == 5)
continue;
printf("%d",i);
i = i + 1;
} while(i<=10);
return 0;
}
5、循环的嵌套
在前面,本文详细介绍了三种循环while、for、do-while 的使用方法,相信聪明的伙伴们已经掌握了这三种循环的单独使用了把!!但是有句话说的好,人多力量大。当我们把这三种循环嵌套在一起使用时才能够更好的解决问题。这也就是我们所说的:**循环嵌套。**我们用一道题目来学习循环嵌套。
5.1 例题
找出100~200之间的素数,并打印在屏幕上。
补充:素数又称为质数,指的是只能被 1 和本身整除的数字。
5.2 题目分析:
1.要从100~200之前找出素数,首先需要有100~200之间的数,这里能够使用循环来获得。我们可以借助for 循环:for i = 100; i <= 200; i++
2.每次循环产生一个 i 的时候,需要判断 i 是否为素数
怎么判断 i 是否为素数呢?
拿2 ~ i-1 之间的数字去试除 i
如果2 ~ i-1 之间有数字能整除i,那么 i 就不是素数
如果2 ~ i-1 之间的所有数字都不能整除i,i 就是素数
要产生2~i-1之间的数字,这里也能够使用 for 循环解决。
cs
for(j=2; j<=i-1; j++)
{
i%j == 0
}
5.3 代码演示
cs
#include <stdio.h>
int main()
{
int i = 0;//循环变量
for (i = 100; i <= 200; i++)//此for循环的目的:每次循环产生一个i,要判断 i 是否是素数
{
int flag = 1;//假设i是素数
int j = 0;//下面for循环的循环变量
for (j = 2; j <= i - 1; j++)
{
if (i % j == 0)
{
flag = 0;//i 不是素数
break;//为了直接跳出这次循环 例如:i = 100 进来后被2 整除后就不用在看后面的数字
}
}
if (flag == 1)//如果 i%j !=o,则跳转到这里,即 i为素数,然后打印
{
printf("%d\n", i);
}
}
return 0;
}
代码里都进行的注释,如果还有不明白的可以私我!
代码结果:
这只是关于求素数的一种方法,后面会专门写一篇关于素数求解的文章 ,期待大家的到来!
这个例子里只用了for循环的循环嵌套,并没有使用到三种循环的嵌套,但是相信聪明的伙伴们应该也能明白怎么使用循环嵌套了吧。!!!
6、goto语句
C语言中提供了一个非常特别的语法,就是goto语句和跳转语句,goto语句可以实现在同一个函数内跳转的设置好的标号处。
goto语句,也被称为无条件转移语句,是一种编程语言构造,它允许控制权直接跳转到程序中指定的标签标记处。
代码演示:
cs
#include <stdio.h>
int main()
{
printf("China\n");
goto next;
printf("xly\n");
next:
printf("strong\n");
return 0;
}
代码结果:
goto 语句如果使用的不当,就会导致在函数内部随意乱跳转,打乱程序的执行流程, 所以我们的建议是能不用尽量不去使用;但是goto语句也不是一无是处,在多层循环的代码中,如果想快速跳出,使用 goto 就非常的方便了。
cs
for(...)
{
ror(...)
{
for(...)
{
if(disaster)
goto error;
}
}
}
error;
本来 for 循环想提前退出得使用break,一个break 只能跳出一层for循环 ,如果3层循环嵌套就得使用3个break 才能跳出循环,所以在这种情况下我们使用goto 语句就会更加的快捷。
结语:
分支与循环模块的旅程即将告一段落,希望每位小伙伴都能带着满满的收获继续前行。真诚地说,你们的进步是我最大的快乐源泉!咱们下一段学习之旅再见哦~
本篇文章可以和题目讲解(2)一起食用,效果更佳!!
预告:下篇开始将开启函数模块,期待大家的到来!!!