学生选课记录由学号、课程号、成绩组成,将学生选课记录存放在结构体数组中。请编程求出每位学生的平均分。要求:选课记录数、选课记录均由键盘输入。(代码错误编写失败)

#include<stdio.h>
#include<stdlib.h>
#define SIZE 100
typedef struct STUDENT
{
int id;
char number[20];
int score;
}
student[SIZE];
int cmp(const void aa,const void bb)
{
return((
(struct STUDENT
)aa).id-((struct STUDENT)bb).id);
}
int main()
{ student s;
int i,n;
scanf("%d",&n);
printf("学号 课程号 分数\n");
for(i=0;i<n;i++)
{
scanf("%d%s%d",&s[i].id,s[i].number,&s[i].score);
}
qsort(s,n,sizeof(s[0]),cmp);
printf("排序如下:\n");
for(i=0;i<n;i++)
{
printf("%d %s %d\n",s[i].id,s[i].number,s[i].score);
}
return 0;
}
缺少排列,运用计数器表现出现次数

img


最终求各同学的平均成绩的步骤

#include <stdio.h>
#include <stdlib.h>

#define SIZE 100

typedef struct _Student
{
    int id;
    char number[20];
    int score;
} Student;

int cmp(const void *a, const void *b)
{
    return ((Student *)a)->id - ((Student *)b)->id;
}

int main()
{
    Student s[SIZE];
    int i, n;
    scanf("%d", &n);
    printf("学号 课程号 分数\n");
    for (i = 0; i < n; i++)
        scanf("%d%s%d", &s[i].id, s[i].number, &s[i].score);

    qsort(s, n, sizeof(Student), cmp);
    printf("排序如下:\n");
    for (i = 0; i < n; i++)
        printf("%d %s %d\n", s[i].id, s[i].number, s[i].score);
    i = 0;
    printf("平均成绩:\n");
    while (i < n)
    {
        int sum = 0;
        int j = i;
        while (s[i].id == s[j].id)
        {
            sum += s[j].score;
            j++;
        }
        printf("%d %.1f\n", s[i].id, (float)sum / (j - i));
        i = j;
    }
    return 0;
}
$ gcc -Wall main.c
$ ./a.out
5
学号 课程号 分数
215301 1 90
215302 1 91
215301 2 89
215303 1 95
215302 2 98
排序如下:
215301 1 90
215301 2 89
215302 1 91
215302 2 98
215303 1 95
平均成绩:
215301 89.5
215302 94.5
215303 95.0

确定代码是实际代码吗?student从哪来的?

代码修改如下:

#include <stdio.h>
#include<stdio.h>
#include<stdlib.h>
#define SIZE 100
#define KCS 10
typedef struct STUDENT
{
    int id;
    char number[KCS][20]; //多门课程号
    int score[KCS]; //多门课程成绩
    float ave; //平均分
}student;
student stu[SIZE];

void sort(student stu[],int n)
{
    student tmp;
    int i,j;
    for (i=0;i<n-1;i++)
    {
        for (j=0;j<n-1-i;j++)
        {
            if (stu[j].ave<stu[j+1].ave)
            {
                tmp = stu[j];
                stu[j] = stu[j+1];
                stu[j+1] = tmp;
            }
        }
    }
}

int main()
{
    int i,j,n,kc;
    printf("请输入学生人数:");
    scanf("%d",&n);
    printf("请输入课程数:");
    scanf("%d",&kc);
    
    for(i=0;i<n;i++)
    {
        printf("请输入学号\n");
        scanf("%d",&stu[i].id);
        
        stu[i].ave = 0;
        for(j=0;j<kc;j++)
        {
            printf("请输入第%d门课的课程号 成绩:",j+1);
            scanf("%s",stu[i].number[j]);
            scanf("%d",&stu[i].score[j]);
            stu[i].ave += stu[i].score[j];
        }
        stu[i].ave/= kc;
    }
    sort(stu,n);
    printf("排序如下:\n");
    for(i=0;i<n;i++)
    {
        printf("学号:%d ",stu[i].id);
        for(j=0;j<kc;j++)
            printf("课程号:%s,成绩:%d ",stu[i].number[j],stu[i].score[j]);
        printf("平均分:%.2f\n",stu[i].ave);
    }
    return 0;
}


我先评价一下,大概错了至少5处。等我运行康康,回来再说