排序后的学生成绩单

简介: 排序后的学生成绩单。

一、问题情景
从键盘中输入一个班40个学生的学号、姓名及数学、英语、语文三门课的成绩,按三门课总分的高低进行排序,输出排序后的成绩单(每条记录包含姓名、数学、英语、语文、总分、平均分的信息)。
分析:
(1)首先要定义一个能存放40个学生学号、姓名、数学、英语、语文、总分、平均分的结构体数组;
(2)然后从键盘上输入40个同学的学号、姓名、数学、英语、语文信息;
(3)第三求每个同学的总分、平均分;
(4)接下来就是求对总分进行排序;
(5)最后输出排序后的成绩单。
其中(1)、(2)、(5)在任务1中已学过,现在本题主要是想解决如何在结构体数组中进行(3)、(4),即对每个同学求总分、平均分,然后进行排序。

include "stdio.h"

define N 5/ 假设只有5个同学/

main()
{struct
{char id[6],name[10];
int m1,m2,m3;
float sum,avg;}stu1[N],t;
int i,j;
printf("请输入学生的信息\n");
for(i=0;i<N;i++)
scanf("%s%s%d%d%d",stu1[i].id,stu1[i].name,&stu1[i].m1,&stu1[i].m2,&stu1[i].m3);
for(i=0;i<N;i++)
{stu1[i].sum=stu1[i].m1+stu1[i].m2+stu1[i].m3;
stu1[i].avg=stu1[i].sum/3.0;}
for(i=0;i<N-1;i++)
for(j=0;j<N-1-i;j++)
if(stu1[j].sum<stu1[j+1].sum)
{t=stu1[j];stu1[j]=stu1[j+1];stu1[j+1]=t;}
printf("排序后的成绩单为:\n");
printf("学号\t姓名\t数学\t语文\t英语\t总分\t平均分\n");
for(i=0;i<N;i++)
printf("%s\t%s\t%d\t%d\t%d\t%.1f\t%.1f\n",stu1[i].id,stu1[i].name,stu1[i].m1,
stu1[i].m2,stu1[i].m3,stu1[i].sum,stu1[i].avg);
}

相关文章
|
11天前
|
存储 算法 搜索推荐
15.百万考生成绩如何排序?计数排序给你好看
15.百万考生成绩如何排序?计数排序给你好看
33 0
15.百万考生成绩如何排序?计数排序给你好看
|
5天前
1004 成绩排名
1004 成绩排名
10 0
|
11天前
|
存储 算法 搜索推荐
百万考生分数如何排序 - 计数排序
百万考生分数如何排序 - 计数排序
30 0
|
11天前
计蒜客_成绩排序
计蒜客_成绩排序
|
10月前
1178:成绩排序
1178:成绩排序
|
9月前
|
Java
牛牛的排序子序列问题
牛牛的排序子序列问题
|
9月前
松鼠排序(并查集)
松鼠排序(并查集)
31 0
成绩排序 给出班里某门课程的成绩单,请你按成绩从高到低对成绩单排序输出,如果有相同分数则名字字典序小的在前。
成绩排序 给出班里某门课程的成绩单,请你按成绩从高到低对成绩单排序输出,如果有相同分数则名字字典序小的在前。
443 0
|
11月前
“希尔”排序
“希尔”排序