简单学生管理系统
/* Note:Your choice is C IDE */#include "stdio.h"
#define N 2
struct student /*定义一个结构体数组用来存放学生的相关信息:
姓名、学号、数学及英语成绩、2门课的平均成绩*/
{
char name[20];
int num;
float math;
float eng;
float aver_p; //每个人2门课的平均成绩
};
void main()
{
int i,j;
float temp,max;
float aver_am=0; //所有人数学平均成绩
float aver_ae=0; //所有人英语平均成绩
float aver_aa=0; //所有人2门课的平均成绩
struct student stu[N];
puts("请输入学生的相关数据:(姓名、学号、数学成绩、英语成绩)\n");
for(i=0;i<N;i++)
{
scanf("%s%d%.2f%.2f\n",stu[i].name,&stu[i].num,&stu[i].math,&stu[i].eng);
stu[i].aver_p=(stu[i].math+stu[i].eng)/2;
aver_am+=stu[i].math; //先求出总成绩,在格式输出时除以N就得到平均成绩了
aver_ae+=stu[i].eng;
aver_aa+=(stu[i].math+stu[i].eng);
}
printf("所有学生的数学平均成绩为:%.2f \n",aver_am/N);
printf("所有学生的英语平均成绩为:%.2f \n",aver_ae/N);
printf("所有学生2门课的平均成绩为:%.2f \n",aver_aa/N);
printf("*******************成 绩 单*******************\n");
printf("学生姓名 学号 数学成绩 英语成绩 平均成绩 \n");
for(i=0;i<N;i++)
{
printf(" %s %d %.2f %.2f %.2f\n",stu[i].name,stu[i].num,stu[i].math,stu[i].eng,stu[i].aver_p);
}
for(i=0;i<N;i++) //对每人的平均成绩冒泡排序,由大到小
for(j=0;j<N-i;j++)
if(stu[i].aver_p<stu[i+1].aver_p)
{
temp=stu[i].aver_p;
stu[i].aver_p=stu[i+1].aver_p;
stu[i+1].aver_p=temp;
}
printf("平均分排序为:");
for(i=0;i<N;i++)
printf("%.2f ",stu[i].aver_p); //由大到小顺序输出
//求数学最高成绩,并输出对应的学生姓名
for(i=0;i<N;i++) //对所有人数学成绩排序,输出最大
if(stu[i].math<stu[i+1].math)
{
max=stu[i].math;
stu[i].math=stu[i+1].math;
stu[i+1].math=max;
}
printf("数学最高分是:%.2f \n",stu[0].math);
printf("学生姓名是:%s \n",stu[0].name);
//求英语最高成绩,并输出对应的学生姓名
for(i=0;i<N;i++)
if(stu[i].eng<stu[i+1].eng)
{
max=stu[i].eng;
stu[i].eng=stu[i+1].eng;
stu[i+1].eng=max;
}
printf("英语最高分是:%.2f \n",stu[0].eng);
printf("学生姓名是:%s \n",stu[0].name);
//求平均最高成绩,并输出对应的学生姓名
for(i=0;i<N;i++)
if(stu[i].aver_p<stu[i+1].aver_p)
{
max=stu[i].aver_p;
stu[i].aver_p=stu[i+1].aver_p;
stu[i+1].aver_p=max;
}
printf("平均分最高的是:%.2f ",stu[0].aver_p);
printf("学生姓名是:%s ",stu[0].name);
}
运行能成功,但输入数据后,结果不正确。请教高手。
原题是要求输入N个学生的信息 姓名、学号、数学成绩、英语成绩 然后输出这些信息,并将平均成绩排序,分别输出数学、英语和平均成绩的最高分及对应的学生