一.题目大概:
如表所示为一张学生成绩表,设计一个程序,能够根据学生的成绩进行降序排序,并打印出排序忽的结果。
学号 | 姓名 | 成绩 | 学号 | 姓名 | 成绩 |
1 | 王强 | 78 | 5 | 刘伟 | 90 |
2 | 李丽 | 65 | 6 | 张平 | 98 |
3 | 张宁 | 79 | 7 | 赵红 | 75 |
4 | 杨林 | 98 | 8 | 陆平 | 84 |
二.算法分析:
(1)按题目可知,有三种信息类别,分别为学号、姓名、成绩三种,并且每种都有多个数据,所以我们可以把这三类信息用数组实现。
(2)本题目是按成绩的降序进行排序,故需对每位同学的成绩进行比较,比较完后,再进行交换。这里我们需要设置三个中间变量,分别为字符数组temp、整形变量x、浮点型变量y。
(3)对于排序方式,我们可以利用选择排序进行排序——即选择一个数(通常为第一个数字),对除它以外的数进行比较,然后交换位置,之后依次往后选择数字。
三.代码实现:
#include<stdio.h>
#include<string.h>
int main()
{
char s[100][100];
int node[100];
float sorce[100];
char temp[100];
int x;
float y;
for(int i=0;i<8;i++)
{
scanf("%d",&node[i]);
scanf("%s",s[i]);
scanf("%f",&sorce[i]);
}
for(int i=0;i<8;i++)
for(int j=i+1;j<8;j++)
{
if(sorce[i]<sorce[j])
{
x=node[i];
node[i]=node[j];
node[j]=x;
strcpy(temp,s[i]);
strcpy(s[i],s[j]);
strcpy(s[j],temp);
y=sorce[i];
sorce[i]=sorce[j];
sorce[j]=y;
}
}
printf("\n学号 姓名 成绩\n");
for(int i=0;i<8;i++)
{
printf("%d %s %6.2f\n",node[i],s[i],sorce[i]);
}
}