本讲接续第三讲,将完成分支循环的全部内容。
1. while循环
1.1 if和while的对比
if和while都是要满足表达式成立才可以进入语句的执行。
语法形式基本相同,但是作用不同。if 不能实现循环,而while可以实现循环。以代码为例:
牛刀小试:输入一个正整数·,逆序打印它的每一位。(前置知识:% 和 / 的用法之一)
2. for循环
2.1 for循环的语法形式
表达式1是初始化部分;表达式2是循环部分;表达式3是调整部分。
while的三个部分在代码量很大的时候,这三个部分就会比较分散,就会不利于代码的维护。
2.2 do-while循环
理论学习后,当然要应用于实践之中啦。实操一下:输入一个正整数,判断它是几位数。这里用用到前面提到的前置知识。
使用一个变量表示位数,用/操作符去掉一个最低位,count+1,这样一个循环,就可以计算出count的大小即位数。
2.3 break语句和Continue语句
2.3.1 break用于打破循环
2.3.2 continue用于跳过循环里面的部分代码
由以上代码可知,continue直接跳过了后面的代码,使得i一直都是5,一直都是满足 while后面的判断条件的,用词,第一个代码正在死循环(最直接判断死循环的方法就是输出框中是否有一段路径“按任意键关闭此窗口”)。第一个图片中没有“按任意键关闭此窗口”这句话,因此它陷入了死循环。
2.4 while循环中的break 和 continue
这个代码是上面提到的代码,它是一个由于continue而引起的死循环。下面这个代码是break情况的。
break的作用依然是跳出循环,但是它不能用于跳出函数!没有这种说法的。
2.5 for循环中的break和continue
仔细对比这两个代码发现第二个代码中没有出现3,说明3没有被打印,a = 3时,后面的代码被跳过了,但是:continue并没有像break一样直接跳出循环。
2.6 do...while...循环中的break和continue
因为continue,代码又陷入死循环中,在输出窗口中可以观察到光标一直在不停的闪烁。
3. goto语句
3.1 goto的概念及其运用
goto语句是一个跳转符号,可以调到指定位置。也可以用来跳出循环,尤其是层层的循环。但是goto对于初学者来说能不用尽量不要用。跳来跳去的最终不仅代码的逻辑乱了,就连自己的逻辑也乱了。
4. 随机数的生成
4.1 rand函数
rand函数的使用需要引用头文件<stdlib.h>,而且会返回一个伪随机数,把它作为一种随机数。但是第二次运行的时候发现生成的随机数并没有发生变化。这是因为rand随机数是基于一种种子值生成的,种子值默认为1。当种子值不变时,在同一种算法下生成的随机数就是一样的。因此,若要生成真正的随机数,可以考虑改变种子的基准值。
但是,如何改变种子的基准值呢?下面就引出了srand函数。
4.2 srand
srand可以用来初始化种子的基准值。
用什么来作为种子呢?这里引出了一直都在变化的时间:time
4.3 time
time_t 返回一个时间戳,即从现在时间到1970年1月1日的时间差。time函数使用时要引用头文件<time.h>。如果只让time返回一个时间戳,指针写成NULL,表示传入一个空指针。但是种子是unsigned int 类型,time返回的是time_t的类型。需要强制类型转换。
这样两次运行的代码就更加随机了。
这样我们就可以利用所学的知识设计一个逻辑游戏--猜数字游戏,对于该游戏,我打算新写一篇博客进行分享!
都看到这儿了,要不点个赞支持一下?