我是靠谱客的博主 土豪绿茶,最近开发中收集的这篇文章主要介绍学生成绩排序,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

    大家参加了期末考试,成绩出来后老师要对 n 个学生进行成绩汇总和排序。要求程序按成绩降序进行排序。在排序过程中对于成绩相同的学生,要按照输入数据的顺序进行排列。例如:有5名学生的成绩:
zhang1,90
zhang2,91
zhang3,99
zhang4,91
zhang5,98

则排序结果应该为:
zhang3,99
zhang5,98
zhang2,91
zhang4,91
zhang1,90

请注意例题中“zhang2”和“zhang4”的排列顺序。

输入:
    第一行为将要输入的学生数量n
    从第二行起后面连续 n 行数据,每行为一名学生的姓名(长度不超过20个字符,不包括空格),考试成绩(int)

输出:
    排序后的结果。每行为一名学生的姓名和成绩。

测试输入期待的输出时间限制内存限制额外进程
测试用例 1以文本方式显示
  1. 5↵
  2. zhang1,90↵
  3. zhang2,91↵
  4. zhang3,99↵
  5. zhang4,91↵
  6. zhang5,98↵
以文本方式显示
  1. zhang3,99↵
  2. zhang5,98↵
  3. zhang2,91↵
  4. zhang4,91↵
  5. zhang1,90↵
1秒64M0
测试用例 2以文本方式显示
  1. 5↵
  2. zhang31,90↵
  3. zhang51,90↵
  4. zhang2,90↵
  5. zhang42,90↵
  6. zhang1,90↵
以文本方式显示
  1. zhang31,90↵
  2. zhang51,90↵
  3. zhang2,90↵
  4. zhang42,90↵
  5. zhang1,90↵
1秒64M0
测试用例 3以文本方式显示
  1. 1↵
  2. wang,100↵
以文本方式显示
  1. wang,100↵
1秒64M0

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

char swap(char *a, char *b, char *c) {
	int i, l1 = strlen(a), l2 = strlen(b);
	for (i = 0; i < l1; i++)
		c[i] = a[i];
	for (i = 0; i < l2; i++)
		a[i] = b[i];
	for (i = 0; i < l1; i++)
		b[i] = c[i];
	if (l1 < l2) {
		for (i = l1; i < l2; i++)
			b[i] = 0;
	}
	if (l1 > l2) {
		for (i = l2; i < l1; i++)
			a[i] = 0;
	}
}

int main() {
	int n, i, j, t, b[101] = {};
	char a[101][30] = {}, c[30] = {};
	scanf("%dn", &n);
	for (i = 1; i <= n; i++) {
		scanf("%[^,],%d", a[i], &b[i]);//以,为结束符,会读取回车,所以要用getchar读取回车
		getchar();
	}
	for (i = 1; i <= n - 1; i++) {
		for (j = 1; j <= n - 1; j++) {
			if (b[j] < b[j + 1]) {
				t = b[j], b[j] = b[j + 1];
				b[j + 1] = t;
				swap(a[j], a[j + 1], c);
			}
		}
	}
	for (i = 1; i <= n; i++)
		printf("%s,%dn", a[i], b[i]);
	return 0;
}

最后

以上就是土豪绿茶为你收集整理的学生成绩排序的全部内容,希望文章能够帮你解决学生成绩排序所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部