Chap9结构 课后作业 L2-2 通讯录排序

软件2314张侃202221512027 软件23 2023-12-21 12:26:56

题目要求:

输入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;
}

运行结果:

...全文
147 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

212

社区成员

发帖
与我相关
我的任务
社区描述
程序设计基础课程教学群
c语言c++ 高校 福建省·厦门市
社区管理员
  • xmzq001
  • 鹿饮涧鸣
  • jiangxiaoju
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

请加入学习社区的软件23级同学修改社区昵称为学号+姓名,以便登记作业提交情况。

试试用AI创作助手写篇文章吧