#include
void main()
{
char g;float a,b,c,s;
printf("请输入学生成绩:\n");
s=0.3*a+0.3*b+0.4*c;
scanf("平时:%d期中:%d期末:%d",&a,&b,&c);
while(s>100||s<0)
{
printf("输入有误,请重新输入!\n");
scanf("%f",s);
}
if(s>=90) g='A';
else if(s>=80)g='B';
else if(s>=70)g='C';
else if(s>=60)g='D';
else g='E';
printf("成绩为%.1f分,成绩等级为%c。\n",s,g);
}
前面的问题白回复了么???
#include<stdio.h>
int main()
{int a,b,c;
char g;float s;
while(1) {
printf("请输入学生成绩:\n");
fflush(stdin);
scanf("平时:%d期中:%d期末:%d",&a,&b,&c);
s=0.3*a+0.3*b+0.4*c;
if (s>100||s<0)
{
printf("输入有误,请重新输入!\n");
continue;
}
if(s>=90) g='A';
else if(s>=80)g='B';
else if(s>=70)g='C';
else if(s>=60)g='D';
else g='E';
printf("成绩为%.1f分,成绩等级为%c。\n",s,g);
return 0;
}
return 0;
}
这段代码有以下几个问题:
(1)在输入时,使用了 %d 格式化符号来读取浮点数,应该使用 %f 格式化符号。
(2)在对 s 进行输入检验时,应该使用 %f 格式化符号来读取浮点数。
(3)没有对变量 a、b、c 进行输入检验,可能会导致非法输入。
(4)在判断成绩等级时,如果学生的成绩恰好为 60、70、80 或 90 分,会出现错误的等级。
(5)在最后一行输出时,应该使用 %f 格式化符号来输出 s。
可以如下改动:
#include <stdio.h>
int main() {
float a, b, c, s;
char g;
printf("请输入学生成绩(平时成绩 期中成绩 期末成绩):\n");
scanf("%f %f %f", &a, &b, &c);
s = 0.3 * a + 0.3 * b + 0.4 * c;
while (s > 100 || s < 0) {
printf("输入有误,请重新输入!\n");
scanf("%f", &s);
}
if (s >= 90) g = 'A';
else if (s >= 80) g = 'B';
else if (s >= 70) g = 'C';
else if (s >= 60) g = 'D';
else g = 'E';
printf("成绩为 %.1f 分,成绩等级为 %c。\n", s, g);
return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:当一个编码的所有二进位都用来表示数值,而没有符号位时,该编码表示的就是无符号整数,此时默认为正。
带符号整数就是必须有一个符号位。
正由于此相同位数情况下,无符号数比带符号数所能表示的范围大。(不作解释)