C语言的控制流
一、语句与程序块
在C语言中,分号是语句结束符。用一对花括号“{}”把一组声明和语句括在一起就构成了一个复合语句(也叫做程序块),复合语句在语法等价于单条语句。
二、if-else语句
if-esle语句用于条件判定,其语法如下:
if(表达式)
语句1;
else
语句2;
其中else部分是可选的,该语句执行时,先计算表达式的值,如果其值为真,则执行语句1,如果其值为假,并且该语句包含else部分,则执行语句2。
例:
1 /* 测试if_esle语句 */
2 #include<stdio.h>
3
4 int main(int argc, char *argv[])
5 {
6 int a;
7
8 scanf("%d", &a);
9 if (a > 0) //当次判定条件1成立时,执行复合语句1
10 { //复合语句1
11 printf("Hello\n");
12 }
13 else //当判定条件1不成立时,执行复合语句2
14 { //复合语句2
15 printf("World\n");
16 }
17
18 return 0;
19 }
~/test/c.Language --> :
~/test/c.Language --> :gcc -o if_else1 if_else1.c
~/test/c.Language --> :./if_else1
5
Hello
~/test/c.Language --> :./if_else1
-1
World
当不出现else时
例:
/*测试if语句 */
#include<stdio.h>
int main(int argc, char *argv[])
{
int i;
scanf("%d", &i);
if(0<=i && 100>=i) //如果判定条件1成立,则执行复合语句1
{
printf("small\n");
}
if(101<=i && 200>=i) //如果判定条件1不成立且判定条件2成立,则执行复合语句2
{
printf("middle\n");
}
if(201<=i && 300>=i) //如果判定...且判定条件3成立,则执行复合语句3
{
printf("large\n");
}
if(0>i || 300<i) //如果判定...且判定条件4成立,则执行复合语句4
{
printf("error\n");
}
return 0;
/mnt/hgfs/1.22 Ubuntu-14.4share/C/day02 --> :./if
1
small
/mnt/hgfs/1.22 Ubuntu-14.4share/C/day02 --> :./if
101
middle
/mnt/hgfs/1.22 Ubuntu-14.4share/C/day02 --> :./if
350
error
/mnt/hgfs/1.22 Ubuntu-14.4share/C/day02 --> :./if
205
large
【注意】分号的位置是一个值得注意的点
if(判定条件); //注意此处的分号
xxxx; //无论条件真假,都会执行xxxx和yyyy;
yyyy;
等价于
if(判定条件)
{
}
xxxx;
yyyy;
三、else-if语句
结构:
if (表达式1)
{
语句1;
}
else if (表达式2)
{
语句2;
}
else if (表达式3)
{
语句3;
}
else
{
语句4;
}
这种if语句序列是编写多路判定最常用的方法。其中各表达式将会被依次求值,一旦某个表达式结果为真,则执行与之相关的语句,并终止整个语句序列的执行。同样,其中各语句既可以是单条语句,也可以是用花括号括住的复合语句。
最后一个else部分用于处理“上述条件均不成立”的情况或默认情况,也就是当上面各条件都不满足时的情形。
例:
/* 测试else_if语句 */
#include<stdio.h>
int main(int argc, char *argv[])
{
int a;
while(1) //表示循环执行花括号里面的语句
{
scanf("%d", &a);
if (a < 10) //判定条件1
{
printf("low\n");
}
else if (a > 10 && a < 100) //判定条件2
{
printf("mid\n");
}
else // 当以上判定条件都不成立的时候
{
printf("error\n");
}
}
}
~/test/c.Language --> :gcc -o else_if else_if.c
~/test/c.Language --> :./else_if
1
low
11
mid
100
error
四、switch语句
switch语句是一种多路判定语句,它测试表达式是否与一些常量整数值中的某一个值匹配,并执行相应的操作。
结构如下:
switch(表达式)
{
case 常量表达式: 语句序列
case 常量表达式: 语句序列
default: 语句序列
}
各分支表达式必须互不相同,如果没有哪一支分支表达式,则执行标记为default的分支。default分支是可选的。如果没有default分支也没有其他的分支与表达式的值匹配,则该switch语句不执行任何动作。各分支及default分支的排列次序是任意的。
例:
/* 测试switch语句 */
#include<stdio.h>
int main(int argc, char *argv[])
{
int c;
printf("请输入您想选择的数字:");
scanf("%d", &c);
switch (c)
{
case 0: printf("H\n");
case 1: printf("E\n");
case 2: printf("LL\n");
case 3: printf("O\n");
case 4: printf("W\n");
case 5: printf("O\n");
case 6: printf("R\n");
case 7: printf("L\n");
default: printf("D\n");
}
return 0;
}
~/test/c.Language --> :gcc -o switch_test1 switch_test1.c
~/test/c.Language --> :./switch_test1
请输入您想选择的数字:1
E
LL
O
W
O
R
L
D
~/test/c.Language --> :./switch_test1
请输入您想选择的数字:8
D
~/test/c.Language --> :./switch_test1
请输入您想选择的数字:7
L
D
在switch语句中,case的作用只是一个标号,因此,某个分支中的代码执行完成后,程序将会进入下一分支继续执行,除非在程序中显示地跳转。跳出switch语句最常用的方法是使用break语句与return语句,break语句还可强制从while、for与do循环语句中立即退出。下一篇博客再介绍。
【注】:
**作为一种良好的程序设计风格,在switch语句最后一个分支(即default分支)
的后面也加上一个break语句。**这样做在逻辑上没有必要,但当我们需要向该switch语句后添加其他分支时,这种防范措施会降低错误的可能性。