类型
控制语句大体上可以分为以下几类:
不同的教程对语句的分类有所不同,这里按我自己的理解来,有不同的想法欢迎到评论区交流
注意:C 语言的语句执行顺序是从 main() 函数开始,从上到下,依次逐行执行
选择语句
选择语句帮助程序根据不同的条件或值做出决策,从而控制程序的执行流。
if
1 2 3 4 5 6
... if (conditional) { // 语句块 } ...
条件表达式 conditional 必须是整数类型或可以被转换为整数的类型。
如果 conditional 的值为0,则表示 false,语句块不会被执行。
如果 conditional 的值非0,则表示 true,语句块将被执行。
if-else if
1 2 3 4 5 6 7 8 9
... if (conditional1) { // 语句块1 } else if (conditional2) { // 语句块2 } ...
如果
conditional1
的值为 true,则执行语句块1。执行完毕后,整个if-else if
结构将结束,即使conditional2
的值也为 true。 如果conditional1
的值为 false,则继续判断conditional2
, 如果conditional2
的值为 true,则执行语句块2。 如果conditional2
也为 false,则继续检查后续的条件(如果有的话)。if-else
1 2 3 4 5 6 7 8 9
... if (conditional) { // 语句块1 } else { // 语句块2 } ...
如果
conditional
的值为 true,则执行语句块1,否则执行语句块2。 与if-else if
的区别在于,if-else
只能有两个语句块,其中一个必定被执行。if-else
语句也可以与if-else if
组合,但需要注意的是,if-else
语句必须位于整个if-else if
结构的最后。switch-case
1 2 3 4 5 6 7 8 9 10 11 12
... switch (expression) { case x: // 代码块1 break; case y: // 代码块2 break; default: // 代码块3 } ...
switch-case
语句用于基于某个表达式的值选择执行的代码块。case
标签类似于if-else if
,用于匹配expression
的值。default
标签类似于else
,在没有匹配的case
时执行。 有些教程将switch
单独列为分支语句
,而为了便于理解,这里将其与if-else if
结合。 他们之间的区别可以参考 switch和if else的比较 这篇文章。TODO:验证这篇文章,探究底层原理,性能测试
循环语句
循环语句允许程序重复执行某段代码,直到满足指定条件,从而实现自动化和简化代码的执行。
for
1 2 3 4 5 6
... for (expression1; expression2; expression3) { // 代码块 } ...
执行顺序如下:
- 执行
expression1
,初始化循环变量,一般用i
表示。在一个for
循环中,expression1
只会被执行一次。 - 执行
expression2
条件表达式。如果结果为true
,则运行代码块中的语句。记住,从上到下,依次逐行执行。如果代码块中包含另一个for
循环,它会被视为一个整体,直到执行完毕。 - 执行
expression3
,更新循环变量,然后回到第2步,继续循环,直到expression2
的结果为false
,此时整个for
循环结束。
for
循环的写法不必完全按照上述格式,需要注意的地方是:expression1
可以省略,但循环变量必须在for
循环开始前初始化,这是expression2
正确执行的前提。expression2
必须 在某个时刻返回false
,以确保循环能够终止。expression3
可以放在代码块中执行,但不能省略或不更新循环变量,否则可能导致for
循环一次也不执行或出现 死循环。for
循环的三部分都可以为空,但不能遗漏了;
,例如:for (;;) { // 无限循环}
。这种用法通常用于需要无限次循环的情况,但要确保有适当的退出机制。- 对于嵌套的
for
循环,确保每个循环变量都有明确的作用域,并注意避免逻辑混淆和性能问题。
- 执行