C语言编程输入n个朋友的信息,包括姓名、生日、电话号码,本题要求编写程序,按照年龄从大到小的顺序依次输出通讯录。题目保证所有人的生日均不相同。
时间: 2024-09-28 09:16:16 浏览: 102
C语言实现的生日祝福放烟花源码和小程序
为了实现这个功能,你可以创建一个结构体来存储每个人的信息,并使用数组或者链表来存放这些数据。这里我将给出一个简单的基于数组的解决方案,使用冒泡排序算法对年龄进行降序排列。
首先,定义一个结构体`Person`来保存姓名、生日和电话号码:
```c
struct Person {
char name[50];
int birthday;
char phone_number[20];
};
```
接着,创建一个`Person`类型的数组,并读取n个人的信息:
```c
#define MAX_FRIENDS 100
struct Person friends[MAX_FRIENDS];
void input_friends(int n) {
for (int i = 0; i < n; i++) {
printf("请输入第%d位朋友的姓名(不超过49个字符):", i + 1);
fgets(friends[i].name, sizeof(friends[i].name), stdin); // 保留换行符
friends[i].name[strlen(friends[i].name) - 1] = '\0'; // 去除多余的换行符
printf("请输入第%d位朋友的生日(年份表示):", i + 1);
scanf("%d", &friends[i].birthday);
printf("请输入第%d位朋友的电话号码:", i + 1);
scanf("%s", friends[i].phone_number);
}
}
```
接下来,定义一个比较年龄的辅助函数用于冒泡排序:
```c
int compare_age(const void* a, const void* b) {
const struct Person* pa = (const struct Person*)a;
const struct Person* pb = (const struct Person*)b;
return pb->birthday - pa->birthday;
}
```
最后,使用`qsort`函数对数组进行排序,并遍历输出结果:
```c
void sort_and_output() {
qsort(friends, n, sizeof(struct Person), compare_age);
printf("\n按年龄从大到小排序后的通讯录:\n");
for (int i = 0; i < n; i++) {
printf("%s (%d岁): %s\n", friends[i].name, friends[i].birthday, friends[i].phone_number);
}
}
```
完整的主函数如下:
```c
int main() {
int n;
printf("请输入朋友的数量:");
scanf("%d", &n);
input_friends(n);
sort_and_output();
return 0;
}
```
运行这个程序后,它会要求用户输入朋友的数量和每个朋友的信息,然后按照年龄从大到小打印出通讯录。
阅读全文