学生记录(结构体,排序)

【问题描述】 从键盘中读入最多不超过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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值