C语言编程:输入某学生的姓名和三门课的成绩,根据平均分判断等级 我哪写错了 为什么输多少分都是不及格

#include<stdio.h>
main()
{
double a,b,c,d;
char name[10];
scanf("%s%g%g%g",name,&a,&b,&c);
d=(double)(a+b+c)/3;
if(d>=90)
printf("%s的成绩为优秀\n",name);
else if(d>=80)
printf("%s的成绩为良好\n",name);
else if(d>=70)
printf("%s的成绩为中等\n",name);
else if(d>=60)
printf("%s的成绩为及格\n",name);
else if(d<60)
printf("%s的成绩为不及格\n",name);
}

第1个回答  2011-03-13
将程序中的double类型全换成int类型,输入格式%g也换成%d。因为double类型的输入、输出及比较都比int类型要复杂的多,如果按int类型的格式处理double类型则会出错。你可以将c语言中数据类型的输入、输出等再深入的研究一下。。。
#include<stdio.h>
main()
{
int a,b,c,d;
char name[10];
scanf("%s%d%d%d",name,&a,&b,&c);
d=(int)((a+b+c)/3.0);
if(d>=90)
printf("%s的成绩为优秀\n",name);
else if(d>=80)
printf("%s的成绩为良好\n",name);
else if(d>=70)
printf("%s的成绩为中等\n",name);
else if(d>=60)
printf("%s的成绩为及格\n",name);
else if(d<60)
printf("%s的成绩为不及格\n",name);
第2个回答  2011-03-13
悲剧了,我运行的结果和你的一样
我感觉程序如果错了,应该在输入输出部分,或者d的值没有赋上 下面的程序正确的:
#include<stdio.h>
void main()
{
double a,b,c,d;
char name[10];

scanf("%s%lf%lf%lf",name,&a,&b,&c);
d=(a+b+c)/3;
printf("%f %f %f %f\n",a,b,c,d);
puts(name);
if(d>=90)
printf("%s的成绩为优秀\n",name);
else if(d>=80)
printf("%s的成绩为良好\n",name);
else if(d>=70)
printf("%s的成绩为中等\n",name);
else if(d>=60)
printf("%s的成绩为及格\n",name);
else if(d<60)
printf("%s的成绩为不及格\n",name);
}
主要错误是你的输入语句格式不对, 应为scanf("%s%lf%lf%lf",name,&a,&b,&c);double型的对应lf,如果按照单精度浮点数赋值,就会成为乱码,你可以加几个输出语句看看你的问题出在哪儿,输入时数字之间用空格或enter键区分...
第3个回答  2011-03-13
#include<stdio.h>
main()
{
double a,b,c,d;
char name[10];
scanf("%s%lf%lf%lf",name,&a,&b,&c); //注意double的格式控制符是%lf,float是%f(其实你这里没必要用double)
d=(double)(a+b+c)/3;
if(d>=90)
printf("%s的成绩为优秀\n",name);
else if(d>=80)
printf("%s的成绩为良好\n",name);
else if(d>=70)
printf("%s的成绩为中等\n",name);
else if(d>=60)
printf("%s的成绩为及格\n",name);
else if(d<60)
printf("%s的成绩为不及格\n",name);
}
第4个回答  2011-03-13
#include<stdio.h>
main()
{
int a,b,c,d;
char name[10];
printf("please input name,a,b,c:");
scanf("%s%d%d%d",name,&a,&b,&c);

d=(a+b+c)/3;
if(d>=90)
printf("%s的成绩为优秀\n",name);
else if(d>=80)
printf("%s的成绩为良好\n",name);
else if(d>=70)
printf("%s的成绩为中等\n",name);
else if(d>=60)
printf("%s的成绩为及格\n",name);
else if(d<60)
printf("%s的成绩为不及格\n",name);

}
你自己看看吧 是你在定义变量时类型定义错了 你前面定义了d为double型的 而后面却要用d>90(90 是整型的 不知道你考虑过他们两能不能比较的问题)还有前面printf语句都没有怎么取a,b,c的值呢 你应该是初学者吧 自己以后要多注意这些细节问题哦!
第5个回答  2011-03-13
%g不能对应double,%s貌似不对吧应该用%c(这个可以去看看MSDN是怎么写的)
另外d的表达式也不用加double(加了也不出错)
另外scanf有错,不管你输入多少char类的可以加入数字,电脑会把后面的数字也当作是字符加入到char里,建议分开输入,char类的一般用getchar和putchar进行输入输出控制