☰
C语言分支与循环结构(4)
2026/11/6 7:17:48 网站建设 项目流程

今天我们正式学习实现循环结构的语句,while、do while、for语句

一、while语句

它的使用结构跟if相似
if(表达式)
语句;
while(表达式)
语句;
无论是if还是while,如果有多个语句要用大括号括起来!!
区别在于
if执行完后接着走下一个代码了,while里的语句执行完后,还会看满足表达式吗,如果满足,再执行一遍。
现在,如果我们想用while输出1-10

它的运行逻辑是,现在while外面给a赋值为1,a<11,进入循环,打印1,然后a加上1,又看满不满足a<11,满足,打印2,a又加一。当最后打印出10后,a加一为11,不满足a<11了,于是循环结束。

成功实现打印1-10

如果我们想实现输入一个整数,从个位开始打印它各个位置上的数字
比如输入178,输入8 7 1,用while怎么实现呢

先给a赋值为0,要求用户输入一个整数,输入后放入a中,如果a不为0那么进入循环,直接输入a跟10除以10后的余数(跟10取余结果是0-9),刚好各个位置上的值就是0-9,如果输入178,178除以10,商为17,余个8,8被输出,是不是实现我们的要求,然后a /= 10,等价于a = a / 10;意思是,a自已除个10,除出来的数再赋值给a,拿输入的178举例,178就变成了17,因为 / 号两边是整数,除了之后小数点后的不要,只要整数。17满足不为0,又进入循环,17除以10取余7,7输出,又自己除以10,剩个1,1不为0,进入循环,1除以10取余为1,1输出,1除以10为0,0不满足条件,不进入循环,此时所有位上的数都被打印出来了,任务完成。

二、for语句

for语句的使用方式是:
for(表达式1;表达式2;表达式3)
语句;
表达式1(用于循环变量的初始化)
表达式2(用于循环结束条件的判断)
表达式3(用于循环变量的调整)
与while语句有相似之处,拿我们刚用while写的打印1-10的程序举例

如果我们把a初始化为5,那while会先从判断5是否小于11开始,然后满足,输出5,一直到输出10,所以我们发现把变量初始化很重要,在while外面的变量初始化,跟for里面的第一个表达式相同。
如果我们把a++改为a += 2(等价于 a = a + 2
是不是打印完5后会打印7、9呢,所以变量的变化也很重要,他影响了我们程序的运行结果,就跟for的第三个表达式一样,而a <11这个条件跟for的第二个表达式一致,所以for跟while的不同在于,for把三个表达式集成在一起了。
我们用for来实现打印1-10

你可能有些疑惑,for语句是怎么实现的呢,首先执行表达式1,给i初始化为1,然后看表达式2,判断i是否小于等于10,满足即执行打印i的任务,然后执行表达式三,对变量+1,再看表达式2,判断i小于等于10吗,满足有打印i,再执行2,再看2,所以表达式1只执行一次。如果有一次不满足表达式2了,直接退出循环。
下面我们写一个算1-100之间是3的倍数的总和的程序

结果为

因为3是1-100之间3的第一个倍数,所以把变量初始化为3,后面表达式3每次给i加上是因为从3开始加3也是3的倍数,外面设置了sum这个变量来统计总和,sum += i(等价于sum = sum + i)是3的倍数的i再加上sum赋值给sum,实现上一次的sum值加上这一次i的值,一直叠加。

三、do while语句

实现方式
do
{
语句;(循环体)
}while(表达式);
如何运行的呢?
上来就先执行语句,然后再判断,满足条件,又执行语句,直到不满足条件,退出循环。
特点:循环体至少被执行一次。
我们再用do-while实现打印1-10的功能

练习:输入一个正整数,判断他有几位数(一开始就有一位 0也是有一位的,统计位数的动作至少要执行一次,所以用do-while)

num / = 10
这么写的逻辑是,每去掉一位,sum加一,当num等于0时,已经统计完了,退出循环。

四、 break和continue语句

有些时候,因为某些特殊情况,我们需要提前终止循环,就要用到break跟continue语句。
那平时生活来举例子,上班就是一个循环,每天都要去做,除非是周末,那我们 就可以不上班了,但是周一还得上班,周末只是起到一个短暂的终止循环作用,但如果某天是世界末日,那我们就能确定上班这个循环永远终止了,实际上continue就相当于周末,break就相当于世界末日。
在代码中 ,continue是跳过本次循环后面的代码,而break是直接跳出整个循环。
举个例子

还是打印1-10的程序,但加了个if语句,当a等于5时continue,刚我们说continue后的代码不执行了,但是会进入下一次循环,我们看这个程序会发生什么

你可能会想a等于5时跳过本次循环,但是6-10应该被打印出来吧,那我们来看真正的运行逻辑。当a等于5时,跳过打印和a加一,然后再看循环条件 a <= 10,此时a等于5,依然满足,又进入循环,a还是等于5,有跳过下面的代码,回到循环条件,依旧满足,于是陷入了死循环,在4之后鼠标的光标会一直现,但是程序不结束。

例子2

for循环的6-10被打印出来了,因为它的表达式3不在if的下面,即使触发了if语句,i依然加一。


用了break,直接跳出循环了。
for循环的变种
如果不写表达式1、2、3,尤其是不写表达式2,程序会陷入死循环

一直打印哈哈哈哈哈。
循环的嵌套
有时我们为了解决复杂的问题,要把while、for等语句,合在一起用。
例子

设计一个找出1-00的素数的程序(偶数不能为素数)

首先素数的概念是除了1和它本身,其它都不能被其它数字整除,那么合数的概念就是除了一和本身,有其他的因子,能被这些因子整除,比如6,2 × 3等于6,2和3就是6的因子,比如8,2×4等于8我们会发现只要我们找到因子,就能确认它不是素数,我们就可以跳过这些数,从下个数开始找 ,怎么确认这些因子呢,只要一个数是合数,那么必定有因子是大于等于根号下的这个数的,3小于等于根号6(等价于因子的平方大于等于这个数),所以我们利用这个逻辑,去找合数,它是合数我们就跳过。

第一个for循环的意思是先有1-100这些数,第二个循环的意思是对每一个数,我初始化一个变量为2,如果这个数能整除这个变量说明这个变量是它的因子,它就是合数,2不是,接着=1,直到变量的平方大于这个数为止,因为是合数必定有个因子小于等于它,在这个范围找不到因子的话,说明就是素数了。然后我们还在第一个for下面初始化yes变量,目的是先认为产生的是素数,如果他找到了因子,就变为0。防止第二个循环出来后不知道该不该打印,因为找到或找不到都要跳出第二个循环,如果yes为1,我们就打印,为0就跳过,找下一个素数。

go to 语句

当出现某种情况,你可以使用go to语句让程序跳转到你想跳转到的地方
例子(伪代码)
fo()
{
for()
{
for()
{
if()
go to next:
}
}
}
next:
直接跳出三个for循环。
嘻嘻嘻,分支与循环结构就讲完了,大家要通过刷算法题来巩固对这些语句的应用哦

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询