206
社区成员
![](https://csdnimg.cn/release/cmsfe/public/img/topic.427195d5.png)
![](https://csdnimg.cn/release/cmsfe/public/img/me.40a70ab0.png)
![](https://csdnimg.cn/release/cmsfe/public/img/task.87b52881.png)
![](https://csdnimg.cn/release/cmsfe/public/img/share-circle.3e0b7822.png)
题目要求:
输入n个朋友的信息,包括姓名、生日、电话号码,本题要求编写程序,按照年龄从大到小的顺序依次输出通讯录。题目保证所有人的生日均不相同。
输入格式:
输入第一行给出正整数n(<10)。随后n行,每行按照“姓名 生日 电话号码”的格式给出一位朋友的信息,其中“姓名”是长度不超过10的英文字母组成的字符串,“生日”是yyyymmdd
格式的日期,“电话号码”是不超过17位的数字及+
、-
组成的字符串。
输出格式:
按照年龄从大到小输出朋友的信息,格式同输出。
输入样例:
3
zhang 19850403 13912345678
wang 19821020 +86-0571-88018448
qian 19840619 13609876543
输出样例:
wang 19821020 +86-0571-88018448
qian 19840619 13609876543
zhang 19850403 13912345678
解题思路:
首先肯定是要定义一个结构类型,包含姓名、生日、电话号码这三个结构成员,题目要求将结构成员按照年龄大小输出,有两种方式可以实现该功能,1、将生日定义为一个长整型比较长整型的大小来判断年龄大小,2、将生日定义为字符串使用strcmp函数来判断字符串的大小进而判断年龄大小。这里我只采用了使用字符串大小来判断年龄大小的方法。
#include <stdio.h>
#include <string.h>
struct people{
char name[11];
char bir[9];
char num[18];
};
int main()
{
struct people per[10],d;
int n;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%s %s %s",per[i].name,per[i].bir,per[i].num); //由于三个结构成员的内容都比较长且可能包含符号,所以这里统一都采用字符串的方式来输入三个变量
}
for(int i=0;i<n;i++){ //使用冒泡排序法按照字符串的大小来为结构成员进行排序
d=per[i];
for(int j=0;j<n-1;j++){
if (strcmp(per[j].bir,per[j+1].bir)>0){
d=per[j]; //由于同类型你的结构变量可以直接复制所以可以采用与常见类型变量一样的方式来实现位置互换操作
per[j]=per[j+1];
per[j+1]=d;
}
}
}
for(int i=0;i<n;i++){
printf("%s %s %s\n",per[i].name,per[i].bir,per[i].num);
}
return 0;
}
运行结果: