题目
给定程序的功能是读入五位用户的姓名和电活号码,按姓名的字典师弃转到列后,输出用户的姓名和电活号码。函救cgeroiata读入五位用户的姓名和电话号码。gesora数把数据按姓名的字典顺方排列, ouohate给出最士
的结果。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
#define N 5
typedef struct
{ char name[20];
char num[10];
}USER;
/found/
getdata(1)
{ int i;
printf(“Enter name & phone number:\n”);
for(i=0;i<N;i++)
{printf(“i:= %d\n”,i+1);
/found/
printf(" name=“); 2(sp[i].name);
/found/
printf(” num="); 3(sp[i].num);}
}
getsort (USER *sp)
{ int i,j,k;
USER temp;
for(i=0;i<N-1;i++)
{ k=i;
for(j=i+1;j<N;j++)
if (strcmp(sp[k].name,sp[j].name)>0) k=j;
temp=sp[k];sp[k]=sp[i];sp[i]=temp;
}
}
outdata(USER *sp)
{ int i;
printf(“after sorted:\n”);
for (i=0;i<N;i++)
printf(“%s, %s\n”,sp[i].name,sp[i].num);
}
main()
{
USER sp[N],temp;
getdata(sp);
getsort(sp);
outdata(sp);
}
”
题解
首先我们来看一下程序要求和提供的代码。这个程序要求我们读入五位用户的姓名和电话号码,按姓名的字典序进行排序,并输出排序后的结果。
在提供的代码中,我们可以看到一个结构体类型 USER
,它包含用户的姓名和电话号码。代码中定义了一个包含 5 个 USER
类型结构体的数组 sp
,以及三个函数 getdata()
、getsort()
和 outdata()
。getdata()
函数用于读入用户的数据,getsort()
函数用于对用户数据进行排序,outdata()
函数用于输出排序后的结果。
现在我们来看一下代码中需要填充的下划线处,即 ___1___
、___2___
和 ___3___
。
在 ___1___
处,我们需要填写函数参数。根据程序要求,我们需要读入 5 个用户的数据,因此可以将该参数设置为 USER *sp
,表示一个包含 5 个 USER
类型结构体的数组指针。
在 ___2___
处,我们需要填写读入用户姓名的语句。根据程序要求,我们需要读入用户的姓名,因此可以使用 scanf()
函数来读取字符串类型的姓名。由于 sp
是一个数组指针,因此我们需要使用 sp[i].name
来访问当前读入用户的姓名。
在 ___3___
处,我们需要填写读入用户电话号码的语句。和读入姓名类似,我们可以使用 scanf()
函数来读取字符串类型的电话号码,并使用 sp[i].num
来访问当前读入用户的电话号码。
#include <stdio.h>
#include <string.h>
#define N 5
typedef struct {
char name[20];
char num[10];
} USER;
void getdata(USER *sp) {
int i;
printf("Enter name & phone number:\n");
for (i = 0; i < N; i++) {
printf("i = %d\n", i + 1);
printf(" name = ");
scanf("%s", sp[i].name);
printf(" num = ");
scanf("%s", sp[i].num);
}
}
void getsort(USER *sp) {
int i, j, k;
USER temp;
for (i = 0; i < N - 1; i++) {
k = i;
for (j = i + 1; j < N; j++)
if (strcmp(sp[k].name, sp[j].name) > 0) k = j;
temp = sp[k];
sp[k] = sp[i];
sp[i] = temp;
}
}
void outdata(USER *sp) {
int i;
printf("after sorted:\n");
for (i = 0; i < N; i++)
printf("%s, %s\n", sp[i].name, sp[i].num);
}
int main() {
USER sp[N], temp;
getdata(sp);
getsort(sp);
outdata(sp);
return 0;
}
这样填好下划线之后,我们就得到了一个完整的程序,可以读入、排序和输出用户的姓名和电话号码。