C语言控制语句:分支和跳转
if 语句
if 语句被称为分支语句(branching statement)或选择语句(selection statement)。
其通用形式如下:
if(表达式) //如果表达式为真(非0),执行语句,否则跳过语句
语句 //可以是简单语句或复合语句
与 while 语句不同,if语句只能测试和执行一次
if else 语句
与if语句不同,if else 语句可以在两条语句之间做选择
其通用形式如下:
if (表达式) //如果表达式为真(非0),执行语句1,否则执行语句2
语句1 //可以是简单语句或复合语句
else
语句2 //可以是简单语句或复合语句
当表达式为真时,执行语句1,表达式为假,执行语句2。
然而,实际情况通常会不止两种语句,于是当出现三个及以上,还可以用else if 扩展 if else 语句,形式如下:
if(表达式1)
语句1
else if(表达式2)
语句2
else
语句3
不难看出,else if 就是 if else 的变式,逻辑没有发生变化,当然,表达式还可以有更多的 else if (不能超出编译器的限制范围)。
在使用 if else 时需要注意的一点是 else 和 if 的配对
例如如下代码:
scanf("%d",&n);
if(n>5)
if(n<10)
printf("%d\n",n*n);
else
printf("%d\n",n);
上面的 else 是与第一个 if 匹配还是与第二个匹配?
如果你不清楚其中的规则,那么你可能会认为 else 是与第一个 if 匹配,事实上,else 是与第二个 if 匹配
输入输出结果如下:
1 None
6 36
11 11
规则是,若没有花括号,else 与它最近的 if 匹配,除非最近的 if 被花括号括起来
switch 语句
switch 语句和多个 if else 语句的作用基本相同,通常二者可以可以互换,但是,大多数情况下使用 switch 语句更方便。
其通用形式如下:
switch(表达式) //表达式必须是整型表达式!( char 类型也可以)
{
case 常量1:
语句
case 常量2:
语句
default : //若没有与表达式匹配的标签,则跳转到 default 语句
语句
}
switch 语句通过对 switch 后面圆括号中的表达式求值,然后程序扫描 case 后面的标签列表,直到发现一个匹配的值为止,然后程序跳转到那一行,若没有与之匹配的标签,如果存在 default : 标签行,就跳转至该行,否则,就继续执行在 switch 后面的语句。
注意,switch 后面括号里表达式的值必须是一个整数值(char类型也可以)同理,case后面的常量(标签)也一样。所以,与多个 if else 语句不同,case 后面的标签只能指定一个值,不能使用一个范围,不能用变量作为 case 标签
还有一点,可以用 break 语句使程序直接离开 switch 语句。