为啥这两个C程序运行的结果不一样?

来源:百度知道 编辑:UC知道 时间:2024/06/20 13:53:11
#include<STDIO.H>
void main()
{
int mark;
scanf("%d",&mark);
for(;mark<0||mark>100;)
{
printf("please input again");
scanf("%d",&mark);
}
switch(mark)
{
case 100:
case 90:printf("%d is A",mark);break;
case 80:printf("%d is B",mark);break;
case 70:printf("%d is C",mark);break;
case 60:printf("%d is D",mark);break;
case 50:
case 40:
case 30:
case 20:
case 10:
case 0:printf("%d is E",mark);break;
}
}

#include<STDIO.H>
void main()
{
int mark;
scanf("%d",&mark);
for(;mark<0||mark>100;)
{
printf("please input again");
scanf("%d",&mar

错误就在case语句的处理上
case 100:
case 90:printf("%d is A",mark);break;
case 80:printf("%d is B",mark);break;
case 70:printf("%d is C",mark);break;
case 60:printf("%d is D",mark);break;
case 50:
case 40:
case 30:
case 20:
case 10:
case 0:printf("%d is E",mark);break;
可以看到,事实上你只对10,20,.。100几个整值进行了判断,而对大多数的其他值并没有判断,比如67,就没有判断。所以,使用了mark/10之后就大不同了。/是整除,比如67/10,结果是6.这下你就明白了,后面是按照分数段处理的,而前面是按照一个数处理的。

你这个程序是用来分成绩的等级的吧

第一个程序就只能算100,90,80等等这样的整十的数,因为你的case里只有整十的数;

第二个程序整除10,所以95和90或者是91整除10都是9,所以就可以将90到100之间的数都划分为A等级,其他的等级也同理。所以说第二个程序应该能符合你的要求。

注意Case后面的取值,
第一个程序是100,90...
第二个程序是10,9...
所以第二个程序要除10啊~~呵呵