问题很复杂,不怎么清楚,希望有缘人来解答一下这个程序应该怎么写
哪里不会,哪里编译不过,你要有问题你可以说,但是你要指望老哥们来免费帮你写作业,那你也太把我们当冤种了
供参考:
#include <stdio.h>
#define N 5
#define M 3
struct Student {
char gender;
char name[20];
int id;
double grade[M];
};
void readGrades(struct Student stu[]);
void avgGradeOfStudent(struct Student stu[]);
void avgGradeOfSubject(struct Student stu[]);
void sort(struct Student stu[]);
int main()
{
struct Student stu[N];
readGrades(stu);
avgGradeOfStudent(stu);
avgGradeOfSubject(stu);
sort(stu);
return 0;
}
void readGrades(struct Student stu[])
{
int i, j;
for (i = 0; i < N; i++)
{
scanf("%d %s %c", &stu[i].id, stu[i].name, &stu[i].gender);
for (j = 0; j < M; j++)
scanf("%lf", &stu[i].grade[j]);
}
}
void avgGradeOfStudent(struct Student stu[])
{
int i, j;
double avg;
for (i = 0; i < N; i++)
{
for (j = 0, avg = 0; j < M; j++)
avg += stu[i].grade[j];
printf(i == 0 ? "%.1f" : " %.1f", avg / M);
}
printf("\n");
}
void avgGradeOfSubject(struct Student stu[])
{
int i, j;
double sub;
for (i = 0; i < M; i++)
{
for (j = 0, sub = 0; j < N; j++)
sub += stu[j].grade[i];
printf(i == 0 ? "%.1f" : " %.1f", sub / N);
}
printf("\n");
}
void sort(struct Student stu[])
{
int i, j, k;
double sum1, sum2;
struct Student tmp;
for (i = N - 1; i > 0; i--)
{
for (j = 0; j < i; j++)
{
for (k = 0, sum1 = 0, sum2 = 0; k < M; k++) {
sum1 += stu[j].grade[k];
sum2 += stu[j + 1].grade[k];
}
if ((sum1 < sum2) || (sum1 == sum2 && stu[j].id > stu[j + 1].id)) {
tmp = stu[j]; stu[j] = stu[j + 1]; stu[j + 1] = tmp;
}
}
}
for (i = 0; i < N; i++)
printf(i == 0 ? "%d" : " %d", stu[i].id);
}