小型的学生管理系统,最后一步不会,求教!!!!!!!!!!!
每个学生的记录为:学号,姓名,性别,英语,数学,程序设计。(对此设计结构体)编程实现以下功能:
(1)输入每位学生的各项信息(至少5位)。
(2)计算每位学生的总分和平均分。
(3)计算每门课程的平均分及最高、最低分。
(4)查找所有重修学生的学号、姓名和重修科目。
(5)对所有记录按照平均成绩降序排列,当成绩相等时再按照学号升序排列。
要求:使用到结构体和指针
我写的代码:
#include <stdio.h>
#define N 5
struct student
{
int num;
char name[10];
char sex;
float english;
float math;
float programming;
}stu[N];
float total[N];
float aver[N];
int i,n;
void Infor()//输入每位学生的各项信息,计算每位学生的总分和平均分。
{
for(i=0;i<N;i++)
{
printf("请分别输入第%d位学生的学号,姓名,性别,英语成绩,数学成绩,程序设计成绩,并分别用空格分开:\n",i);
scanf("%d %s %c %f %f %f",&stu[i].num,&stu[i].name,&stu[i].sex,&stu[i].english,&stu[i].math,&stu[i].programming);
total[i]=stu[i].english+stu[i].math+stu[i].programming;
aver[i]=(stu[i].english+stu[i].math+stu[i].programming)/3;
printf("总分:%f\t平均分:%f\n\n",total[i],aver[i]);
}
}
void EMP()//计算每门课程的平均分
{
float english=0;
float math=0;
float programming=0;
for(i=0;i<N;i++)
{
english=(english+stu[i].english);
math=(math+stu[i].math);
programming=(programming+stu[i].programming);
}
printf("英语的平均分为:%f\n数学的平均分为:%f\n程序设计平均分为:%f\n\n",english/N,math/N,programming/N);
}
void HL()//计算每门课程的最高、最低分。
{ EMP();
float *p1,*p2,*p3,*p4,*p5,*p6;
p1=p2=&stu[0].english;
p3=p4=&stu[0].math;
p5=p6=&stu[0].programming;
for(i=0;i<N-1;i++)
{
if(*p1>stu[i+1].english)
p1=&stu[i+1].english;
if(*p2<stu[i+1].english)
p2=&stu[i+1].english;
if (*p3>stu[i+1].math)
p3=&stu[i+1].math;
if(*p4<stu[i+1].math)
p4=&stu[i+1].math;
if (*p5>stu[i+1].programming)
p5=&stu[i+1].programming;
if(*p6<stu[i+1].programming)
p6=&stu[i+1].programming;
}
printf ("单科英语最低分是:%f\n",*p1);
printf ("单科英语最高分是:%f\n\n",*p2);
printf ("单科数学最低分是:%f\n",*p3);
printf ("单科数学最高分是:%f\n\n",*p4);
printf ("单科程序设计最低分是:%f\n",*p5);
printf ("单科程序设计最高分是:%f\n\n",*p6);
}
void CX()//查找所有重修学生的学号、姓名和重修科目。
{
printf("学号\t姓名\t重修科目\n");
for (i=0;i<N;i++)
{
if(stu[i].english<60)
printf("%d\t%s\t英语\n",stu[i].num,&stu[i].name);
if (stu[i].math<60)
printf("%d\t%s\t数学\n",stu[i].num,&stu[i].name);
if (stu[i].programming<60)
printf("%d\t%s\t程序设计\n",stu[i].num,&stu[i].name);
}
}
void PX()//对所有记录按照平均成绩降序排列,当成绩相等时再按照学号升序排列。
{ float j,k;
aver[i]=(stu[i].english+stu[i].math+stu[i].programming)/3;
printf ("按照学生的平均分降序排列\n");
for (i=0;i<N-1;i++)
for(j=0;j<N-i-1;j++)
if(aver[i]<aver[i+1])
{
k=aver[i+1];
aver[i+1]=aver[i];
aver[i] =k;
}
for(i=0;i<N;i++)
printf("%f\t",aver[i]);
}
int main (void)
{
Infor();
EMP();
HL();
CX();
PX();
return 0;
}
最后一步好像用冒泡法排序不行,求高手!!!!