酷代码 AI
菜单

7-2 通讯录排序 分数 10 作者 C课程组 单位 浙江大学 输入n个朋友的信息,包括姓名、生日、电话号码,本题要求用C语言编写程序,按照年龄从大到小的顺序依次输出通讯录。题目保证所有人的生日均不相同。 输入格式: 输入第一行给出正整数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

以下是解决该问题的C语言代码: ```c #include <stdio.h> #include <string.h> // 定义朋友信息的结构体 typedef struct { char name[11]; int birthday; char phone[18]; } Friend; // 交换两个朋友信息的函数 void swap(Friend *a, Friend *b) { Friend temp = *a; *a = *b; *b = temp; } // 冒泡排序函数,按照生日从小到大排序(年龄从大到小) void bubbleSort(Friend friends[], int n) { for (int i = 0; i < n - 1; i++) { for (int j = 0; j < n - i - 1; j++) { if (friends[j].birthday > friends[j + 1].birthday) { swap(&friends[j], &friends[j + 1]); } } } } int main() { int n; // 读取朋友的数量 scanf("%d", &n); Friend friends[10]; // 读取每个朋友的信息 for (int i = 0; i < n; i++) { scanf("%s %d %s", friends[i].name, &friends[i].birthday, friends[i].phone); } // 对朋友信息按照生日排序 bubbleSort(friends, n); // 输出排序后的朋友信息 for (int i = 0; i < n; i++) { printf("%s %d %s\n", friends[i].name, friends[i].birthday, friends[i].phone); } return 0; } ``` 代码说明: 1. 结构体定义:定义了一个名为`Friend`的结构体,用于存储朋友的姓名、生日和电话号码。 2. 交换函数:`swap`函数用于交换两个`Friend`结构体变量的值。 3. 冒泡排序函数:`bubbleSort`函数使用冒泡排序算法对朋友信息按照生日从小到大进行排序,即年龄从大到小排序。 4. 主函数: - 读取朋友的数量`n`。 - 读取每个朋友的信息并存储在`friends`数组中。 - 调用`bubbleSort`函数对朋友信息进行排序。 - 输出排序后的朋友信息。 复杂度分析: - 时间复杂度:$O(n^2)$,主要是由于使用了冒泡排序算法。 - 空间复杂度:$O(n)$,主要用于存储朋友的信息。 [2025-12-11 11:24:48 | AI问答 | 604点数解答]

服务商
相关提问
发财导航,免费问AI
实用工具查看更多