1. 死循环
死循环顾名思义就是一直处于循环中,那么死循环有什么用呢,它能实现什么用途呢?
我们常说的死循环一般是指 while 循环,因为 for 循环的条件齐全,不容易造成死循环,所以当条件不充分时, while 循环容易造成死循环。
1.1 while 的死循环
比如对于上面的代码,没有规定 while 循环的结束条件,因此会一直打印
所以,我们需要注意,在使用 while 循环时,要留意是否添加了循环结束的条件,比如,在这个代码中,我们添加 x--,让 x 每循环一次就减一。一直减到 x <= 0 为止。
1.2 结束死循环
结束死循环的方法除了加循环结束的条件外,还可以使用 break。
break 的用途,上一章已经讲了,就是可以直接跳出当前循环。所以,break 也是经常作为跳出死循环的语句。
1.3 死循环的用途 —— 密码系统
其实死循环并没有大家想的只有bug才会出现,平时很多的循环都可以用死循环来完成。
比如:输密码
上述代码就是密码系统的一个简单结构,我们让 while 循环的括号中的条件是1,就表明条件一直为真,如果没有结束条件,那么这就是一个死循环。然后我们用条件判断,如果密码输入为12345,就打印“密码正确”,然后 break 跳出循环。如果输入的数字不是12345,那么就会打印“输入错误,请重新输入:”,然后返回循环开始,继续输入(因为我们把输入行 scanf 放在了循环的开始)。
如上图所示,和我们所描述的一样,如果输入不对,就会一直输入,知道输对为止。
上述只是一个简单的密码系统,我们还可以再详细一下输入的情况,比如:银行规定输错5次就冻结账户。
如上图所示,我们在循环外定义了一个整数 i == 0 作为计数器,然后每输错一次,i 就加一, 再加判断,如果 i == 5,就打印并跳出循环,结束程序。结果如下:
当输入错误达到5次后,就会提示:账户冻结,请明天再试。
我们还可以在此基础上加更多的条件,比如:密码输入必须6位,只能输入数字等等,这里就不一一列举了。
总之,死循环并非一无是处,只需要添加结束条件,就可以达到想要的效果。
2. 循环嵌套
循环嵌套,顾名思义就是循环中还有循环,和 if 嵌套相同,我们可以在一个循环中加入另一个循环。
2.1 for 循环的嵌套
我们经常使用 for 循环嵌套来完成一些要求
99乘法表:
我们可以使用双 for 循环来打印99乘法表
上述代码就是双层 for 循环来打印 99 乘法表,第一层 for 循环打印行,第二层 for 循环打印列。
第一层:i = 1;i < 10;i++,所以打印9行。第二层:因为 j <= i,所以,第一行 j = 1打印一列,第二行 j = 2 打印两列,以此类推。(\t 是水平制表符,可以很好的排列乘法表)。
所以,for 循环嵌套可以多用于打印横纵的图案。
判断素数:
我们可以用双层 for 循环来打印 100~200 之间的素数,素数就是指除了能被 1 和 它本身整除外,不能被其他数整除的数。
如图所示,第一层循环用来表示需要的 100~200之间的数,第二层表示用 第一层的数 i 与第二层的 2~i-1的数来求余,如果求余为0,则 i 被整除,计数器 count 加一。
然后,在第一层循环中加一个判断,如果 count == 0,则表示 该数不能被 2~i-1的数整除,则它不能被除1和它本身以外的任何数整除,则该 i 是素数。结果如下:
总之,for 循环嵌套在日常是比较常见的。
while 循环 和 do ... while 的嵌套在日常学习中不经常用,一般是和 for 循环一起使用。
2.2 goto 语句
C语言提供了一种非常特别的语法,就是 goto 语句和跳转标号,goto 语句可以实现在同一个函数内跳转到设置好的标号处。(相当于一个传送门)。
比如:左图,就是一个简单的打印;右图就是加入 goto 之后的打印
.
我们可以看到,在加入了 goto 语句之后,之间从1 跳到了 4,相当于中间的 2和3 被跳过了。所以,goto 语句就像一个传送门。
但是 goto 语句也不能随意使用,虽然很方便,但是如果使用不当会导致程序的混乱,所以尽量不去使用。
goto 语句也并非一无是处,在多层循环中可以作为跳出循环的方法,因为多层循环如果想要跳出,需要许多满足条件,或者多个break,而一个 goto 语句就可以直接跳出。
比如这种情况:
本来这 4 层 for 循环想要提前退出需要使用 4 个 break,现在一个 goto 语句就可以完成了。
小结:
以上是今天的内容,如果有错误请指正,欢迎交流。
接下来应该会写函数有关的,比如函数的递归,迭代等。