输入n个朋友的信息,包括姓名、生日、电话号码。按照姓名依字母序依次输出通讯录。题目保证所有人的姓名均不相同。 本题要求: 定义一个结构体类型records,结构体包括三个成员name、birth、tele,其中name表示姓名,不超过15个字符;birth表示生日,以yyyymmdd字符串形式存储;tele表示电话号码,不超过20个字符; 编写my_sort函数,实现按姓名字母序对n组信息排序。
时间: 2023-05-31 08:20:07 浏览: 156
输入n个朋友的信息,包括姓名、生日、电话号码,本题要求编写程序,按照年龄从大到小的顺序依次输出通讯录。
5星 · 资源好评率100%
### 回答1:
题目要求输入n个朋友的信息,包括姓名、生日、电话号码,并按照姓名依字母序依次输出通讯录。为此,我们需要定义一个结构体类型records,包括三个成员name、birth、tele,分别表示姓名、生日、电话号码。其中,name表示姓名,不超过15个字符;birth表示生日,以yyyymmdd字符串形式存储;tele表示电话号码,不超过20个字符。
为了实现按姓名字母序对n组信息排序,我们需要编写一个my_sort函数。该函数的具体实现可以使用快速排序算法,按照姓名的字母序进行排序。排序完成后,我们可以依次输出通讯录,即按照姓名字母序输出每个朋友的信息。
### 回答2:
实现该功能需要以下步骤:
1. 定义结构体类型records。
2. 定义输入函数,输入n个朋友的信息,包括姓名、生日、电话号码。
3. 实现按姓名字母序排序的my_sort函数。可以使用字符串库函数strcmp进行姓名的比较,使用冒泡、选择、插入等排序算法进行排序。
4. 对排序后的信息进行输出,按照姓名依字母序依次输出通讯录。
下面是具体的实现过程:
Step1 定义结构体类型records
定义结构体类型records,包括三个成员name、birth、tele,其中name表示姓名,不超过15个字符;birth表示生日,以yyyymmdd字符串形式存储;tele表示电话号码,不超过20个字符。
struct records{
char name[16];
char birth[9];
char tele[21];
};
Step2 定义输入函数
定义函数input_records,输入n个朋友的信息,返回一个结构体数组。
struct records* input_records(int n){
struct records *p=(struct records*)malloc(sizeof(struct records)*n);
int i;
for(i=0;i<n;++i){
scanf("%s %s %s",p[i].name,p[i].birth,p[i].tele);
}
return p;
}
Step3 实现排序函数my_sort
定义函数my_sort,实现按姓名字母序对n组信息排序。函数的参数是一个结构体数组和其大小n。可以使用字符串库函数strcmp进行姓名的比较,使用插入排序算法进行排序。
void my_sort(struct records *p,int n){
int i,j;
char tmp[16];
for(i=1;i<n;++i){
for(j=i;j>0;--j){
if(strcmp(p[j].name,p[j-1].name)<0){
strcpy(tmp,p[j].name);
strcpy(p[j].name,p[j-1].name);
strcpy(p[j-1].name,tmp);
strcpy(tmp,p[j].birth);
strcpy(p[j].birth,p[j-1].birth);
strcpy(p[j-1].birth,tmp);
strcpy(tmp,p[j].tele);
strcpy(p[j].tele,p[j-1].tele);
strcpy(p[j-1].tele,tmp);
}
else
break;
}
}
}
Step4 输出通讯录
定义函数output_records,对排序后的信息进行输出,按照姓名依字母序依次输出通讯录。
void output_records(struct records *p,int n){
int i;
for(i=0;i<n;++i){
printf("%s %s %s\n",p[i].name,p[i].birth,p[i].tele);
}
}
完整代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct records{
char name[16];
char birth[9];
char tele[21];
};
struct records* input_records(int n){
struct records *p=(struct records*)malloc(sizeof(struct records)*n);
int i;
for(i=0;i<n;++i){
scanf("%s %s %s",p[i].name,p[i].birth,p[i].tele);
}
return p;
}
void my_sort(struct records *p,int n){
int i,j;
char tmp[16];
for(i=1;i<n;++i){
for(j=i;j>0;--j){
if(strcmp(p[j].name,p[j-1].name)<0){
strcpy(tmp,p[j].name);
strcpy(p[j].name,p[j-1].name);
strcpy(p[j-1].name,tmp);
strcpy(tmp,p[j].birth);
strcpy(p[j].birth,p[j-1].birth);
strcpy(p[j-1].birth,tmp);
strcpy(tmp,p[j].tele);
strcpy(p[j].tele,p[j-1].tele);
strcpy(p[j-1].tele,tmp);
}
else
break;
}
}
}
void output_records(struct records *p,int n){
int i;
for(i=0;i<n;++i){
printf("%s %s %s\n",p[i].name,p[i].birth,p[i].tele);
}
}
int main(){
int n;
scanf("%d",&n);
struct records *p=input_records(n);
my_sort(p,n);
output_records(p,n);
free(p);
return 0;
}
### 回答3:
解析:
本题需要定义一个结构体类型records,结构体包含三个成员:name、birth、tele。
接下来需要输入n个朋友的信息,包括姓名、生日、电话号码。可以使用循环语句和结构体数组进行输入。
最后需要按照姓名依字母序依次输出通讯录,可以使用快速排序算法对结构体数组进行排序,然后按照顺序输出即可。
对于快速排序算法,可以通过递归实现。首先选择一个基准元素,将数组分成左右两个子数组,左边的元素都小于基准元素,右边的元素都大于基准元素。然后对左右两个子数组递归调用快速排序算法,最终实现整个数组的排序。
代码实现如下:
阅读全文