c语言入门:[24]switch语句
现在对于下面的程序我们应该一看就懂,其实这样写无论从逻辑上还是电脑执行上都已经很好了,只是我们书写起来包括阅读上显得代码有点臃肿。
main()
{
int n;
printf("请输入一个小写数字(1~9)");
scanf("%d",&n);
if(1==n)
{
printf("壹\n");
}
else if(2==n)
{
printf("贰\n");
}
else if(3==n)
{
printf("叁\n");
}
else if(4==n)
{
printf("肆\n");
}
else if(5==n)
{
printf("伍\n");
}
else if(6==n)
{
printf("陆\n");
}
else if(7==n)
{
printf("柒\n");
}
else if(8==n)
{
printf("捌\n");
}
else if(9==n)
{
printf("玖\n");
}
else
{
printf("数字应是1~9\n");
}
}
那我们用switch语句替换一下
main()
{
int n;
printf("请输入一个小写数字(1~9)");
scanf("%d",&n);
switch(n)
{
case 1:printf("壹\n");break;
case 2:printf("贰\n");break;
case 3:printf("叁\n");break;
case 4:printf("肆\n");break;
case 5:printf("伍\n");break;
case 6:printf("陆\n");break;
case 7:printf("柒\n");break;
case 8:printf("捌\n");break;
case 9:printf("玖\n");break;
default:printf("数字应是1~9\n");break;
}
}
其实switch就是一个特殊的多分支选择语句, switch(n)意思就是选择n这个变量判断n到底都有可能是什么值,下面的一个case就是一个分支,case后面就是一个n可能的值,break表示退出的意思这里是退出这个switch语句,这里的default是默认路径跟开头的if语句写法里的else是一个意思就是以上分支都不执行时默认执行这个。
为什么要学习switch语句那,其实就是为了某些情况下书写起来规整些,switch是特殊的if语句所以所有用switch语句写的代码用if都能写,但很多选择判断switch语句可就不行了。
下面介绍下switch语句的特点。
1.语法上swtich是用一个大括号来表示它的作用范围的,case语句后面是冒号,每一个case就是一个分支只不过这里不用大括号,case后面可以写很多条正常的语句,当然嵌套进去if语句循环语句啥的都行,例如:
case 1:
语句1;
语句2;
if语句;
while循环语句;
case 2:
语句1;
语句2;
2.switch就是用来选择判断整数的,所以switch后面的括号里的值只能是整数,当然字符也行,因为字符有asc码可以和整数互转这个是之前介绍过的,switch(n)如果n是float类型那直接就报语法错误了。如果把上面的例子里switch(n)换成switch(n>0)运行,我输入数字5后的截图如下
为什么会是输出1呢?因为n>0这个表达式的值为1,所以符合第一个case 1: ,然后执行了printf("壹\n");后退出了switch语句。
所以switch大多是用来判断某个整数变量的可能的几种取值情况,大多数时候switch后面的括号里就是一个整数变量。
3.在switch语句执行过程中一旦某个case后面的值符合后,这个case后面的其它case语句程序就不判断了所以才要加break;
如果我们把上面的例子去掉break
main()
{
int n;
printf("请输入一个小写数字(1~9)");
scanf("%d",&n);
switch(n)
{
case 1:printf("壹\n");
case 2:printf("贰\n");
case 3:printf("叁\n");
case 4:printf("肆\n");
case 5:printf("伍\n");
case 6:printf("陆\n");
case 7:printf("柒\n");
case 8:printf("捌\n");
case 9:printf("玖\n");
default:printf("数字应是1~9\n");
}
}
下面看运行截图
你会看到一但case 3:符合后,后面的case语句就不判断了,而且他们后面的代码也会被执行,所以我们才要加break。
当然我们也可以利用这个特点。请看下面的代码。
main()
{
int n;
printf("请输入一个月份(1~12)");
scanf("%d",&n);
switch(n)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
printf("大月31天\n");
break;
case 4:
case 6:
case 9:
case 11:
printf("小月30天\n");
break;
}
如果我们输入3,第一个case 1:程序判断下不符合,判断下一个,case 3:符合,符合后下面的其它case压根不判断了,case 3后面包括case 3下方其它case后面的代码都会被执行直到遇到break才退出。
switch语句就讲到这,留个练习吧,输入年月 输入这个月有多少天,例如输入 2015年12月 则输出2015年12月有31天,要求用switch语句做,当然这里面有2月份要特殊处理下,你可以在case 2:里面嵌套if语句来判断是不是闰年。
之前一直说有交流代码啥的留评论里,现在看来百度经验的评论里只能留一两行代码,看来是白费了,不行发到百度贴吧里吧,看看哪天建立个贴吧啥的。
(共篇)上一篇:随机数|下一篇: