C语言自定义数据对学生成绩进行输出


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

#define N 10 // 学生数量
#define M 3 // 课程数量

typedef struct student
{
    int id;
    char name[200];
    float scores[M];
    float avg;
} Student;

// 输入学生数据
void input(Student* students)
{
    for (int i = 0; i < N; i++)
    {
        scanf("%d", &students[i].id);
        scanf("%s", students[i].name);
        for (int j = 0; j < M; j++)
            scanf("%f", &students[i].scores[j]);
    }
}

// 计算学生平均成绩
void average(Student* students)
{
    for (int i = 0; i < N; i++)
    {
        float sum = 0;
        for (int j = 0; j < M; j++)
            sum += students[i].scores[j];
        students[i].avg = sum / M;
    }
}

// 输出学生数据
void output(Student* students)
{
    for (int i = 0; i < N; i++)
    {
        printf("%.2f\n", students[i].avg);
    }
   printf("\n");
}

// 找出平均成绩最高的学生
Student max(Student* students)
{
    Student maxStudent = students[0];
    for (int i = 1; i < N; i++)
    {
        if (students[i].avg > maxStudent.avg)
            maxStudent = students[i];
    }
    return maxStudent;
}

int main()
{
    Student students[N];

    // 输入学生数据
    input(students);

    // 计算学生平均成绩
    average(students);

    // 输出学生平均成绩
    output(students);

    // 找出平均成绩最高的学生
    Student maxStudent = max(students);

    // 输出平均成绩最高的学生数据
    printf("%d %s", maxStudent.id, maxStudent.name);
    for (int i = 0; i < M; i++)
        printf(" %.2f ", maxStudent.scores[i]);
    printf("%.2f. ", maxStudent.avg);

    return 0;
}
代码和问题都在上面。嗯,就是少输出一个数据。嗯,还有就是多了一些空格。嗯,应该怎么修改一下?

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#define N 10//学生数量
#define M 3//课程数量
typedef struct student
{
    int id;
    char name[200];
    float scores[M];
    float avg;
}Student;
float sum_score; 
//输入学生数据
void input(Student* students)
{
    for(int i = 0; i < N; i++)
    {
        scanf("%d", &students[i].id);
        scanf("%s", students[i].name);
        for (int j= 0; j<M;j++)
            {
            scanf("%f", &students[i].scores[j]);
            sum_score+=students[i].scores[j];
            }
    }
}
//计算学生平均成绩
void average(Student* students)
{
    for(int i = 0;i< N;i++)
    {
        float sum = 0;
        for(int j = 0;j < M;j++)
            sum += students[i].scores[j];
        students[i].avg = sum / M;
    }
}
//输出学生数据
void output(Student* students)
{
    for(int i = 0;i < N;i++)
    {
        printf("%.2f\n", students[i].avg);
    }
}
//找出平均成绩最高的学生
Student max(Student* students)
{
    Student maxStudent = students[0];
    for(int i = 1;i < N;i++)
    {
        if(students[i].avg > maxStudent.avg)
            maxStudent = students[i];
    }
    return maxStudent;
}
int main()
{
    Student students[N];
    //输入学生数据
    input(students);
    //计算学生平均成绩
    average(students);
    //输出学生平均成绩
    output(students);
    //输出全部学生平均成绩 
    printf("%.2f",sum_score/(N*M));
    //找出平均成绩最高的学生
    Student maxStudent = max(students);
    //输出平均成绩最高的学生数据
    for(int i=0;i<N;++i)
    if(fabs(students[i].avg-maxStudent.avg)<=1e-5)
    {
    printf("\n%d %s", students[i].id, students[i].name);
    for(int j = 0;j < M;j++)
        printf(" %.2f", students[i].scores[j]);
    printf(" %.2f.", students[i].avg);
    }
    return 0;
}
 

第11行的数据80.03是哪来的,上面代码里看不出有什么问题。最后输出平均成绩最高的学生数据,那段这么改:

// 输出平均成绩最高的学生数据
    printf("\n%d %s\n", maxStudent.id, maxStudent.name);
    for (int i = 0; i < M; i++)
        printf(" %.2f ", maxStudent.scores[i]);
    printf("%.2f.", maxStudent.avg);

少计算一个总平均成绩。