关于结构体变量的疑问

这段代码运行后,结果是乱的。
目的是使用结构体,输入六个学生成绩及学号,找出最高分、最低分的学生学号及成绩,求出全班平均分,求出全班高于平均分的学生人数

#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);
}


运行截图如下

img

第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什么的不咋区分