额,按照LZ的要求,我自己写了个,不过在最后的排名并没有加入姓名,个人感觉你自己加入姓名,在排序后会更形象些。
#include<stdio.h>
#define NUM 10
struct information
{
int number; //学号
char name[NUM]; //姓名
float chinese; //语文
float math; //数学
float english; //英语
float allstore; //总分
};
int main()
{
struct information a[NUM];
int students=3; //学生人数
int i,j;
float temp;
float b[NUM];
for(i=1;i<=students;i++)
{
printf("请输入第 %d 个学生的信息:\n",i);
printf("姓名:");
scanf("%s",&a[i-1].name);
printf("学号:");
scanf("%d",&a[i-1].number);
printf("语文:");
scanf("%f",&a[i-1].chinese);
a[i-1].allstore+=a[i-1].chinese;
printf("数学:");
scanf("%f",&a[i-1].math);
a[i-1].allstore+=a[i-1].math;
printf("英语:");
scanf("%f",&a[i-1].english);
a[i-1].allstore+=a[i-1].english;
printf("\n");
system("PAUSE");
system("CLS");
}
printf(" %d 个学生的成绩已经输入完毕!",students);
system("PAUSE");
system("CLS");
for(i=0;i<students;i++) //把结构体中的总成绩传到数组中,供排序使用
{
b[i]=a[i].allstore;
}
for(i=0;i<students;i++) //按照总成绩 排列大小
{
for(j=0;j<students-i;j++)
{
if(b[j]>b[j+1])
{
temp=b[j],b[j]=b[j+1],b[j+1]=temp;
}
}
}
printf("总成绩排名:\n");
printf("\n");
for(i=0;i<students;i++)
{
printf("第%d名: %.2f",i+1,b[students-i]); //按照从大到小排名输出
printf("\n");
}
}//
经过测试已经成功运行!
[此贴子已经被作者于2015-12-4 18:43编辑过]