题目要求使用C语言编写一个程序,对输入的通讯录数据进行排序,按照年龄从大到小的顺序输出。我们需要理解输入数据的格式:每行包含一个人的姓名、生日和电话号码。姓名是不超过10个英文字符的字符串,生日是8位的日期(格式为yyyymmdd),电话号码是不超过17位的数字和加号、减号组成的字符串。程序需要处理的输入个数n在10以下。 为了实现这个功能,我们定义一个结构体`struct student`,用来存储每个朋友的信息,包括姓名、生日和电话号码。结构体的定义如下: ```c struct student{ char name[10]; int birth; char phone[17]; }; ``` 接下来,我们创建一个大小为10的`stu`数组,用于存储n个朋友的信息。数组`stu1`作为临时变量,用于在排序过程中交换元素。 程序的主要逻辑包含两个部分:读取输入数据并存储,以及对数据进行排序。 1. **读取输入数据**:使用`scanf`函数读取输入,将数据存储到`stu`数组中。对于每个输入行,使用`%s`匹配姓名,`%d`匹配生日,剩下的部分用`%s`匹配电话号码。 ```c for (i = 0; i < n; i++) scanf("%s %d %s", stu[i].name, &stu[i].birth, stu[i].phone); ``` 2. **排序**:这里使用了冒泡排序算法,遍历数组并比较相邻元素的生日,如果前一个元素的生日小于后一个,就交换它们的位置。这个过程会重复n-1次,确保所有元素都按照生日从大到小排序。 ```c for (i = 0; i < n - 1; i++) { for (j = 0; j < n - i - 1; j++) { if (stu[j].birth > stu[j+1].birth) { stu1 = stu[j]; stu[j] = stu[j+1]; stu[j+1] = stu1; } } } ``` 3. **输出结果**:排序完成后,遍历整个数组,按照指定格式输出每个朋友的信息。 ```c for (i = 0; i < n; i++) printf("%s %d %s\n", stu[i].name, stu[i].birth, stu[i].phone); ``` 程序返回0表示正常结束。 在这个程序中,我们学习了如何使用C语言处理结构体数组,读取和解析输入数据,以及使用冒泡排序算法对数据进行排序。冒泡排序的时间复杂度是O(n^2),虽然效率较低,但对于较小的数据量(如题目中的n<10)来说是可行的。在实际应用中,可以考虑使用更高效的排序算法,如快速排序或归并排序。
































- 粉丝: 250
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 船用低速机工程(一期)-气缸油膜厚度检测项目进展情况汇报.pptx
- 工程造价必备常识掌握路堤施工方法.docx
- 美国科特勒集团高级营销精英研修1.ppt
- 房地产销售培训手册.doc
- 操作系统实验报告(1)各种算法C++程序.doc
- 228句最常用英文口语短句文本.doc
- 从安客创投破产谈网站运营对平台的重要性.ppt
- 成都市某建筑公司工程劳务分包合同.doc
- 转盘钻孔机安全操作规程技术交底.doc
- 二次结构劳务大包合同.doc
- 第1章--水轮机安装.doc
- 某医院重度精神残疾人托养中心装修改造工程监理规划.doc
- 施工预算的核定.doc
- 争夺大数据挖掘制高点.docx
- 计算机图形学试卷及参考答案.doc
- 个人总结成本指标控制办法.doc


