#include<stdio.h>
#define N 10
#define M 5
struct Student
{
int num;
char name[20];
int Chinesescore;
int Mathscore;
int Englishscore;
int Physicsscore;
int Chemistryscore;
float aver1[10];
int num1;
}stu[N]= { {10101,"Yang",95,97,95,89,82},{10102,"Wang",98,90,86,91,86},{10103,"Xu",82,86,73,66,75},{10104,"Li",84,65,75,75,63},{10105,"Xie",95,96,76,72,81},{10106,"Yue",72,83,64,82,84},{10107,"Hu",83,84,65,72,93},{10108,"Liu",63,84,72,95,88},{10109,"Hou",97,77,68,84,76},{10110,"Zhao",77,68,88,91,86} };
void average1(float array[10][5])
{
int i, j, t, tmp;
float aver1[10], sum = 0;
for (i = 0; i < N; i++)
{
for (j = 0; j < M; j++)
{
sum = sum + array[i][j];
}
aver1[i] = sum / M;
printf("第%d个学生的平均分为:%.2f\n", i + 1, aver1[i], sum = 0);
}
for (j = 0; j < 9; j++)
{
for (i = 0; i < 9 - j; i++)
if (aver1[i] < aver1[i + 1])
{
t = aver1[i]; aver1[i] = aver1[i + 1]; aver1[i + 1] = t;
tmp = stu[i].num; stu[i].num = stu[i + 1].num; stu[i + 1] .num= tmp;
}
}
printf("平均分由大到小排序后:\n");
for (i = 0; i < 10; i++)
printf("%d %.2f\n",stu[i].num, aver1[i]);
}
void average2(float array[5][10])
{
int i, j;
float aver2[5], sum = 0;
for (i = 0; i < 5; i++)
{
for (j = 0; j < 10; j++)
{
sum = sum + array[i][j];
}
aver2[i] = sum / 10;
printf("第%d门的平均分为:%.2f\n", i+1,aver2[i], sum = 0);
}
}
void high1(float array[5][10])
{
int i=0,j=0,t, max = array[i][0];
for (i= 0; i < 5; i++)
{
t = 0;
max = array[i][0];
for (j=0;j<10;j++)
{
if (max < array[i][j])
{
max = array[i][j];
t = j;
}
}
printf("第%d门课程最高分所对应的学生学号和姓名为:NO.:%d\nname:%s\n", i + 1, stu[t].num, stu[t].name);
}
}
void high2(float array[5][10])
{
int i, j,maxArr[5] = { 0 },t = maxArr[0],s=0;
for (i = 0; i < 5; i++)
{
int max = array[i][0];
for (j = 0; j < 10; j++)
if (max < array[i][j])
max = array[i][j];
maxArr[i] = max;
}
for (i = 0; i < 5; i++)
{
if (t < maxArr[i + 1])
{
t = maxArr[i + 1];
s = i ;
}
}
printf("所有成绩中最高分的学生学号、姓名、课程为:NO.:%d\nname:%s\n第%d门课程\n", stu[s].num, stu[s].name, s+1);
}
void input(float array[10][5])
{
int i, j, t;
float aver1[10], sum = 0;
for (i = 0; i < N; i++)
{
for (j = 0; j < M; j++)
{
sum = sum + array[i][j];
}
aver1[i] = sum / M;
}
for (j = 0; j < 9; j++)
{
for (i = 0; i < 9 - j; i++)
if (aver1[i] < aver1[i + 1])
{
t = aver1[i]; aver1[i] = aver1[i + 1]; aver1[i + 1] = t;
}
}
printf("按照平均分排序后每个学生的相关信息:\n");
printf("学号 姓名 语文成绩 数学成绩 英语成绩 物理成绩 化学成绩 平均分 排名\n");
for (i = 0; i < 10; i++)
printf("%d %s %d %d %d %d %d %.2f %d\n", stu[i].num, stu[i].name, stu[i].Chinesescore, stu[i].Mathscore, stu[i].Englishscore, stu[i].Physicsscore, stu[i].Chemistryscore, stu[i].aver1,stu[i].num1);
}
int main()
{
float aver1[10];
float aver2[5];
float a[10][5] = { {95,97,95,89,82},{98,90,86,91,86},{82,86,73,66,75},{84,65,75,75,63},{95,96,76,72,81},{72,83,64,82,84},{83,84,65,72,93},{63,84,72,95,88},{97,77,68,84,76},{77,68,88,91,86} };
float b[5][10] = { {95,98,82,84,95,72,83,63,97,77},{97,90,86,65,96,83,84,84,77,68},{95,86,73,75,76,64,65,72,68,88},{89,91,66,75,72,82,72,95,84,91},{82,86,75,63,81,84,93,88,76,86} };
average1(a);
average2(b);
high1(b);
high2(b);
input(a);
return 0;
high1() 和 high2()功能相类似,所以只做了high1的修改,其他修改完善,最大问题是结构体设计不合理,供参考:
#include<stdio.h>
#define N 10
#define M 5
struct Student
{
int num;
char name[20];
int Chinesescore;
int Mathscore;
int Englishscore;
int Physicsscore;
int Chemistryscore;
float aver1;
int num1;
}stu[N]= { {10101,"Yang",95,97,95,89,82},{10102,"Wang",98,90,86,91,86},
{10103,"Xu",82,86,73,66,75},{10104,"Li",84,65,75,75,63},
{10105,"Xie",95,96,76,72,81},{10106,"Yue",72,83,64,82,84},
{10107,"Hu",83,84,65,72,93},{10108,"Liu",63,84,72,95,88},
{10109,"Hou",97,77,68,84,76},{10110,"Zhao",77,68,88,91,86} };
void average1(struct Student stu[])
{
int i, j;
float sum;
struct Student tmp;
for (i = 0; i < N; i++)
{
sum = stu[i].Chinesescore + stu[i].Mathscore + stu[i].Englishscore
+ stu[i].Physicsscore + stu[i].Chemistryscore;
stu[i].aver1 = sum / M;
printf("第%2d个学生的平均分为:%.2f\n", i + 1,stu[i].aver1);
}
printf("\n");
for (j = 0; j < N-1; j++)
{
for (i = 0; i < N-j-1; i++)
if (stu[i].aver1 < stu[i + 1].aver1)
{
tmp = stu[i]; stu[i] = stu[i + 1]; stu[i + 1] = tmp;
}
}
printf("平均分由大到小排序后:\n");
for (i = 0; i < 10; i++){
stu[i].num1 = i+1; //排名赋值
printf("%d %.2f\n",stu[i].num, stu[i].aver1);
}
printf("\n");
}
void average2(struct Student stu[])
{
int i, j;
float aver2[5],sum;
for (i = 0; i < M; i++)
{
sum = 0;
for (j = 0; j < N; j++)
{
switch(i){
case 0: sum += stu[j].Chinesescore; break;
case 1: sum += stu[j].Mathscore; break;
case 2: sum += stu[j].Englishscore; break;
case 3: sum += stu[j].Physicsscore; break;
case 4: sum += stu[j].Chemistryscore;break;
}
}
aver2[i] = sum/N;
printf("第%2d门的平均分为:%.2f\n", i+1,aver2[i]);
}
printf("\n");
}
void high1(struct Student stu[])
{
int i,j,t,max;
for (i= 0; i < M; i++)
{
switch(i){
case 0: max = stu[0].Chinesescore; t=0;break;
case 1: max = stu[0].Mathscore; t=0;break;
case 2: max = stu[0].Englishscore; t=0;break;
case 3: max = stu[0].Physicsscore; t=0;break;
case 4: max = stu[0].Chemistryscore;t=0;break;
}
for (j=0;j < N;j++)
{
switch(i){
case 0: if(max < stu[j].Chinesescore) {max=stu[j].Chinesescore; t=j;}break;
case 1: if(max < stu[j].Mathscore) {max=stu[j].Mathscore; t=j;}break;
case 2: if(max < stu[j].Englishscore) {max=stu[j].Englishscore; t=j;}break;
case 3: if(max < stu[j].Physicsscore) {max=stu[j].Physicsscore; t=j;}break;
case 4: if(max < stu[j].Chemistryscore){max=stu[j].Chemistryscore;t=j;}break;
}
}
printf("第%d门课程最高分所对应的学生学号和姓名为:NO.:%d Name:%s\n",i+1,stu[t].num,stu[t].name);
}
printf("\n");
}
/*
void high2(float array[5][10])
{
int i, j,maxArr[5] = { 0 },t = maxArr[0],s=0;
for (i = 0; i < 5; i++)
{
int max = array[i][0];
for (j = 0; j < 10; j++)
if (max < array[i][j])
max = array[i][j];
maxArr[i] = max;
}
for (i = 0; i < 5; i++)
{
if (t < maxArr[i + 1])
{
t = maxArr[i + 1];
s = i ;
}
}
printf("所有成绩中最高分的学生学号、姓名、课程为:NO.:%d\nname:%s\n第%d门课程\n", stu[s].num, stu[s].name, s+1);
}
*/
void output(struct Student stu[])
{
int i;
printf("按照平均分排序后每个学生的相关信息:\n");
printf("学号 姓名 语文成绩 数学成绩 英语成绩 物理成绩 化学成绩 平均分 排名\n");
for (i = 0; i < 10; i++)
printf("%5d\t%s\t%4d\t%4d\t%4d\t%4d\t%4d\t%6.2f\t%4d\n", stu[i].num, stu[i].name,
stu[i].Chinesescore, stu[i].Mathscore, stu[i].Englishscore,
stu[i].Physicsscore, stu[i].Chemistryscore, stu[i].aver1,stu[i].num1);
}
int main()
{
average1(stu);
average2(stu);
high1(stu);
//high2(b);
output(stu);
return 0;
}