用C语言编写一程序,统计N个学生的成绩信息。

编写一程序,统计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);

}

}

}


追问

好的,谢大神

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-06-10
建议楼主参考 http://zhidao.baidu.com/question/314791834.html?oldq=1
这个问题我以前回答过N遍了,自己看看代码吧。有问题,可以qq联系。
第2个回答  2014-06-10
我这有类似的,你要不?追问

嗯,好的,发过来吧

追答

这个没有用到结构体,且只能按总分排名

相似回答