sadliu


私信TA

用户名:dotcpp0628815

访问量:112

签 名:

清醒 自律 知进退 明得失

等  级
排  名 3888
经  验 1476
参赛次数 0
文章发表 15
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

舞台再大,你不上台,永远是个观众;平台再好,你不参与,永远是个局外人。能力再大,你不行动,只能看着别人成功!

题目描述:

有N个学生的数据,将学生数据按成绩从低到高排序,如果成绩相同则按姓名字符的字母序依次排序,如果姓名的字母序也相同则按照学生的年龄从小到大排序,并输出N个学生排序后的信息。


输入格式:

测试数据有多组,每组输入第一行有一个整数N(N<=1000),接下来的N行包括N个学生的数据。
每个学生的数据包括姓名(长度不超过100的字符串)、年龄(整形数)、成绩(小于等于100的正数)。


输出格式:

将学生信息按成绩进行排序,成绩相同的则按姓名的字母序进行排序。
然后输出学生信息,按照如下格式:
姓名 年龄 成绩


样例输入:

3
zhao 19 90
qian 20 90
sun 19 100


样例输出:

qian 20 90
zhao 19 90
sun 19 100



代码实现:

#include <stdio.h>
#include <string.h>

typedef struct student
{
	char name[100];
	int age;
	int score;
} studInfo;

void main()
{
	studInfo arr[1000];
	studInfo temp;//需要用到交换,就定义一个这种类型的变量,这是没想到的 
	int i, j, n;
	while(~scanf("%d", &n))//题干中出现多组数据 
	{
		for(i = 0; i < n; i++)
		{
			scanf("%s%d%d", &arr[i].name, &arr[i].age, &arr[i].score);
		}
		for(i = 0; i < n-1; i++)//冒泡排序法 
		{
			for(j = 0; j < n-1-i; j++)
			{
				if(arr[j].score > arr[j+1].score)
				{
					temp = arr[j];
					arr[j] = arr[j+1];
					arr[j+1] = temp;
				}
				else if(arr[j].score == arr[j+1].score)
				{
					if(strcmp(arr[j].name,arr[j+1].name) > 0)
					{
						temp = arr[j];
						arr[j] = arr[j+1];
						arr[j+1] = temp;
					}
					else if(strcmp(arr[j].name,arr[j+1].name) == 0)
					{
						if(arr[j].age > arr[j+1].age)
						{
							temp = arr[j];
							arr[j] = arr[j+1];
							arr[j+1] = temp;
						}
					}
				}
			}
		}
	}
	for(i = 0; i < n; i++)
	{
		printf("%s %d %d\n", arr[i].name, arr[i].age, arr[i].score);
	}
}

/*strcmp(str1,str2)比较函数需要头文件string.h,左大于右,则返回值大于0
左小于右返回值小于0,相等则返回0

需要交换结构体中的数据,就定义那种类型的一个变量,然后进行交换操作
*/


 

0.0分

0 人评分

  评论区