题目描述
送人玫瑰手有余香,小明希望自己能带给他人快乐,于是小明在每个好友生日的时候发去一份生日祝福。小明希望将自己的通讯录按好友的生日排序排序,这样就查看起来方便多了,也避免错过好友的生日。为了小明的美好愿望,你帮帮他吧。小明的好友信息包含姓名、出生日期。其中出生日期又包含年、月、日三部分信息。输入n个好友的信息,按生日的月份和日期升序输出所有好友信息。
输入
首先输入一个整数n(1<=n<=10),表示好友人数,然后输入n行,每行包含一个好友的信息:姓名(不超过8位),以及三个整数,分别表示出生日期的年月日。
输出
按过生日的先后(月份和日期)输出所有好友的姓名和出生日期,用空格隔开,出生日期的输出格式见输出样例。
样例输入
3 Zhangling 1985 2 4 Wangliang 1985 12 11 Fangfang 1983 6 1
样例输出
Zhangling 1985-02-04 Fangfang 1983-06-01 Wangliang 1985-12-11
PS : 我学结构体写的的第一道题
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 #define N 10 5 int cmp( const void *a ,const void *b); 6 typedef struct student 7 { 8 char name[10]; 9 int year; 10 int month; 11 int day; 12 } str; 13 int main () 14 { 15 str a[N]; 16 int n, i; 17 scanf("%d", &n); 18 for (i = 0; i<n; i++) 19 { 20 scanf("%s", a[i].name); 21 scanf("%d", &a[i].year); 22 scanf("%d", &a[i].month); 23 scanf("%d", &a[i].day); 24 } 25 qsort(a, n, sizeof(a[0]), cmp); 26 for (i = 0; i<n; i++) 27 { 28 printf("%s ", a[i].name); 29 printf("%d-", a[i].year); 30 if (a[i].month<10) 31 printf("0"); 32 printf("%d-", a[i].month); 33 if (a[i].day<10) 34 printf("0"); 35 printf("%d ", a[i].day); 36 } 37 } 38 int cmp( const void *a ,const void *b) 39 { 40 struct student *c, *d; 41 c=(struct student *)a; 42 d=(struct student *)b; 43 if(d->month!=c->month) 44 return c->month - d->month; 45 else 46 return c->day - d->day; 47 }