我们可以使⽤ if 、 switch 实现分⽀结构。
1.if语句分支
if 语句的语法形式如下:
if (条件){
...
} else if(条件){
...
} else{
...
}
表达式成⽴(为真 或等于1),则语句执⾏,且不会进行下一个if判断
表达式不成⽴(为假或等于0),则语句不执⾏,会跳到下一个if进行判断,直到有一个if条件完成或else语句(else语句不是必要的)。
练习:输⼊⼀个⼈的年龄
如果年龄<18岁,打印"少年"
如果年龄在18岁⾄44岁打印"⻘年"
如果年龄在45岁⾄59岁打印"中⽼年"
如果年龄在60岁⾄89岁打印"⽼年"
如果90岁以上打印"⽼寿星"。
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int n;
while(scanf("%d",&n) != -1){
if(n<18) printf("少年\n");
else if(n<=44) printf("青年\n");
else if(n<=59) printf("中老年\n");
else if(n<89) printf("老年\n");
else printf("老寿星\n");
}
return 0;
}
可以看到输入 5 19 46 61 90 的运行结果分别是:
以上的if语句,我们可以看到if后面没有{},当if的执行语句只有一段时{}是可以省去的,但带上适当的⼤括号,代码的逻辑就会更加的清晰,所以⼤家以后在写代码的时候要注意括号的使 ⽤,让代码的可读性更⾼。
2.switch-case分支
除了 if 语句外,C语⾔还提供了 switch 语句来实现分⽀结构。 switch 语句是⼀种特殊形式的 if...else 结构,⽤于判断条件有多个结果的情况。它把多重 的 else if 改成更易⽤、可读性更好的形式
让我们看看switch的语法:
switch (expression) {
case value1: statement
case value2: statement
default: statement
}
上⾯代码中,根据表达式 expression 不同的值,执⾏相应的 case 分⽀。如果找不到对应的值, 就执⾏ default 分⽀
需要注意的是:switch 后的 expression 必须是整型表达式 (n等未知数),而case 后的值,必须是整形常量表达式
举个例子:
如果if分支语句为:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
if(n%3 == 0)
printf("整除,余数为0\n");
else if(n%3 == 1)
printf("余数是1\n");
else
printf("余数是2\n");
return 0;
}
则.switch-case分支则可以变为:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
switch(n%3)
{
case 0:
printf("整除,余数为0\n");
break;
case 1:
printf("余数是1\n");
break;
case 2:
printf("余数是2\n");
break;
}
return 0;
}
switch语句中的break:
以上代码中我们会发现每个case分支在执行完后,都会带有一个break,在 switch 语句中,使⽤ break 才能在跳出 switch 语 句,如果某⼀个 case 语句的后边没有 break 语句,代码会继续玩下执⾏,有可能执⾏其他 case 语句中的代码,直到遇到 break 语句或者 switch 语句结束。
如果没有break会发生什么?
举个例子:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
switch(n%3)
{
case 0:
printf("整除,余数为0\n");
case 1:
printf("余数是1\n");
case 2:
printf("余数是2\n");
break;
}
return 0;
}
我们输入7能得出我们发现 原本应该输"余数是1”,但因为case 1中没有break,则程序会接着往下运行,也就是case 2。
switch语句中的case和default的顺序问题
在 switch 语句中 case ⼦句和 default ⼦句有要求顺序吗? default 只能放在最后吗?
其实,在 switch 语句中 case 语句和 default 语句是没有顺序要求的,只要你的顺序是满⾜实 际需求的就可以。 不过我们通常是把 default ⼦句放在最后处理的。