【输入形式】
每次键盘读入最多不超过50个学生的学生信息:
第一行为学生人数;
后面每一行为空格隔开的学生学号、姓名、年龄,其中学号和年龄都是整数。
【输出形式】
分别以姓名顺序(从低到高)和年龄顺序(从低到高)将学生信息输出,每行输出一位学生的信息,其中学号占3位,姓名(英文)占6位,年龄占3位,均为右对齐。年龄相同时按姓名从低到高排序。两种顺序的输出结果用一行空行相隔。
【输入样例】
4 1 aaa 22 45 bbb 23 54 ddd 20 110 ccc 19
【输出样例】
1 aaa 22 45 bbb 23 110 ccc 19 54 ddd 20 110 ccc 19 54 ddd 20 1 aaa 22 45 bbb 23
【样例说明】
从键盘输入四个学生记录,分别按姓名和年龄排序并输出。
如题,直接上答案。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct student{
int num;
char name[10];
int year;
};
void xingming(struct student arr[50],int n){
int i,j;
int t=0;
struct student ma;
for(i=0;i<n-1;i++){
for(j=0;j<n-i-1;j++){
t=strcmp(arr[j].name,arr[j+1].name);
if(t>0){
ma=arr[j];
arr[j]=arr[j+1];
arr[j+1]=ma;
}
}
}
for(j=0;j<n;j++){
printf("%3d",arr[j].num);
printf("%6s",arr[j].name);
printf("%3d",arr[j].year);
printf("\n");
}
}
void nianling(struct student arr[50],int n){
int i,j;
int t;
struct student ma;
for(i=0;i<n-1;i++){
for(j=0;j<n-i-1;j++){
if(arr[j].year>arr[j+1].year){
ma=arr[j];
arr[j]=arr[j+1];
arr[j+1]=ma;
}
else if(arr[j].year==arr[j+1].year){
t=strcmp(arr[j].name,arr[j+1].name);
if(t==1){
ma=arr[j];
arr[j]=arr[j+1];
arr[j+1]=ma;
}
}
}
}
for(j=0;j<n;j++){
printf("%3d",arr[j].num);
printf("%6s",arr[j].name);
printf("%3d",arr[j].year);
printf("\n");
}
}
int main(){
int n;
scanf("%d",&n);
int i,j;
struct student arr[50];
for(i=0;i<n;i++){
scanf("%d%s%d",&arr[i].num,&arr[i].name,&arr[i].year);
}
//以上为准备工作
xingming(arr,n);
printf("\n");
//以上为姓名排序
nianling(arr,n);
//以上为年龄排序
return 0;
}