一、问题情景
从键盘中输入一个班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);
}