题目

给定程序的功能是读入五位用户的姓名和电活号码,按姓名的字典师弃转到列后,输出用户的姓名和电活号码。函救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;
}


这样填好下划线之后,我们就得到了一个完整的程序,可以读入、排序和输出用户的姓名和电话号码。