xh744476961 2023-07-13 13:19 采纳率: 50%
浏览 27
已结题

C语言结构体学生成绩

有N个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入N个学生的数据,要求打印出3门课的总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课成绩)
输入格式
学生数量N占一行每个学生的学号、姓名、三科成绩占一行,空格分开。
输出格式
各门课的平均成绩 最高分的学生的数据(包括学号、姓名、3门课成绩)
样例输入
2
1 blue 90 80 70
b clan 80 70 60
样例输出
85 75 65
1 blue 90 80 70

#include <stdio.h>
#define MAX 1000001
struct Student{
    int id;
    char Name[20];
    int class1,class2,class3;
}student[MAX];
int main()
{
   int N,i;
   scanf("%d",&N);
   for(i=0;i<N;i++)
   {
       scanf("%d%s%d%d%d",&student[i].id,&student[i].Name,&student[i].class1,&student[i].class2,&student[i].class3);
   }
   double ave1,ave2,ave3;
   int sum1=0,sum2=0,sum3=0;
    for(i=0;i<N;i++)
    {
        sum1+=student[i].class1;
        sum2+=student[i].class2;
        sum3+=student[i].class3;
    }
    ave1=1.0*sum1/N;
    ave2=1.0*sum2/N;
    ave3=1.0*sum3/N;
    printf("%lf %lf %lf\n",ave1,ave2,ave3);
    int grade[N];
    for(i=0;i<N;i++)
    {
        grade[i]=student[i].class1+student[i].class2+student[i].class3;
        
    }
    int max=grade[0],num=0;
    for(i=1;i<N;i++)
    {
        if(max<grade[i])
        {
            max=grade[i];
            num=i;
        }
    }
    printf("%d %s %d %d %d",student[num].id,student[num].Name,student[num].class1,student[num].class2,student[num].class3);
    return 0;
}

为啥计算各科平均分貌似只统计了第一个学生的各科成绩

  • 写回答

2条回答 默认 最新

  • threenewbee 2023-07-13 13:39
    关注

    因为学号不一定是数字,而你用了%d和int

    修改如下:

    #include <stdio.h>
    #define MAX 1000001
    struct Student{
        char id[20];
        char Name[20];
        int class1,class2,class3;
    }student[MAX];
    int main()
    {
       int N,i;
       scanf("%d",&N);
       for(i=0;i<N;i++)
       {
           scanf("%s%s%d%d%d",&student[i].id,&student[i].Name,&student[i].class1,&student[i].class2,&student[i].class3);
       }
       double ave1,ave2,ave3;
       int sum1=0,sum2=0,sum3=0;
        for(i=0;i<N;i++)
        {
            sum1+=student[i].class1;
            sum2+=student[i].class2;
            sum3+=student[i].class3;
        }
        ave1=1.0*sum1/N;
        ave2=1.0*sum2/N;
        ave3=1.0*sum3/N;
        printf("%.0lf %.0lf %.0lf\n",ave1,ave2,ave3);
        int grade[N];
        for(i=0;i<N;i++)
        {
            grade[i]=student[i].class1+student[i].class2+student[i].class3;
            
        }
        int max=grade[0],num=0;
        for(i=1;i<N;i++)
        {
            if(max<grade[i])
            {
                max=grade[i];
                num=i;
            }
        }
        printf("%s %s %d %d %d",student[num].id,student[num].Name,student[num].class1,student[num].class2,student[num].class3);
        return 0;
    }
    

    img

    本回答被专家选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 7月24日
  • 专家已采纳回答 7月16日
  • 创建了问题 7月13日

悬赏问题

  • ¥15 结构功能耦合指标计算
  • ¥20 visual studio中c语言用ODBC链接SQL SERVER
  • ¥50 AI大模型精调(百度千帆、飞浆)
  • ¥15 非科班怎么跑代码?如何导数据和调参
  • ¥15 福州市的全人群死因监测点死亡原因报表
  • ¥15 Altair EDEM中生成一个颗粒,并且各个方向没有初始速度
  • ¥15 系统2008r2 装机配置推荐一下
  • ¥15 悬赏Python-playwright部署在centos7上
  • ¥15 psoc creator软件有没有人能远程安装啊
  • ¥15 快速扫描算法求解Eikonal方程咨询