1193: 单科成绩排序(结构体专题)

题目描述

有一学生成绩表,包括学号、姓名、3门课程成绩。请按要求排序输出:若输入1,则按第1门课成绩降序输出成绩表,若输入为i(1<=i<=3),则按第i门课成绩降序输出成绩表。

输入

首先输入一个整数n(1<=n<=100),表示学生人数; 
然后输入n行,每行包含一个学生的信息:学号(12位)、姓名(不含空格且不超过20位),以及3个整数,表示3门课成绩,数据之间用空格隔开。 
最后一行输入一个整数i,表示要求按第i门课成绩降序排序输出,若该门课成绩相同,则按学号升序。

输出

输出按第i门课降序排序的结果,格式见样例。

样例输入

3
541207010188 Zhangling 89 78 95
541207010189 Wangli 85 87 99
541207010190 Fangfang 85 68 76
1

样例输出

541207010188 Zhangling 89 78 95
541207010189 Wangli 85 87 99
541207010190 Fangfang 85 68 76
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct student
{
	char ID[20];
	char name[20];
	int s[4];
}stud;
int main(void)
{
	int n, i, j, k, h;
	stud stu[110], ch;
	scanf("%d", &n);
	for(i = 0; i < n; i++)
	{
	    scanf("%s ", stu[i].ID);
		scanf("%s ", stu[i].name);
		for(j = 0; j < 3; j++)
		{
		    scanf("%d", &stu[i].s[j]);	
		}	
	}
	scanf("%d", &k);
	k = k-1;
	for(i = 0; i < n; i++)
	{
		for(j = (i+1); j < n; j++)
		{
			if(stu[i].s[k] < stu[j].s[k])
			{
				ch = stu[i];
				stu[i] = stu[j];
				stu[j] = ch;
			}
			if(stu[i].s[k] == stu[j].s[k])
			{
				if(strcmp(stu[i].ID, stu[j].ID) > 0)
				{
					ch = stu[i];
				    stu[i] = stu[j];
				    stu[j] = ch;
				}
			}
		}
	}
	for(i = 0; i < n; i++)
	{
		printf("%s ", stu[i].ID);
		printf("%s ", stu[i].name);
		printf("%d %d %d", stu[i].s[0], stu[i].s[1], stu[i].s[2]);
		printf("\n");
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/zzuli_xiaomingke/article/details/79271646