有一串打乱的成绩,现要求你把他们从低到高排列。
输入
每一行为姓名和成绩
#作为输入结束标志
输出
输出排序后的结果

样例输入
LI 95
ZHAO 80
SUN 85
JIN 60
QIAN 70
WANG 90
ZHAN 85
#

样例输出
JIN 60
QIAN 70
ZHAO 80
SUN 85
ZHAN 85
WANG 90
LI 95
*/

#include <stdio.h>
#include <stdlib.h>
typedef struct Student{

char name[20];
float score;
} Student;

int input(Student *st); //定义输入函数
void print(Student *st, int n); //定义输出函数
void sort(Student *st, int n);

int main()
{

Student * stu; //定义结构体指针stu
int n;


stu = (Student *)malloc(1000 * sizeof(Student)); //为stu分配内存空间

while ((n = input(stu)) != -1)
{
sort(stu, n); //调用排序函数
print(stu, n); //调用输出函数

}
}

int input(Student *st)
{
int i;
for (i = 0;; i++)
{

if(scanf("%s", st[i].name) == EOF)
{
return -1;
}

/* 判断结束符这点,比较讲究,在读入数据时,
应该考虑分别使用(若干个)scanf来读入同一行得不同部分,可以比较灵活得判断 */
else if (st[i].name[0] != '#')
{
scanf("%f", &st[i].score);
}
else
{
break;
}
}
return i;//读入的items
}
//输出函数
void print(Student *st, int n)
{
Student *p;
for (p=st; p<st+n; printf("%s %.0f\n",p->name, p->score), p++);
}
//排序函数
void sort(Student *st, int n)
{
int i, j;
Student temp;

for(i = 0;i < n - 1;i++)
{
for(j = 0;j<=n-2-i;j++)
{
if(st[j].score > st[j+1].score)/* 或者j<n-1-i,这个容易错.(是否取等号.) */
{
temp = st[j];
st[j] = st[j+1];
st[j+1] = temp;
}
}
}
}