这段代码运行后,结果是乱的。
目的是使用结构体,输入六个学生成绩及学号,找出最高分、最低分的学生学号及成绩,求出全班平均分,求出全班高于平均分的学生人数
#include <stdio.h>
int main()
{
struct stm
{
int stuld;//学号
double score;//成绩
}stus[6];
double maxcj=0,mincj=100,ave=0;
int s=0,i,maxxh=0,minxh=0;
for(i=0;i<6;i++)
{
printf("请输入第%d名学生成绩及学号\n",i+1);
scanf("%d %d",&stus[i].score,&stus[i].stuld);
ave+=stus[i].score;
if(stus[i].score>maxcj)
{
maxcj=stus[i].score;
maxxh=stus[i].stuld;
}
if(stus[i].score<mincj)
{
mincj=stus[i].score;
minxh=stus[i].stuld;
}
}
ave=ave/6.0;
for(i=0;i<6;i++)
{
if(stus[i].score>ave)
s++;
}
printf("最高分的学生学号为%d,成绩为%lf\n",maxxh,maxcj);
printf("最低分的学生学号为%d,成绩为%lf\n",minxh,mincj);
printf("全班平均分为%lf\n",ave);
printf("全班高于平均分的学生人数为%d\n",s);
}
运行截图如下
第14行scanf应该改为:scanf("%lf %d",&stus[i].score,&stus[i].stuld);
或者
第7行的double score 改为 int score
第14行 scanf("%lf%d",&stus[i].score,&stus[i].stuld);
类型错了,你的成绩是double 但是你输入的是Int,这样写应该是强转不了的,建议类型统一
修改了下,试试看
#include <stdio.h>
int main()
{
struct stm
{
int stuld;//学号
double score;//成绩
}stus[6];
double maxcj=0,mincj=100,ave=0;
int s=0,i,maxxh=0,minxh=0;
for(i=0;i<6;i++)
{
printf("请输入第%d名学生成绩及学号\n",i+1);
scanf("%lf %d",&stus[i].score,&stus[i].stuld);
ave+=stus[i].score;
if(stus[i].score>maxcj) {
maxcj=stus[i].score;
maxxh=stus[i].stuld;
}
if(stus[i].score<mincj) {
mincj=stus[i].score;
minxh=stus[i].stuld;
}
}
ave=ave/6.0;
for(i=0;i<6;i++)
{
if(stus[i].score>ave)
s++;
}
printf("最高分的学生学号为%d,成绩为%0.2lf\n",maxxh,maxcj);
printf("最低分的学生学号为%d,成绩为%0.2lf\n",minxh,mincj);
printf("全班平均分为%0.2lf\n",ave);
printf("全班高于平均分的学生人数为%d\n",s);
}
把scanf那一部分改一改: scanf("%lf %d",&stus[i].score,&stus[i].stuld);
第14行
scanf("%d %d",&stus[i].score,&stus[i].stuld);
改为:
scanf("%lf %d", &stus[i].score, &stus[i].stuld);
其实这个最低最高分问题统计的是不够科学的,当有两个或以上学生成绩相同时,只会统计最先输入那个。
C语言数据类型区分明显,不像python什么的不咋区分