题目描述
设计一个结构体类型,包含姓名、出生日期。其中出生日期又包含年、月、日三部分信息。输入n个好友的信息,输出年龄最小的好友的姓名和出生日期。
输入
首先输入一个整数n(1<=n<=10),表示好友人数,然后输入n行,每行包含一个好友的信息:姓名(不超过8位)以及三个整数,分别表示出生日期的年月日。
输出
输出年龄最小的好友的姓名和出生日期,用空格隔开,出生日期的输出格式见输出样例。
样例输入
复制
3
Zhangling 1983 2 4
Wangliang 1983 12 11
Fangfang 1985 6 1
样例输出
复制
Fangfang 1985-06-01
代码
#include<stdio.h>
typedef struct
{
int year;
int mouth;
int day;
}birth;
typedef struct{
char name[20];
birth birthday;
}people[10];
people p;
int young(birth a,birth b){ //比较 年 月 日
if(a.year > b.year){
return 1;
}else if(a.year < b.year){
return -1;
}else
{
if(a.mouth > b.mouth){
return 1;
}else if(a.mouth < b.mouth){
return -1;
}else
{
if(a.day > b.mouth){
return 1;
}else if(a.mouth < b.mouth){
return -1;
}
else return 0;
}
}
}
int main()
{
int n;
int i=0;
int minyoung =0;
int count;
scanf("%d",&n);
count=n;
while(n--){
scanf("%s%d %d %d",p[i].name,&(p[i].birthday.year),&(p[i].birthday.mouth),&(p[i].birthday.day));
i++;
}
for(i=1;i<count;i++){
if(young(p[i].birthday,p[i-1].birthday)>0){
minyoung = i; // 获取 最小的 年月日的下标
}
}
printf("%s %d-%02d-%02d",p[minyoung].name,p[minyoung].birthday.year,p[minyoung].birthday.mouth,p[minyoung].birthday.day);
return 0;
}
问题一 : 补零
printf("%04d", 1);
结果是: 0001
%后面的 0 表示不够的位数补零,4是总位数
问题二 :比较年月日的大小
三个 if(){....} else{.....} 语句嵌套
问题三 : 结构体的设置
将三个整形变量放在一个结构体中是个明智选择,如果放在一个结构体中(我就试过了)比较年月日大小的时候无法操作(原谅我的能力不够,太笨就直说嘛!), 而将年月日结构体和姓名变量放在另一个结构体中就好操作了。
好吧!其实也是可以操作的,那就不需要比较年月日的函数young(); 了,也不需要结构体数组了(看的其他人的,看来小生还是太笨)。