以前写过类似的,结构体,
#include <stdio.h>
#include <malloc.h>
struct student
{
int age;
float score;
char name[100];
};
void Inputscore(struct student * p2,int len)
{
int i;
for(i=0;i<len;++i)
{
printf("请输入第%d个学生的姓名:",i+1);
scanf("%s",p2[i].name);
printf("请输入第%d个学生的年龄:",i+1);
scanf("%d",&(p2[i].age));
printf("请输入第%d个学生的分数:",i+1);
scanf("%f",&(p2[i].score));
}
}
void Outscore(struct student * p3,int len)
{
int i;
for(i=0;i<len;++i)
{
printf("第%d名学生的姓名:",i+1);
printf("%s\n",p3[i].name);
printf("第%d名学生的年龄:",i+1);
printf("%d\n",p3[i].age);
printf("第%d名学生的分数:",i+1);
printf("%.1f\n",p3[i].score);
}
}
void Paixu(struct student * p4,int len)
{
int i,j;
for (i=0;i<len;++i)
{
for (j=0;j<len-1;++j)
{
if(p4[j].score<p4[j+1].score)
{
struct student text;
text =p4[j+1];
p4[j+1]=p4[j];
p4[j]=text;
}
}
}
}
void main()
{
int len;
printf("请输入学生人数:");
scanf("%d",&len);
struct student * p1;
p1=(struct student *)malloc(len*sizeof(struct student));
Inputscore(p1,len);
printf("学生信息如下:\n-----------------------\n");
Outscore(p1,len);
printf("\n-----------------------\n成绩排名为:\n");
Paixu(p1,len);
Outscore(p1,len);
}
/*
在VC6.0的结果是:
----------------------------------
请输入学生人数:4
请输入第1个学生的姓名:q
请输入第1个学生的年龄:11
请输入第1个学生的分数:60
请输入第2个学生的姓名:a
请输入第2个学生的年龄:13
请输入第2个学生的分数:70
请输入第3个学生的姓名:b
请输入第3个学生的年龄:13
请输入第3个学生的分数:89
请输入第4个学生的姓名:c
请输入第4个学生的年龄:14
请输入第4个学生的分数:96
学生信息如下:
-----------------------
第1名学生的姓名:q
第1名学生的年龄:11
第1名学生的分数:60.0
第2名学生的姓名:a
第2名学生的年龄:13
第2名学生的分数:70.0
第3名学生的姓名:b
第3名学生的年龄:13
第3名学生的分数:89.0
第4名学生的姓名:c
第4名学生的年龄:14
第4名学生的分数:96.0
-----------------------
成绩排名为:
第1名学生的姓名:c
第1名学生的年龄:14
第1名学生的分数:96.0
第2名学生的姓名:b
第2名学生的年龄:13
第2名学生的分数:89.0
第3名学生的姓名:a
第3名学生的年龄:13
第3名学生的分数:70.0
第4名学生的姓名:q
第4名学生的年龄:11
第4名学生的分数:60.0
----------------------------------
*/