前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【C语言】循环语句详解

【C语言】循环语句详解

作者头像
TANGLONG
发布2024-10-15 18:59:39
发布2024-10-15 18:59:39
11900
代码可运行
举报
运行总次数:0
代码可运行

一、while循环

while的语法与if的语法结构类似,下面我们从它们的对比开始学习,if语句:

while语句:

   可以发现if语句是判断括号中的表达式是否为真,比如上图就是判断n是否的等于1,如果判断结果为真,那么进入if,执行语句,但是只会执行一次,比如上图只打印了一个“hello world”。    但是while语句却在一直死循环地打印“hello world”,因为while的语法也是先判断括号中得表达式是否为真,上图就是判断n是否为1,如果判断为真,那么进入while执行语句,但是执行完要再次判断括号中的表达式结果是否为真,如果为真,那么就再进入去执行语句,上述例子可以看到,n没有改变,所以n=1是一直成立的,也就造成了代码死循环了。    总结:⾸先上来就是执⾏判断表达式,表达式的值为0,也就是假,循环直接结束;表达式的值不为0,即结果为真,则执⾏循环语句,语句执⾏完后再继续判断,是否进⾏下⼀次循环。

while循环练习

练习1:在屏幕上打印数字1~10 练习2:输入一个正整数,逆序打印它的每一位数字,比如输入1234,那么就打印4 3 2 1

答案放在文章最后

二、for循环

for 循环是三种循环中使⽤最多的, for 循环的语法形式如下:

代码语言:javascript
代码运行次数:0
运行
复制
for(表达式1; 表达式2; 表达式3)//注意表达式间用;隔开
 语句;//如果循环体想包含更多的语句,可以加上⼤括号

   表达式1用来初始化变量,表达式2用来判断循环条件,表达式3用来调整循环变量 for循环执行流程如下:

  1. ⾸先执⾏ 表达式1 初始化循环变量,接下来就是执⾏ 表达式2 的判断部分, 表达式2 的结果如果等于0,即条件为假,则循环结束; 表达式2 的结果如果!=0,即条件为真,则执⾏循环语句,循环语句执⾏完后,再去执⾏表达式3 ,调整循环变量,然后再去 表达式2 的地⽅执⾏判断, 表达式2 的结果是否为0,决定循环是否继续。
  2. 整个循环的过程中,表达式1初始化部分只被执⾏1次,剩下的就是表达式2、循环语句、表达式3在循环。

接下来我们将while循环和for循环进行对比来学习for循环,要求:在屏幕上打印数字1~10

while循环

for循环:

可以看出:for 和 while 在实现循环的过程中都有初始化、判断、调整这三个部分,但是 for 循环的三个部分⾮常集中,便于代码的维护,⽽如果代码较多的时候 while 循环的三个部分就⽐较分散,所以从形式上 for 循环要更优⼀些。

for循环练习

计算1~100之间3的倍数的数字之和

答案在文末

三、do······while循环

   相较于while循环和for循环,do······while循环的使用是最少的,while 和 for 这两种循环都是先判断,条件如果满⾜就进⼊循环,执⾏循环语句,如果不满⾜就跳出循环,它的基本格式如下:

代码语言:javascript
代码运行次数:0
运行
复制
do
 语句;
while(表达式);

   do while 循环则是先直接进⼊循环体,执⾏循环语句,然后再执⾏ while 后的判断表达式,表达式为真,就会进⾏下⼀次,表达式为假,则不再继续循环,相当于至少会循环语句一次,循环之后再判断是否进入下一次循环。    学习了while循环和for循环,就比较好理解do······while循环,我们现在举一个同样的例子:    使用do······while循环实现:在屏幕上打印1~10的整数:

分析:首先初始化一个变量i为1,然后直接先执行一次循环内容,再到while判断循环条件。

do······while循环练习

要求:输⼊⼀个正整数,计算这个整数是⼏位数?

例如:输入1234,输出:4

答案在文末

四、break和continue语句

在循环执⾏的过程中,如果某些状况发⽣的时候,需要提前终⽌循环,这是⾮常常⻅的现象。C语⾔中提供了 break 和 continue 两个关键字,就是应⽤到循环中的。 • break 的作⽤是⽤于永久的终⽌循环,只要 break 被执⾏,直接就会跳出循环,继续往后执⾏。 • continue 的作⽤是跳过本次循环中 continue 后边的代码,在 for 循环和 while 循环中有所差异的,而在while循环和do·····while循环中基本大同小异。

1.break: 试着思考如下代码的结果:

你的答案是不是1 2 3 4 5呢?那么就进入这个代码的陷阱了,它的正确答案应该是:

解析:当i等于5时,break直接跳出整个循环了,所以不会执行下面的打印语句,也就导致5没有被打印,所以答案是1 2 3 4

  1. continue: continue 是继续的意思,在循环中的作⽤就是跳过本次循环中 continue 后边的代码,继续进⾏下⼀次循环的判断。上⾯的代码,如果把 break 换成 continue 会是什么结果呢?

