C语言中成绩分级(用switch语句)的问题

>=90分为A,>=80分为B,>=70为C.....

#include <stdio.h>
main()
{
int i,b;
float a[5];

for(i=0;i<=4;i++)
scanf("%f",&a[i]);

for(i=0;i<=4;i++)
{
b=a[i]/10;
switch(b)
{
case 10:
case 9:
printf("%f\t%c\n",a[i],'A');
case 8:
printf("%f\t%c\n",a[i],'B');
case 7:
printf("%f\t%c\n",a[i],'C');
case 6:
printf("%f\t%c\n",a[i],'D');
default:
printf("%f\t%c\n",a[i],'E');
}
}
}

这里如果case语句后没有"break;",就会出现如图,比如90分就会出现ABCDE五个等级,为什么呢?
90/10取整就是9,为什么输出的结果会有BCD?

让我来跟你说吧,因为switch语句是顺序执行的,而你的case语句结尾没有加break也就是说你的case会按顺序一个一个执行,直到结束,当你输入的是90 的时候,进入case 10 也就是按顺序执行到case 9:输出A,紧接着走到了case 8:输出B,紧接着走到了case:7输出C,紧着着进入case:6输出D,而因为有相应的case相匹配,所以default不会被执行,紧接着进入下一个循环。。。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-03-07
因为switch语句是顺序执行的,而你的case语句结尾没有加break也就是说你的case会按顺序一个一个执行,直到结束,当你输入的是90 的时候,进入case 10 也就是按顺序执行到case 9:输出A,紧接着走到了case 8:输出B,紧接着走到了case:7输出C,紧着着进入case:6输出D,而因为有相应的case相匹配,所以default不会被执行,紧接着进入下一个循环。。。 没有break语句的话呢,在执行完一句之后呢,就不会自动跳出,而是会继续执行其他以下的语句,有了break之后,每次执行了一句之后,就会自动跳出switch,就不会出现你说的情况了
第2个回答  2012-03-07
因为没有break语句的话呢,在执行完一句之后呢,就不会自动跳出,而是会继续执行其他以下的语句,有了break之后,每次执行了一句之后,就会自动跳出switch,就不会出现你说的情况了