题目描述
设计一个结构体类型,包含姓名、出生日期。其中出生日期又包含年、月、日三部分信息。输入n个好友的信息,输出年龄最小的好友的姓名和出生日期。
输入
首先输入一个整数n(1<=n<=10),表示好友人数,然后输入n行,每行包含一个好友的信息:姓名(不超过8位)以及三个整数,分别表示出生日期的年月日。
输出
输出年龄最小的好友的姓名和出生日期,用空格隔开,出生日期的输出格式见输出样例。
样例输入 Copy
3 Zhangling 1983 2 4 Wangliang 1983 12 11 Fangfang 1985 6 1
样例输出 Copy
Fangfang 1985-06-01
以下是代码实现部分:
用户自定义函数版:
#include <stdio.h>
#include <stdlib.h>struct student//定义学生信息结构体{char name[9];//定义学生姓名int a;//定义出生年月日int b;int c;};void jgt(struct student s[] ,int a)//用户自定义函数,用来判断年龄最小的学生{int n1=s[0].a;int n2=s[0].b;int n3=s[0].c;int xb=0;for(int i=0;i<a;i++){if(s[i].a>n1)//判断出生年谁更大{n1=s[i].a;xb=i;}else if(s[i].a==n1)//若出生年一样大,则判断出生月谁大{if(s[i].b>n2){n2=s[i].b;xb=i;}else if(s[i].b==n2)//若出生年月一样大则判断出生日谁大{if(s[i].c>n3){n3=s[i].c;xb=i;//将年龄较小的下表记录下来}}}}
printf ("%s %d-%02d-%02d",s[xb].name,s[xb].a,s[xb].b,s[xb].c);//输出最小年龄学生信息}
int main()
{int n;scanf ("%d",&n);struct student s[n];for (int i=0;i<n;i++){scanf ("%s",s[i].name);scanf ("%d %d %d",&s[i].a,&s[i].b,&s[i].c);}//记录学生信息jgt(s,n);//传入用户自定义函数return 0;
}
正常版:
#include <stdio.h>
#include <stdlib.h>struct student{char name[9];int a;int b;int c;};
int main()
{int n;scanf ("%d",&n);struct student s[n];for (int i=0;i<n;i++){scanf ("%s",s[i].name);scanf ("%d %d %d",&s[i].a,&s[i].b,&s[i].c);}int n1=s[0].a;int n2=s[0].b;int n3=s[0].c;int xb=0;for(int i=0;i<n;i++){if(s[i].a>n1){n1=s[i].a;xb=i;}else if(s[i].a==n1){if(s[i].b>n2){n2=s[i].b;xb=i;}else if(s[i].b==n2){if(s[i].c>n3){n3=s[i].c;xb=i;}}}}
printf ("%s %d-%02d-%02d",s[xb].name,s[xb].a,s[xb].b,s[xb].c);return 0;
}