C语言编程题,请帮帮忙。

题目如下学生成绩单制作1)定义一个结构体数组,存放10个学生的学号,姓名,三门课的成绩2)从键盘输入10个学生的以上内容3)输出单门课成绩最高的学生的学号、姓名、以及该门... 题目如下
学生成绩单制作
1) 定义一个结构体数组,存放10个学生的学号,姓名,三门课的成绩
2) 从键盘输入10个学生的以上内容
3) 输出单门课成绩最高的学生的学号、姓名、以及该门课程的成绩
4) 输出三门课程的平均分数最高的学生的学号、姓名及其平均分
5) 将10个学生按照平均分数从高到低进行排序,输出结果,格式如下所示:
number name math Chinese English average
103 tom 90 90 100 95
101 alice 90 80 70 80
展开
 我来答
tidecao2006
2011-07-02 · TA获得超过1229个赞
知道小有建树答主
回答量:842
采纳率:0%
帮助的人:802万
展开全部
#include <stdio.h>
#include <stdlib.h>
#define STU_NUM 10 //学生数量
#define COURSE_NUM 3 //课程数量

struct stu
{
char id[10];
char name[10];
int score[COURSE_NUM];
float ave;
};

char course_name[COURSE_NUM][20] = {"math", "Chinese", "English"};

int compare(const void * a, const void * b)
{
return ((struct stu*)a)->ave > ((struct stu *)b)->ave;
}

void print_score(struct stu * student, int num) //打印成绩
{
int i, j;

printf("\n\nnumber\tname\tmath\tChinese\tEnglish\taverage\n");
for (i = 0; i < num; i++)
{
printf("%s\t%s", student[i].id, student[i].name);
for (j = 0; j < COURSE_NUM; j++)
printf("\t%d", student[i].score[j]);
printf("\t%.2f\n", student[i].ave);
}
}

void main()
{
struct stu student[STU_NUM];
int i, j;
float sum;
int tmp;

printf("Please input the info of %d student: \n", STU_NUM);
for (i = 0; i < STU_NUM; i++)
{
scanf("%s %s", student[i].id, student[i].name);
sum = 0;
for (j = 0; j < COURSE_NUM; j++)
{
scanf("%d", &student[i].score[j]);
sum += student[i].score[j];
}
student[i].ave = sum / COURSE_NUM;
}

print_score(student, STU_NUM);

for (i = 0; i < COURSE_NUM; i++)
{
printf("\n\nHighest score of %s: \n", course_name[i]);
tmp = 0;
for (j = 1; j < STU_NUM; j++)
if (student[tmp].score[i] < student[j].score[i])
tmp = j;
tmp = student[tmp].score[i];
for (j = 0; j < STU_NUM; j++) //可能有多个最高分
if (student[j].score[i] == tmp)
printf("%s\t%s\t%s: %d\n", student[j].id, student[j].name, course_name[i], student[j].score[i]);
}

tmp = 0;
for (i = 1; i < STU_NUM; i++)
if (student[i].ave > student[tmp].ave)
tmp = i;
printf("\n\nHighest average score:\n %s\t%s\t%.2f", student[tmp].id, student[tmp].name, student[tmp].ave);

qsort(student, STU_NUM, sizeof(struct stu), compare); //快速排序
print_score(student, STU_NUM);

}
匿名用户
2011-07-02
展开全部
定义一个结构体数组struct Stu{char num[5];char name[10];float sub[3];float ave;};struct Stu student[10];定义一个函数void Ave(struct Stu student){float sum[10];for(int i=0;i<10;i++){sum=student[i]->sub[0]+student[i]->sub[1]+student[i]->sub[2];student[i].ave=(float)(sum/3);}
格式化输出printf("\t\tnumber\tname\tmath\tChinese\tEnglish\taverage\n");for(int i=0;i<10;i++)printf("\t\t%6s\t%4s\t%4d\t%7d\t%7d\t%7d\n\t\t\t\t");我没调试,不知效果咋样,不过是这么做的。还有,这题太简单,可以改一下去掉固定的十个人而且这题是十分基础!可以用文件输入……
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式