通信录排序:建立一个通讯录,通信录的结构记录包括:姓名、生日、电话号码,其中 生日又包括三项:年、月、日。编写程序,定义一个嵌套的结构类型,输入n个联系人的信息,再按他们的年龄从大到小的顺序依次输出其信息。试编写相应C语言程序。
时间: 2024-03-24 17:40:39 浏览: 69
输入n个朋友的信息,包括姓名、生日、电话号码,本题要求编写程序,按照年龄从大到小的顺序依次输出通讯录。
5星 · 资源好评率100%
以下是实现该功能的C语言代码:
```c
#include <stdio.h>
#include <string.h>
struct date {
int year;
int month;
int day;
};
struct contact {
char name[20];
struct date birthday;
char phone[12];
};
int main() {
int n, i, j;
struct contact list[20], temp;
// 从键盘输入联系人信息
printf("请输入联系人个数:");
scanf("%d", &n);
printf("请输入联系人的姓名、生日(年 月 日)、电话号码:\n");
for (i = 0; i < n; i++) {
printf("联系人%d:", i + 1);
scanf("%s %d %d %d %s", list[i].name, &list[i].birthday.year, &list[i].birthday.month, &list[i].birthday.day, list[i].phone);
}
// 按年龄从大到小排序
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - i - 1; j++) {
if (list[j].birthday.year < list[j + 1].birthday.year ||
(list[j].birthday.year == list[j + 1].birthday.year && list[j].birthday.month < list[j + 1].birthday.month) ||
(list[j].birthday.year == list[j + 1].birthday.year && list[j].birthday.month == list[j + 1].birthday.month && list[j].birthday.day < list[j + 1].birthday.day)) {
temp = list[j];
list[j] = list[j + 1];
list[j + 1] = temp;
}
}
}
// 输出排序后的联系人信息
printf("按年龄从大到小排序后的联系人信息为:\n");
for (i = 0; i < n; i++) {
printf("联系人%d:姓名:%s 生日:%d年%d月%d日 电话号码:%s\n", i + 1, list[i].name, list[i].birthday.year, list[i].birthday.month, list[i].birthday.day, list[i].phone);
}
return 0;
}
```
程序中定义了两个结构体 `date` 和 `contact`,用来分别存储日期和联系人信息。首先从键盘输入联系人信息,然后按照年龄从大到小的顺序排序。排序时,采用冒泡排序法,按照年、月、日的顺序比较两个联系人的生日。最后输出排序后的联系人信息。
阅读全文