研究生招生考试分初试和复试,每个研究生记录其考号和姓名,初试考政治(100)、英语(100)、数学(150)、专业课(150),复试分笔试(80)和面试(120),总成绩由初试成绩和复试成绩构成,其中初试成绩占50%,复试成绩占50%。
请设计一个结构体类型来描述上述信息,并计算每个考生的初试成绩、复试成绩和总成绩并按总成绩从大到小输出。
注意:这是一个结构体数组,并且要求排序。
下面是代码展示:
#include<stdio.h>
int main()
{
//定义结构体
struct grade{
int no; //学号
char name[10]; //名字,注意汉字要申请字符串数组
int pol; //政治
int eng; //英语
int math; //数学
int pro; //专业
int pen; //笔试
int face; //面试
int one; //初试
int two; //复试
float all; //总分
};
struct grade std[10]; //定义一个结构体变量std
int n, i = 0;
scanf("%d",&n);
for(i = 0; i< n; i++) //输入数据
{
scanf("%d %s %d %d %d %d %d %d",&std[i].no,&std[i].name,&std[i].pol,&std[i].eng,&std[i].math,&std[i].pro,&std[i].pen,&std[i].face);
}
printf("考号--- 姓名---- 政治 英语 数学 专业 笔试 面试 初试 复试 总分-");
//计算初试、复试和总成绩
for(i = 0; i< n; i++)
{
std[i].one = std[i].pol+std[i].eng+std[i].math+std[i].pro;
std[i].two = std[i].pen+std[i].face;
std[i].all = (std[i].one + std[i].two)/2;
}
//排序,注意要定义一个grade型的交换变量
int j = 0;
struct grade tmp = {0};;
for (i=0;i<n-1;i++)
{
for (j=0;j<n-1-i;j++)
{
if (std[j].all < std[j+1].all)
{
tmp = std[j];
std[j] = std[j+1];
std[j+1] = tmp;
}
}
}
//输出
for(i = 0; i< n; i++)
{
printf("\n%-7d %-8s %4d %4d %4d %4d %4d %4d %4d %4d %5.1f",std[i].no, std[i].name, std[i].pol, std[i].eng, std[i].math, std[i].pro, std[i].pen, std[i].face, std[i].one, std[i].two, std[i].all);
}
return 0;
}
![](https://i-blog.csdnimg.cn/blog_migrate/3936ace69b821ef1ba06e1cf19bf5e57.png)