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

某单位招考公务员,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、程序运行结果按下图所示格式输出。

第1个回答  推荐于2016-03-05
#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;
}本回答被提问者采纳
第2个回答  2013-03-07
你太懒了,一点都不想吗?

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

认真一点,肯定能做出来,加油!追问

不是懒哦 是结构体这章没听懂今天上机课有事没去,老师叫我回家做明天要交

追答

好的哦,没事结构体不难的,慢慢来!come on!

相似回答