有一串打乱的成绩,现要求你把他们从低到高排列。

有一串打乱的成绩,现要求你把他们从低到高排列。
输入
每一行为姓名和成绩
以#作为输入结束标志
输出
输出排序后的结果
样例输入
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;
}
}
}
}
posted @   xuchaoxin1375  阅读(7)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示