C语言知识点:死循环和循环嵌套

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 语句就可以完成了。

小结:

以上是今天的内容,如果有错误请指正,欢迎交流。

接下来应该会写函数有关的,比如函数的递归,迭代等。

  • 42
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值