习题:初始化10名学生的基本信息,包括:学号、姓名、三科成绩(高数、英语、程序设计),计算10名学生总分,按总分对学生进行排序,按排序结果输出学生信息。
#include<stdio.h>
#include<string.h>
//定义学生信息结构体
struct student
{
char number[20];
char name[20];
struct
{
int math;//数学成绩
int english;//英语成绩
int computer;//程序设计成绩
int sumscore;//总分
}grade;
};
int main()
{
struct student stu[10];//定义学生信息结构体数组
int i,j;
for(i=0;i<10;i++)
{
scanf("%s %s %d %d %d",stu[i].number,stu[i].name,&stu[i].grade.math,&stu[i].grade.english,&stu[i].grade.computer);//输入学生信息
stu[i].grade.sumscore=stu[i].grade.math+stu[i].grade.english+stu[i].grade.computer;
}
struct student temp;
//通过顺序排序将学生信息按总分排序
for(i=0;i<10;i++)
{
for(j=i;j<10;j++)
{
if(stu[i].grade.sumscore<stu[j].grade.sumscore)
{
//实际写的过程中,发现strcpy函数可以实现字符串的位置转换,而'='不可以
strcpy(temp.number,stu[i].number);
strcpy(stu[i].number,stu[j].number);
strcpy(stu[j].number,temp.number);
//同上,对姓名做位置交换
strcpy(temp.name,stu[i].name);
strcpy(stu[i].name,stu[j].name);
strcpy(stu[j].name,temp.name);
temp.grade.sumscore=stu[i].grade.sumscore;
stu[i].grade.sumscore=stu[j].grade.sumscore;
stu[j].grade.sumscore=temp.grade.sumscore;
}
}
}
printf("\n排序如下:\n");
//输出学生信息及总分
for(i=0;i<10;i++)
printf("%s %s %d\n",stu[i].number,stu[i].name,stu[i].grade.sumscore);
return 0;
}