你的答案是1 2 3 4 6 7 8 9 10吗?很可惜,你又掉进坑里了,continue的作用是跳过当次循环continue后的代码,上图中continue跳过了打印5,但是同时也跳过了i的自增1,导致i其实还是5,重新判断循环时又会重复以上的动作,打印1 2 3 4后就进入了死循环:

如果把while循环换成for循环答案是什么呢?

   这下答案就是上面说过的1 2 3 4 6 7 8 9 10,这下就只跳过了打印5,并不会死循环,因为continue只会跳过它后面的循环代码,而在for循环中,循环变量的调整并不在continue后,而在for循环里面,所以跳过5打印后,循环可以正常执行,这也是之前提到的在while循环和for循环中的continue会略有差异    while循环中使用continue如果跳过了变量的调整语句,那么就可能导致死循环,而for循环则没有这个顾虑。do······while循环和while循环大同小异,此处不再赘述。

五、循环的嵌套

此处我们举一个例子讲解循环的嵌套    要求:找出100~200之间的素数,并打印在屏幕上。注:素数⼜称质数,只能被1和本⾝整除的数字。 分析:

  1. 要从100~ 200之间找出素数,⾸先得有100~200之间的数,这⾥可以使⽤循环解决。
  2. 假设要判断i是否为素数,需要拿2 ~ i-1之间的数字去试除i,需要产⽣2~i-1之间的数字,也可以使⽤循环解决,就产生了嵌套。
  3. 如果2~i-1之间有数字能整除i,则i不是素数,如果都不能整除,则i是素数。

代码实现:

代码语言:javascript
代码运行次数:0
运行
复制
#include <stdio.h>
int main()
{
	int i = 0;
	for (i = 100; i <= 200; i++)//产生100到200的数字
	{
		int j = 0;//注意j要定义到for循环内部
		          //如果定义在外部,那么j不会被重置
		          //那么就无法每次循环都产生2到i-1的数字
		int flag = 0;//flag作为一个标志,为0时表示i为素数
		             //为1时表示i不是素数
		             //它也需要每次循环重置,必须定义在内部
		for (j = 2; j <= i - 1; j++)//产生2到i-1的数字
		{
			if (i % j == 0)
			{
				flag = 1;//如果i能够整除j,说明此时的i
				         //不是素数,就把标志flag调整为1
				break;//现在我们已经知道i不是素数了,所以
				      //直接跳出循环
			}
		}
		if (flag == 0)//这里的含义是,经过上面的循环如果
		              //flag没有被改为1,还是之前的0
		              //说明i没有被任何j整除,所以i是素数
			printf("%d ", i);
	}

	return 0;
}

运行结果为:

六、goto语句

   C语⾔提供了⼀种⾮常特别的语法,就是 goto 语句和跳转标号, goto 语句可以实现在同⼀个函数内跳转到设置好的标号处。 例如:

   解析:在前面我们定义了goto语句的标志next,然后在下面使用next就可以让代码直接从定义标志处,跳转到使用标志处,上图中就跳过了haha的打印    和continue语句进行对比,continue会跳过本次循环后的所有语句,而goto只是跳转到标志处    但是goto 语句如果使⽤的不当,就会导致在函数内部随意乱跳转,打乱程序的执⾏流程,所以我们的建议是能不⽤尽量不去使⽤;但是 goto 语句也不是⼀⽆是处,在多层循环的代码中,如果想快速跳出使⽤ goto 就⾮常的⽅便,因为跳出一个循环要用一个break,多个循环就要多个break,直接使用goto语句可以直接跳出,比如以下伪代码:

代码语言:javascript
代码运行次数:0
运行
复制
for(...)
{
   for(...)
   {
     for(...)
     { 
       if(disaster)
           goto next;
  }
   }
    }
 
next:
   ·····

可以看出如果想跳出多层循环,goto语句就非常实用。

七、练习答案

1.while循环练习答案及解析:

(1)

(2)

解析:

  1. 要想得到n的最低位,可以使⽤n%10的运算,得到的余数就是最低位,如:1234%10得到4
  2. 要想去掉n的最低位,找出倒数第⼆位,则使⽤ n=n/10 操作就可以去掉最低位的,如:n=1234/10得到123,123相较于1234就去掉了最低位,123%10就得到倒数第⼆位3。
  3. 循环1和2两个步骤,在n变成0之前,就能到所有的位,变成0后就结束循环。

2.for循环练习

答案一: 计算1~100之间3的倍数的数字之和

答案二:尝试着优化一下代码,如果能直接产⽣3的倍数的数字就省去了多余的循环和判断

3.do······while循环练习答案

答案:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-09-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、while循环
    • while循环练习
  • 二、for循环
    • for循环练习
  • 三、do······while循环
    • do······while循环练习
  • 四、break和continue语句
  • 五、循环的嵌套
  • 六、goto语句
  • 七、练习答案
    • 1.while循环练习答案及解析:
    • 2.for循环练习
    • 3.do······while循环练习答案
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档