跳到主要内容

C 控制流

C 判断

1. 判断语句

语句描述
if 语句一个 if 语句 由一个布尔表达式后跟一个或多个语句组成。
if...else 语句一个 if 语句 后可跟一个可选的 else 语句,else 语句在布尔表达式为假时执行。
嵌套 if 语句您可以在一个 ifelse if 语句内使用另一个 ifelse if 语句。
switch 语句一个 switch 语句允许测试一个变量等于多个值时的情况。
嵌套 switch 语句您可以在一个 switch 语句内使用另一个 switch 语句。

简单用法:

  • if
…… // 其它语句
if (表达式)
{
…… // 逻辑值为真所执行的语句、程序块
}
…… // 其它语句
  • if...else
…… // 其它语句
if (表达式)
{
…… // 表达式的逻辑值为真所执行的语句、程序块
}
else
{
…… // 表达式的逻辑值为假所执行的语句、程序块
}
…… // 其它语句
  • switch
…… // 其它语句
switch (表达式)
{
case 常量表达式 1: 语句或程序块;
case 常量表达式 2: 语句或程序块;
……
case 常量表达式 n:语句或程序块;
default: 语句或程序块;
}
…… // 其它语句
  • 这里的case后边的常量是匹配switch后边表达式的值。
  • case后边必须得是常量。
  • 如果所有的case都没有匹配,则执行default的内容。
  • default是可选的,如果没有default而且所有的case都不匹配,则switch语句不执行任何操作。
  • 一些在switch中不应该有的操作
case4: printf("4\n");break;	//编译时不会报错,但是也无法匹配n
case5: printf("4\n");break;
csae:
case 5: extern int a; break; //case语句后面不能定义(声明)
case 6: continue; //continue只能出现在循环中
case 1.0: break; //不允许
case 1+3: break; //不允许

2. ?:运算符(三目运算符)

三目运算符可以用来代替 if...else 语句。

a ? b : c

如果 a 为真,则计算 b 的值,结果即为整个表达式的值。

如果 a 为假,则计算 c 的值,结果即为整个表达式的值。

C 循环

1. 循环语句

有的时候,我们可能需要多次执行同一块代码。一般情况下,语句是按顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推。

但是编程语言提供了更为复杂执行路径的多种控制结构,循环语句允许我们多次执行一个语句或语句组。

循环类型描述
while循环当给定条件为真时,重复语句或语句组。它会在执行循环主体之前测试条件。
while (condition)
{
//循环体
}

while(i >= 1, --j) // 该语句会以逗号后的j为while的判断条件
循环类型描述
do...while循环除了它是在循环主体结尾测试条件外,其他与 while 语句类似。
do
{
//循环体
}while( condition );
循环类型描述
for循环多次执行一个语句序列,简化管理循环变量的代码。
for (init; condition; increment)
{
//循环体
}

for语句将初始化计数器、循环条件判断、更新计数器三个动作组织到了一起。

  • init 是初始化循环的控制变量。
  • condition 是循环条件表达式,条件为真则执行循环主体。
  • increment 可以更新循环控制变量。

2. 循环控制语句

控制语句描述
break语句终止循环switch语句,程序流将继续执行紧接着循环switch的下一条语句
continue语句告诉一个循环体立刻停止本次循环迭代,重新开始下次循环
goto语句将控制转移到被标记的语句。但是不建议在程序中使用 goto语句

break如果使用的是嵌套循环,break 语句会停止执行最内层的循环,然后开始执行该块之后的下一行代码。

continue:C 语言中的 continue 语句有点像 break 语句。但它不是强制终止,continue 会跳过当前循环中的代码,强迫开始下一次循环。对于 for 循环,continue 语句执行后自增语句仍然会执行。对于 whiledo...while 循环,continue 语句重新执行条件判断语句。

3. 无限循环的实现

/* while实现 */
while(1)
{
printf("hello world");
}

/* do while实现 */
do
{
printf("hello world");
}while(1);

/* for实现 */
for(i = 1;;i++)
{
printf("hello world");
}

/* goto实现 */
label:

printf("hello world\n");

goto label;