【问题描述】 从键盘中读入最多不超过50个学生的学生信息(包括空格隔开的姓名、学号、年龄信息,以学号从低到高排序)
【输入形式】 每次键盘读入最多不超过50个学生的学生信息: 第一行为学生人数; 后面每一行为空格隔开的学生学号、姓名、年龄,其中学号和年龄都是整数。
【输出形式】 分别以姓名顺序(从低到高)和年龄顺序(从低到高)将学生信息输出,每行输出一位学生的信息,其中学号占3位,姓名(英文)占6位,年龄占3位,均为右对齐。年龄相同时按姓名从低到高排序。两种顺序的输出结果用一行空行相隔。
#include<stdio.h>
#include<string.h>
#define LEN 7
struct stu
{
int num;
char name[LEN];
int age;
};
int main()
{
struct stu list[50],*p,*p0,tmp;
int n,i;
scanf("%d",&n);
for(i=0;i<n;i++) //???????
{
scanf("%d %s %d",&list[i].num,&list[i].name,&list[i].age);
list[i].name[LEN-1]='\0';
}
for(p=&list[0];p<&list[n];p++) //??????????
for(p0=p;p0<&list[n];p0++)
if(strcmp(p->name,p0->name)>0)
{
tmp=*p;
*p=*p0;
*p0=tmp;
}
for(i=0;i<n;i++)
printf("%3d%6s%3d\n",list[i].num,list[i].name,list[i].age);
printf("\n");
for(p=&list[0];p<&list[n];p++) //??????????????????
for(p0=p;p0<&list[n];p0++)
if(p->age>p0->age)
{
tmp=*p;
*p=*p0;
*p0=tmp;
}
for(i=0;i<n;i++)
printf("%3d%6s%3d\n",list[i].num,list[i].name,list[i].age);
return 0;
}