控制流
程序语言中的控制流语句用于控制个计算操作执行的次序。
语句与程序块
表达式只会加上一个分号( ; )就变成了语句。
用一对花括号“{” 与 “}” 把一组声明和语句括在一起就构成了一个复合语句(也叫做 程序块),复合语句在语法上等价与单条语句。
右花括号用于结束程序块,其后不需要分号。
if-else 语句
用于条件判定。
if (表达式)
语句1
else
语句2
if (表达式)
// 等价于
if (表达式 != 0)
else-if 语句
语句结构
if (表达式)
语句
else if (表达式)
语句
else if (表达式)
语句
else
编写多路判定的常用方法。
各表达式将被依次求值,一旦某个表达式结果为真,则执行与之相关的语句,并终止整个语句序列的执行。
各语句既可以是单条语句,也可以是用花括号括住的复合语句。
最后一个else部分用于处理“上述条件均不成立”的情况或默认情况,也就是当上面各条都不满足时的情形。
switch语句
多路判定语句,它测试表达式是否与一下常量整数数值中的某一个值匹配,并执行相应的分支动作。
switch (表达式)
{
case 常量表达式:语句序列
case 常量表达式:语句序列
default: 语句序列
}
每一个分支都由一个或多个整数值常量或常量表达式标记。
如果某个分支与表达式的值匹配,则从该分支开始执行。
各分支表达式必须互不相同。
如果没有哪一分支匹配表达式,则执行标记为 default 的分支。
default 分支是可选的。
如果没有default 分支也没有其他分支与表达式的值匹配,则该 switch 语句不执行任何动作。
各分支及default分支的排列次序是任意的。
while循环与for循环
while循环语句
while(表达式)
语句
首先求表达式的值。
如果其值为真非0,则执行语句,并再次求该表达式的值。
循环过程一直进行下去,直到该表达式的值为假(0)为止,随后继续执行语句后面的部分。
for循环语句
for(表达式1; 表达式2; 表达式2)
语句
// 等价与于
表达式1;
while(表达式2)
{
语句
表达式3;
}
当 while 或 for 循环语句中包含 continue语句时,上述二者之间就不一定等价了。
逗号表达式是一个整体,每个部分用逗号分隔。
按从左到右对每个分隔部分求值。
表达式整体的类型和值是最右边部分的类型和值。
函数的形参列表和实参,不属于逗号表达式的范畴。不保证多个传参按从左到右求值。
do-while循环
语法:
do
语句
while (表达式);
先执行循环体重的语句部分,然后再求表达式的值。
如果表达式的值为真,则再次执行语句,依次类推。
当表达式的值变为假,则循环终止。
break语句与continue语句
break语句可用于从 for、while与do-while等循环中提前退出,就如同从switch语句中提前退出一样。
break语句能使程序从switch语句或最内层循环中立即跳出。
trim函数: 删除字符串尾部的空格符、制表符与换行符。
strlen函数返回字符串的长度。
continue语句用于使for、while或 do-while语句开始下一次循环的执行。
在while 与 do-while 语句中,continue语句的执行意味着立即执行测试部分;
在for循环中,则意味着使控制转移到递增循环变量部分。
continue 语句只用于循环语句,不用于switch语句。
goto语句与标号
C语言提供了可随意滥用的goto语句已经标记跳转位置的标号。
// labels的作用域是所在函数,goto&labels提供的是函数内跳转
for (i = 0; i < n; i++)
for (j = 0; j < m; j++)
if (a[i] == b[j])
goto found;
/* 没有找到任何相同元素 */
...
found:
/* 找到一个相同元素: a[i] == b[j] */
标号的命名同变量命名的形式相同,标号后紧跟一个冒号。
标号的作用域是整个函数。
用于函数内跳转。
学习资料:
C程序设计语言 (第2版 * 新版)