结构体数组,定义第一个函数时候就有错误,有好多错。。。
觉得写的好乱,写到后面都快写哭了,实在写不下去了,磨叽快一天了。。。成绩排名次(学了结构体数组,没学过指针)
某班期末考试科目为数学 (MT) 、 英语 (EN)和物理(PH) ,有最多不超过 30 人参加考试, 学号可以用输入的序号代替。考试后要求:1)计算每个学生的总分和平均分;(2)按总分成绩由高到低排出成绩的名次;(3)打印出名次表,表格内包括学生编号、各科分数、 总分和平均分;(4)任意输入一个学号, 能够查找出该学生在班级中的排名及其考试分数。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct grade
{
int num;
double MT,EN,PH;
double sum;
double ave;
};
/*功能:输入学生的学号及三门成绩;
参数:定义结构体数组stu[],n代表学生人数
无返回值*/
void input(grade stu[],int n)
{
int i;
for(i=0;i<n;++i)
{
scanf("%d",&stu[i].num);
scanf("%lf",&stu[i].MT,&stu[i].EN,&stu[i].PH);
}
}
/*功能:计算学生的总分及均分
参数:结构体数组stu[],sum总分,Ave均分
*/
void getsa(grade stu[],int n)
{
int i;
for(i=0;i<n;++i)
{
stu[i].sum=stu[i].MT+stu[i].EN+stu[i].PH;
stu[i].ave=stu[i].sum/3;
}
}
/*功能:按总分的成绩由高到低排列序号
参数:结构体数组stu[],n为学生人数
*/
void sort(grade stu[],int n)
{
int i,j,k,why;
for(i=0;i<n-1;++i)
{
for(j=1;j<n;++j)
{
k=i;
if(stu[k].sum<stu[j].sum)
{
j=k;
}
if(k!=i)
{
why=stu[i];
stu[i]=stu[k];
stu[k]=why;
}
}
}
}
/*功能:打印出名次表,包括学号,三门成绩,总分及均分
参数:结构体数组stu[],n为学生人数。
*/
void line(grade stu[],int n)
{
int i;
printf("学号 MT EN PH sum ave");
for(i=0;i<n;++i)
{
printf("%d",&stu[i].num);
printf("%.2lf%.2lf%.2lf",&stu[i].MT,&stu[i].EN,&stu[i].PH);
printf("%.2lf",&stu[i].sum);
printf("%.2lf",&stu[i].ave);
}
}
/*功能:输入一个学生的学号,能找出这个人的信息
参数:结构体数组stu[],n代表学生人数,x表示学号
*/
int search(grade stu[],int n,int x)
{
int i;
for(i=0;i<n;++i)
{
if(stu[i]==x)
return i;
}
return -1;
}
int main()
{
int n,number,x;
grade stu[30];
printf("输入参加考试的学生人数:");/*输入考试人数*/
scanf("%d",&n);
printf("输入学号和学生成绩MT,EG,MT:");/*输入学生学号及成绩*/
input(stu,n);
getsa(stu,n);/*计算总分及均分*/
printf("");
sort(stu,n);/*排名次*/
/*就是那些函数吧,我不知道怎么办了。。。。。这里写的想哭。。。*/
printf("请输入你要查询的学号;");/*输入学号查信息*/
scanf("%d",&x);
number=search(stu,n,x);
if(number!=-1)
{
printf("num\t MT\t EG\t PH\t sum\t ave\t\n");
printf("%d%lf%lf%lf%lf%lf",1+number,stu[number].MT,stu[number].PH,stu[number].sum,stu[number].ave);
}
system("pause");
return 0;
}