1.给出n个学生的考试成绩表,每条信息由姓名与分数组成,试设计一个算法:
(1)按分数高低次序,打印出每个学生在考试中获得的名次,分数相同的为同一名次。
(2)按名次列出每个学生的姓名与分数。
学生的考试成绩通过键盘输入数据建立。可采用直接选择排序、直接插入排序、Shell排序、冒泡排序、快速排序、归并排序等排序算法实现。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
typedef struct {char name[10];int score;
}student;void bubbleSort(student s[],int n) {//从高到低排int i = 0;int j = 0;for (i = 0;i < n;i++) {student tmp;//暂存成绩信息for (j =0;j < n-i-1;j++) {if (s[j+1].score > s[j].score) {//高到第排序tmp=s[j];s[j] = s[j+1];s[j+1] = tmp;}}}int num[5] = {1,1,1,1,1};//num[i]表示第i个同学的排名for (i = 1;i < 5;i++) {for (j = i - 1;j >=0;j--) {//看前面有几个分数比当前高的if (s[j].score > s[i].score) {num[i]++;}}}for (i = 0;i < 5;i++) {printf("学生%s 成绩%d 名次%d\n", s[i].name, s[i].score,num[i]);}
}int main() {student s[5];int i = 0;while (i < 5) {printf("请输入学生姓名及成绩:");scanf("%s", &s[i].name);scanf("%d", &s[i].score);i++;}//对学生信息进行排序bubbleSort(s,5);}