题目:
4.加入Benevolent Order of Programmer后,在BOP大会上,人们便可以通过加入者的真实姓名、头衔或秘密BOP姓名来了解他(她)。请编写一个程序,可以使用真实姓名、头衔、秘密姓名或成员偏好来列出成员。编写该程序时,请使用下面的结构:
// Benevolent Order of Programmers name structure
struct bop{
char fullname[strsize]; // real name
char title [strsize]; // job title
char bopname[strsize]; // secret BOP name
int preference; // 0=fullname, 1=title,2=bopname
};
该程序创建一个由上述结构组成的小型数组,并将其初始化为适当的值。另外,该程序使用一个循环,让用户在下面的选项中进行选择:
a. display by nameb. display by title注意,"display by preference" 并不意味着显示成员的偏好,而是意味着根据成员的偏好来列出成员。
c. display by bopname d. display by preference
q. quit
例如,如果偏好号为1,则选择d将显示程序员的头衔。该程序的运行情况如下:
Benevolent Order of Programmers Report
a. display by name b. display by title
c. display by bopname d. display by preference
q. quit
Enter your choice:a
Wimp Macho
Raki Rhodes
Celia Laiter
Hoppy Hipman
Pat Hand
Next choice:d
Wimp Macho
Junior Programmer
MIPS
Analyst Trainee
LOOPY
Next choice:q
Bye!
答案: 书上无答案。
C++技术网辅导详解解答:
参考代码:
#include <iostream>
struct bop {
char fullname[50]; // real name
char title[50]; // job title
char bopname[50]; // secret BOP name
int preference; // 0=fullname, 1=title ,2=bopname
};
using namespace std;
int main()
{
struct bop arr_bop[5] = {
{"Wimp Macho","T-Wimp","Bop-Wimp",0},
{"Raki Rhodes","Junior Programmer","Bop-Raki",1},
{"Celia Laiter","T-Celia","MIPS",2},
{"Hoppy Hipman","Analyst Trainee","Bop-Hoppy",1},
{"Pat Hand","LOOPY","Bop-Pat",1 }
};
int ch;
cout << "a.display by name b.display by title\n";
cout << "c.display by bopname d.display by preference\n";
cout << "q.quit\nEnter your choice:";
while (ch = cin.get())
{
if (ch == '\n')continue;
switch (ch)
{
case 'a':
for (int i = 0; i < 5; i++)
{
cout << arr_bop[i].fullname << endl;
}
break;
case 'b':
for (int i = 0; i < 5; i++)
{
cout << arr_bop[i].title << endl;
}
break;
case 'c':
for (int i = 0; i < 5; i++)
{
cout << arr_bop[i].bopname << endl;
}
break;
case 'd':
for (int i = 0; i < 5; i++)
{
switch (arr_bop[i].preference)
{
case 0:
cout << arr_bop[i].fullname << endl;
break;
case 1:
cout << arr_bop[i].title << endl;
break;
case 2:
cout << arr_bop[i].bopname << endl;
break;
default:
break;
}
}
break;
case 'q':
cout << "Bye!\n";
exit(0);
default:
break;
}
cout << "Next choice:";
}
return 0;
}
这题在选择d上有点绕。选择d依然要显示所有成员的信息,只是显示的信息是根据每一个成员的偏好来显示成员显示的信息的。另外,在初始化合适的值又要确保输出的结果如示例那样,那么我们要根据输出的信息对初始化的内容进行还原。输入a输出了所有成员的名字,那么可以确定数组的长度和名称。输入d显示的内容各不相同,根据内容的性质,可以推断出每一个成员的偏好号。那么其他不会显示的内容则可以自行设定了。输入q的时候,如果我们想退出循环,靠一个break是不够的,所以我们使用exit函数来结束了程序。
本题涉及到两个循环的使用,还有两个switch的使用,还是将他们进行嵌套实现的。所以本题是比较综合的。但是解答的方法是一步步的去分析题目的信息,先将能够确定的信息先写出来,然后一步步就水到渠成了。