前言
在上一章中,我们介绍了选择语句(分支语句),这一章,我们来介绍下循环语句,并结合实例进行练习
while循环
实现形式:
while(表达式)
{
循环语句;
}
例1:给数组赋值
例2:打印多组字符
其中:
EOF为文件结束标志(end of file)值为-1
getchar为获取单个字符
putchar为打印单个字符
ctrl+Z即可退出循环
我们接下来来看看while语句中坑点较多的continue和break
break:
break用于终止循环进行,下面为代码实现:
continue:
continue用于跳过continue后面的代码直接进入下一次循环判断:
从上面代码我们发现:程序陷入了死循环。这是因为当i等于5时执行continue,当continue跳过后面的语句后,i并不会自增1,此时i仍为5,进入下一次循环后仍然continue,此后依次循环,while将不会停止,也不会再进行打印;
我们再来看看下面这段代码,是否也是死循环:
可以看到,如果i++放在while语句最前头,是不会死循环的,但i是从1开始打印到10,并且数组中并没有5。原因在于,当i等于5时执行continue,continue执行到下次循环后,i++,i变为6,if判断为假,继续执行continue后的语句;
break与continue的区别
break用于永久终止循环
continue跳过本次循环后面的代码,直接去判断部分,进行下一次循环判断
do while循环
实现形式:
do
{
语句;
}while(表达式)
do while语句执行条件较为严苛,第一次无需判断条件直接进入循环,之后在进行循环条件判断
for循环
for相较于while更易于进行调整,修改判断条件,实现形式:
for(expr1;expr2;expr3)
{
循环语句;
}
我们来讲讲for循环中break与continue的作用:
for中break与while中的break作用及实现大致相同
for中的continue
上述代码打印出来的是否会同while一样是:1234死循环呢?
答案是不会!为什么呢?接下来我借图来解析:
while中的continue与for中的continue
while中的continue会跳过调整部分,而for循环中的continue将不会跳过调整部分
for循环的判断部分省略意味着判断恒成立
其初始化部分也可省略,但在下述情况下出现错误
不省略初始化时的打印
省略初始化时的打印
分析如下:
由于在第一次循环结束后进入第二次循环,k没被初始化,所以k为2直接退出内层循环,第三次也是如此,所以只打印第一次外层循环的3次
for循环的变形
大家想想上述代码执行多少次打印呢?
原因在于判断条件中,将j赋值为0,0即为假,条件恒为假,不进入循环中
练习
求n的阶乘
思路分析:
n的阶乘为 123*…*n
创建循环变量i,从1开始,用变量 ret 依次乘上 i,直到n,最后返回ret(ret初始化为1)
代码实现:
求1!+2!+3!..n!
思路分析:
根据第一题的思路,从1开始便将每个ret相加到sum处,返回sum便是答案
在有序数组中查找要查找的数字
思路分析:
二分查找(折半查找)
总结
今天的内容就讲到这里,请给一个点赞+关注吧!!!