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);
}