C语言结构体编程题 求大神啊!

某单位招考公务员,8位入围考生的成绩情况如下表所示:准考证号0102030405060708笔试分数9295989693919296面试分数949095889294989... 某单位招考公务员,8位入围考生的成绩情况如下表所示:
准考证号 01 02 03 04 05 06 07 08
笔试分数 92 95 98 96 93 91 92 96
面试分数 94 90 95 88 92 94 98 90

请编写一个C程序实现如下功能:
1、按笔试分数占80%、面试分数占20%计算每位考生的总分并输出结果;
2、计算所有考生总分的平均值,并将总分高于平均值的考生按总分由高到低的顺序输出。
【要求】
1、本程序设计的数据结构定义如下:
struct student {
char *no; /* 存放考生的准考证号 */
int grade1; /* 存放笔试分数 */
int grade2; /* 存放面试分数 */
double grade; /* 存放总分 */
}
2、程序运行结果按下图所示格式输出。
展开
 我来答
pardream941026
推荐于2016-03-05 · TA获得超过8217个赞
知道大有可为答主
回答量:4602
采纳率:89%
帮助的人:1346万
展开全部
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//数据手工录入比较合理,这里为了方便,直接写在程序里了
struct student {
char *no;
int grade1;
int grade2;
double grade;
};
#define TOTAL_STUDENT 8
int cn[TOTAL_STUDENT] = {1,2,3,4,5,6,7,8};
int ps[TOTAL_STUDENT] = {92,95,98,96,93,91,92,96};
int fs[TOTAL_STUDENT] = {94,90,95,88,92,94,98,90};
main () {
struct student st[TOTAL_STUDENT],_st; //共8个数据
int i,j,flag;
double ave_s=0.0;
_st.no = (char*)malloc(2*sizeof(char));
//本for循环是为了读取数据
for (i=0;i<TOTAL_STUDENT;i++) {
st[i].no = (char*) malloc(2*sizeof(char));
sprintf(st[i].no,"%02d", cn[i]);
st[i].grade1 = ps[i];
st[i].grade2 = fs[i];
st[i].grade = (double)(st[i].grade1 + st[i].grade2)/2.0;
ave_s += st[i].grade;
}
ave_s /=TOTAL_STUDENT;
//输出结果
printf("考号\t笔试\t面试\t总分\n");
for (i=0;i<TOTAL_STUDENT;i++) {
printf("%s\t%d\t%d\t%4.2f\n",st[i].no, st[i].grade1,st[i].grade2, st[i].grade);
}
//为省事,使用冒泡法排序
for (i=0;i<TOTAL_STUDENT-1;i++) {
flag = 0;
for (j=i;j<TOTAL_STUDENT;j++) {
if (st[i].grade<st[j].grade) {
strncpy(_st.no, st[i].no,2);
_st.grade1 = st[i].grade1;
_st.grade2 = st[i].grade2;
_st.grade = st[i].grade;
strncpy(st[i].no, st[j].no,2);
st[i].grade1 = st[j].grade1;
st[i].grade2 = st[j].grade2;
st[i].grade = st[j].grade;
strncpy(st[j].no, _st.no,2);
st[j].grade1 = _st.grade1;
st[j].grade2 = _st.grade2;
st[j].grade = _st.grade;
flag = 1;
}
}
if (flag==0) break;
}
//输出结果:
printf("\n高于平均分%4.2f的考生:\n",ave_s);
for (i=0;i<TOTAL_STUDENT;i++) {
if (st[i].grade > ave_s)
printf("%s\t%d\t%d\t%4.2f\n",st[i].no, st[i].grade1,st[i].grade2, st[i].grade);
}
free(_st.no);
for (i=0;i<TOTAL_STUDENT;i++)
free(st[i].no);
return 0;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-03-07
展开全部
你太懒了,一点都不想吗?

定义student的一个变量数组S[8],分别存进去初始值,然后对每个考生,比如S[0].按照要求求总分,放在S[0].grade中。然后计算所有考生的平均成绩,分别比较,将低于平均成绩的考生,从数组S中删去。最后将S中的考生,按平均成绩高低进行排序。

认真一点,肯定能做出来,加油!
追问
不是懒哦 是结构体这章没听懂今天上机课有事没去,老师叫我回家做明天要交
追答
好的哦,没事结构体不难的,慢慢来!come on!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式