C语言习题一:学生信息(结构体)成绩排序

习题:初始化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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值