【C语言速成】6. 循环:while语句、for语句和do-while语句

循环语句用来在某个条件满足时重复执行特定的代码。

while语句

用法

while(条件)
{
    代码
}

while语句的用法跟if差不多,不同之处是if语句在满足条件时只执行大括号里的代码一次,while语句满足条件时会一直执行大括号里的代码,直到条件不满足才跳出循环执行后面的代码。

示例

enter image description here

输出:

HELLO!
HELLO!
HELLO!
HELLO!
HELLO!
HELLO!
【此处省略无数行HELLO!】

“条件”的本质

上面的这个程序一运行就会一直输出“HELLO!”,直到你摁Ctrl+C或者关闭程序的窗口把它手动结束掉,这是因为while语句小括号里的条件永远是满足的。你现在可能不懂本来是该写条件的小括号里为什么会有一个“1”,而且它还永远满足条件,其实之前if语句里像“a >= 0”、“a +1 != 20”的那些条件最后都会变成数字,比如如果有一个整数变量a的值是100,“a >= 20”成立,最后会变成1;而“a == 50”不成立,最后会变成0。C语言就根据条件最后转化成的数字判断这个条件是否成立:0代表条件不成立,非0代表条件成立。这样就能解释为什么这个while语句的条件永远满足了。
看完了这个循环条件“非常别扭”的while语句,下面来看一个正常点的:

示例2

enter image description here

输出:

i的值是10,自加一以后是11
i的值是11,自加一以后是12
i的值是12,自加一以后是13
i的值是13,自加一以后是14
i的值是14,自加一以后是15
循环运行了5次

顺便说一下:++变量变量++的区别主要体现在给变量做自增操作的时机。前者会在变量被使用(比如被printf输出或者被+-*/运算符计算)之前给变量自增,后者会在变量被使用之后给它自增。

for语句

用法

for(语句1; 条件; 语句2)
{
    代码
}

注意:语句2后边不加分号

for语句的执行步骤:

  • 一、语句1会在程序运行到for语句时执行一次。如果语句1是一个创建变量的语句,创建的变量只在大括号里可用。
  • 二、判断条件是否成立,如果条件成立了,执行大括号里的代码;如果不成立就结束循环。
  • 三、如果条件成立并且大括号里的语句执行完了,执行语句2一次,之后回到第二步。

提示:for小括号里的三个语句都可以不写,但是如果不写条件,for就会像第一个示例里的那个死循环一样一直循环。如果条件成立时应该执行的代码只有一句,就可以省略大括号,上面的while和下面要讲的do-while也一样。

示例

enter image description here

输出:

0
1
2
3
4

for小括号里第一句创建的变量i在循环结束之后不能继续使用,因为它超出了它的作用范围,这样在循环开始时创建,循环结束后无效的变量叫临时变量。

do-while语句

用法

do
{
    代码
}
while(条件);

do-while的逻辑跟while的差不多,区别在于do-while大括号里的代码会不管条件成不成立先执行一次,之后再根据条件成不成立来决定是不是要继续循环。总的来说,do-while循环大括号里的代码会至少执行一次。

break语句和continue语句

break语句的用法:

break;

break语句用来强制结束循环,继续执行循环语句后面的代码。
比如for语句的示例代码,可以用break语句来让它在输出3之前强制退出循环:
enter image description here
输出:

0
1
2

continue语句的用法:

continue;

continue语句用来跳过大括号里它后面本来该执行的语句,直接到判断条件是否成立的那一步。
比如for语句的示例代码,可以用continue语句来让它跳过输出3的语句来达到不输出3的目的:
enter image description here
输出:

0
1
2
4

注意

  • break和continue只能在循环语句的大括号里使用。
  • break和continue只负责它们所在的循环体。也就是说如果你有一个循环语句的大括号里还有一个循环语句,在内层循环的大括号里写continue和break只对内层循环有作用,外层循环同理。
标签