编写一程序,统计N个学生的成绩信息。
要求:
1. 学生信息包括名次、学号、姓名、三门功课成绩(数学、英语、计算机)。
2. 能按总分,数学成绩,英语成绩,计算机成绩分别排序。
3. 能分别统计数学,英语,计算机中不及格人数。
4. 能按学号查找学生,并显示该学生信息。
注
1. 排序由自定义函数实现
2. 用结构体数组作函数参数
#include<stdio.h>
#include<stdlib.h>
#define sm 50
struct Stu
{
int mc;
int number;
char name[10];
double math;
double English;
double computer;
};
void px(struct Stu [],int);
void census(struct Stu [],int);
void found(struct Stu [],int);
int main(int argc,char * argv[])
{
int n,i;
struct Stu stud[sm];
printf("请输入学生人数:\n");
scanf("%d",&n);
printf("请输入每个学生的信息:\n");
for(i=0;i<n;i++)
{
printf("第%d个学生:\n",i+1);
stud[i].mc=i+1;
printf("输入学号:");
scanf("%d",&stud[i].number);
printf("输入姓名:");
scanf("%s",stud[i].name);
printf("输入数学成绩:");
scanf("%lf",&stud[i].math);
printf("输入英语成绩:");
scanf("%lf",&stud[i].English);
printf("输入计算机成绩:");
scanf("%lf",&stud[i].computer);
printf("\n");
}
px(stud,n);
census(stud,n);
found(stud,n);
system("pause");
return 0;
}
void px(struct Stu a[],int n)
{
int i,j,temporary,mpm[sm],epm[sm],cpm[sm];
double zf[sm];
for(i=0;i<n;i++)
{
mpm[i]=i+1;
epm[i]=i+1;
cpm[i]=i+1;
}
for(i=0;i<n;i++)
{
zf[i]=a[i].math+a[i].English+a[i].computer;
}
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(zf[i]<zf[j])
{
temporary=a[j].mc;
a[j].mc=a[i].mc;
a[i].mc=temporary;
}
}
}
printf("\n根据总分情况排名如下:\n");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(a[i].mc==j+1)
{
printf("第%d:\n",i+1);
printf("名字:%s 学号:%d\n",a[j].name,a[j].number);
printf("数学:%lf 英语:%lf 计算机:%lf\n",a[j].math,a[j].English,a[j].computer);
break;
}
}
}
printf("根据数学情况排名如下:\n");
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(a[i].math<a[j].math)
{
temporary=mpm[j];
mpm[j]=mpm[i];
mpm[i]=temporary;
}
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(mpm[i]==j+1)
{
printf("第%d:\n",i+1);
printf("名字:%s 学号:%d\n",a[j].name,a[j].number);
printf("数学:%lf 英语:%lf 计算机:%lf\n",a[j].math,a[j].English,a[j].computer);
break;
}
}
}
printf("根据英语情况排名如下:\n");
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(a[i].English<a[j].English)
{
temporary=epm[j];
epm[j]=epm[i];
epm[i]=temporary;
}
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(epm[i]==j+1)
{
printf("第%d:\n",i+1);
printf("名字:%s 学号:%d\n",a[j].name,a[j].number);
printf("数学:%lf 英语:%lf 计算机:%lf\n",a[j].math,a[j].English,a[j].computer);
break;
}
}
}
printf("根据计算机情况排名如下:\n");
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(a[i].computer<a[j].computer)
{
temporary=cpm[j];
cpm[j]=cpm[i];
cpm[i]=temporary;
}
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(cpm[i]==j+1)
{
printf("第%d:\n",i+1);
printf("名字:%s 学号:%d\n",a[j].name,a[j].number);
printf("数学:%lf 英语:%lf 计算机:%lf\n",a[j].math,a[j].English,a[j].computer);
break;
}
}
}
}
void census(struct Stu a[],int n)
{
int i,count=0;
printf("\n数学中不及格的人数有:\n");
for(i=0;i<n;i++)
{
if(a[i].math<60)
{
count++;
printf("学号:%d 姓名:%s 数学:%lf\n",a[i].number,a[i].name,a[i].math);
}
}
printf("共有%d人\n\n",count);
count=0;
printf("英语中不及格的人数有:\n");
for(i=0;i<n;i++)
{
if(a[i].English<60)
{
count++;
printf("学号:%d 姓名:%s 英语:%lf\n",a[i].number,a[i].name,a[i].English);
}
}
printf("共有%d人\n\n",count);
count=0;
printf("计算机中不及格的人数有:\n");
for(i=0;i<n;i++)
{
if(a[i].computer<60)
{
count++;
printf("学号:%d 姓名:%s 计算机:%lf\n",a[i].number,a[i].name,a[i].computer);
}
}
printf("共有%d人\n\n",count);
count=0;
}
void found(struct Stu a[],int n)
{
int i,c;
printf("请输入你要查找的学号:\n");
scanf("%d",&c);
for(i=0;i<n;i++)
{
if(c==a[i].number)
{
printf("姓名:%s 学号:%d\n",a[i].name,a[i].number);
printf("数学:%lf 英语:%lf 计算机:%lf\n",a[i].math,a[i].English,a[i].computer);
}
}
}
好的,谢大神
嗯,好的,发过来吧
追答这个没有用到结构体,且只能按总分排名