这个程序在哪里有错误?

来源:百度知道 编辑:UC知道 时间:2024/05/28 05:11:47
程序要求为:输入一个学生的两门课成绩(百分制),计算该生的总分并要求输出成绩等级‘A’、‘B’、‘C’、‘D’、‘E’。总分在180分以上为‘A’,160~179分为‘B’,140~159分为‘C’,120~139分为‘D’,120分以下为‘E’。使用switch语句编写.
具体要求:
①学生的两门课成绩通过键盘输入,成绩应该都为整数,输入之前要有提示信息。
②若输入的成绩不是百分制成绩,则给出错误提示信息,并且不再进行下面的等级评价;若输入的成绩是百分制成绩,则计算总分,并根据要求评价等级。
我编写的代码为:
#include<stdio.h>
void main()
{
int a,b,A;
printf("请输入第一科成绩:");
scanf("%d",&a);
printf("请输入第二科成绩:");
scanf("%d",&b);
A=a+b;
if ((a<0||a>100)||(b<0||b>100)) printf("输入错误!\n");
else
switch ((int)(A/2))
{case 9:printf("A\n");break;
case 8:printf("B\n");break;
case 7:printf("C\n");break;
case 6:printf("D\n");break;
default:printf("E\n");
}
}
执行时一直不能得到结果,总显示"E".

错误在于"switch ((int)(A/2)) " switch参数与case参数搭配不当。

A=a+b 根据题意来看,A为总成绩,其值范围为0~200
A/2 的结果为0~100,而switch_case语句分段为6,7,8,9
原程序表达的是,总分18~19分显示A,16~17显示B,14~15显示C,12~13显示D,其它显示E。
还有,A已经定义为INT,这里没有新的变量,不用重复定义了。
修改办法:
switch (A/20)

另:此程序200分会显示为E,case语句里最好再加上一句
case 10:printf("A\n");break;
以保证200分正确显示成绩等级。

#include<stdio.h>
void main()
{
int a,b,A;
printf("Input the first number:");
scanf("%d",&a);
printf("Input the second number:");
scanf("%d",&b);
A=a+b;
if ((a<0||a>100)||(b<0||b>100)) printf("输入错误!\n");
else
{
switch ((int)(A/2))
{
case 9:printf("A\n");break;
case 8:printf("B\n");break;
case 7:printf("C\n");break; <