C语言入门4-16分支结构
为什么这里要把score除以10呢?
为什么这里要把score除以10呢?
2016-01-13
1、score/10是结合隐形强制转换使用。
2、case 后面跟的是整数,又根据 “switch后面的表达式语句只能是整型或者字符类型”这句话,所以我们可以判断switch后面的表达式是整形的而不是字符型的。
3、代码中score/10等于8.7,但是因为switch后面的表达式是整形的,所以程序会对8.7做隐形强制转换使其转换为整形。在c++中,小数转换成整形时会把小数点部分舍弃而不是四舍五入,也就是说8.7被转换成8了。 这样一来,switch语句就会执行case 8 这个分支,也就是输出“等级B”。
3、score/10结合隐形强制转换把分数转换成10、9、8、7、6等整形变量,然后参与switch分支判断,这样就可以实现 90-100分输出“等级A”、80-90分输出“等级B”这种目的。
比如说,他考了87分,那么87/10等于8,如果他考了93分,那么93/10等于9,也就是说,可以先通过score/10来取十位数,然后看switch语句中有case多少与之对应,然后依次执行完,遇到break就终止了,不会继续往下执行。例如:把程序中的case 8下面的那个break去掉,那么运行结果就是等级B等级C,因为遇到break才跳出switch,你可以在想想。如下:
#include <stdio.h>
int main()
{
int score = 87;
score/=10;
switch(score)
{
case 10:
case 9:
printf("等级A");
break;
case 8:
printf("等级B");
case 7:
case 6:
printf("等级C");
break;
default:
printf("等级D");
break;
}
return 0;
}
举报