一个C语言问题,对我来说有点难

按要求定义结构体数据类型,包括num(学号),name(姓名),score5,aver(5门课平均成绩),和sum(5门课总成绩),要求将下面功能都编写成独立的函数。

  1. 输入n个学生5门成绩的函数
  2. 计算每个学生的5门的总成绩和平均成绩。
  3. 计算n个学生的最高总分和最高平均分。
  4. 输入一个学号,输出该学生的学号、姓名和总分。
  5. 编写主函数集成上面4项功能。
  6. 程序能够进行异常处理,检查用户输入数据的有效性,在用户输入数据有错误(如类型错误)或无效时,不会中断程序的执行,程序具有一定的健壮性。

定义结构体数据类型
typedef struct student{
int num;
char name[10];
int score[5];
int sum;
float avg;
} stu;

你题目的解答代码如下:

#include<stdio.h>
#include<stdlib.h>
typedef struct student{
    int num;
    char name[10];
    int score[5];
    int sum;
    float avg;
} stu;

void input(stu a[],int n)
{
    int i,t;
    for(i=0;i<n;i++)
    {
        t = scanf("%d%s%d%d%d%d%d",&a[i].num,a[i].name,&a[i].score[0],&a[i].score[1],&a[i].score[2],&a[i].score[3],&a[i].score[4]);
        if (t!=7)
        {
            printf("输入错误,重新输入:\n");
            i--;
            setbuf(stdin, NULL);
        }
    }
}

void calc(stu a[],int n)
{
    int i,j;
    for(i=0;i<n;i++)
    {
        int sum = 0;
        for (j=0; j<5; ++j)
        {
            sum += a[i].score[j];
        }
        a[i].avg = sum/5.0;
        a[i].sum = sum;
    }
    printf(" 学号       姓名 成绩1 成绩2 成绩3 成绩4 成绩5 总成绩 平均成绩\n") ;
    for(i=0;i<n;i++)
    {
        printf("%5d %10s %5d %5d %5d %5d %5d %6d %8.2f\n",a[i].num,a[i].name,a[i].score[0],a[i].score[1],a[i].score[2],a[i].score[3],a[i].score[4],a[i].sum,a[i].avg);
    }
}
void maxscore(stu a[],int n)
{
    int i,max=0;
    for(i=0;i<n;i++)
    {
        if (a[max].sum<a[i].sum)
            max = i;
    }
    printf("最高总分:%d 最高平均分:%.2f\n",a[max].sum,a[max].avg);
}
void sou(stu a[],int n)
{
    int i,j=0,num;
    printf("请输入学号:");
    scanf("%d", &num);
    for(i=0;i<n;i++)
    {
        if (num==a[i].num)
        {
                printf("学号:%d 姓名:%s 总分:%d\n",a[i].num,a[i].name,a[i].sum);
            return;
        }
    }
    printf("没有找到\n");
}

void main()
{
    int i,j,k,n;
    scanf("%d", &n);
    stu a[n], buf;
    input(a,n);
    calc(a,n);
    maxscore(a,n);
    sou(a,n);
}

img

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img