#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);
少计算一个总平均成绩。