我会以“输入1-7的数字,输出对应的星期”为例,通过用if和switch两种方式来分别说明它们之间的区别。
if语句:
#include<stdio.h>
int main()
{
int a;//定义变量a
printf("请输入你要判断的数字:\n");
scanf("%d",&a);
if(a==1){
printf("今天是星期一");
}
else if(a==2){
printf("今天是星期二");
}
else if(a==3){
printf("今天是星期三");
}
else if(a==4){
printf("今天是星期四");
}
else if(a==5){
printf("今天是星期五");
}
else if(a==6){
printf("今天是星期六");
}
else if(a==7){
printf("今天是星期七");
}
else{
printf("输入错误,请重新输入");
}
return 0;
}
if的语法:
if (逻辑表达式) {
语句块1;
}
else {
语句块2;
}
if结构更多的是选择,它可以选择更多的路来走,并且每一条路的可以不一样,但要实现这种不一样就要使用嵌套语句,就如例子里面的else if一样,重新选择一条路走。
switch语句:
#include<stdio.h>
int main(){
int a;//定义变量a
printf("请输入你要判断的数字:\n");
scanf("%d",&a);
switch(a){
case 1:
printf("今天是星期一");
break;
case 2:
printf("今天是星期二");
break;
case 3:
printf("今天是星期三");
break;
case 4:
printf("今天是星期四");
break;
case 5:
printf("今天是星期五");
break;
case 6:
printf("今天是星期六");
break;
case 7:
printf("今天是星期七");
break;
default :
printf("输入错误,请重新输入");
}
return 0;
}
switch的语法:
switch(整数表达式) {
case 常量表达式1:
语句块1;
break;
case 常量表达式2:
语句块2;
break;
case 常量表达式3:
语句块3;
break;
..... case 常量表达式n:
语句块n;
break;
default :
语句块;
}
switch也可以选择多条路走,但是它会有限制的条件,就是只能选择相同的,类似的路走,不能改变航道。并且遇到break后,就会跳出当前的结构,继续下面的结构,直至结束为主。
区别:
-
从效率方面看:如果分支比较多的时候switch的效率会比if的效率高,因为不管有多少个case,都只需要计算一个值,就直接跳转,不需要逐个比较和查询。
-
从限制方面看:多重if选择结构没有switch结构的限制条件多,if的应用范围更广泛。最重要的是:if可以的条件判断,switch不一定可以实现,但switch可以实现的,if肯定可以实现。