问答题 已知C源程序如下:
/* A simple mailing list example using an array of structures. */
include <stdion.h>
include <stdlib.h>
define MAX 4
struct addr {
char name[30];
char street[40];
char city[20];
unsigned long int zip;
} addr_list[MAX];
void init_list(void), enter(void);
void deleteAddr(void), list(void)
int menu_select(void), find free(void);
int main(void)
{
char choice;
init_list();/* initialize the structure array */
for(;;) {
choice=menu_select();
switch(choice) {
case 1; enter();
break;
case 2:deleteAddr();
break
case 3: list();
break;
case 4: exit(0);
}
}
return 0;
}
/* Initialize the list. */
void init_list(void)
{
register int t;
for(t=0; t<MAX; ++t)addr_list[t].name[0]=/0;
}
/* Get a menu selection. */
int menu_select(void)
{
char s[80];
int c;
printf("1. Enter a name/n");
printf("2. Delete a name/n");
printf("3. List the file/n");
printf("4. Quit/n");
do {
printf("/nEnter your choice:");
gets(s);
c=atoi(s);
}while(c<1|||c>4);
return c;
}
/* Input addresses into the list. */
void enter(void)
{
int slot;
char s[80];
slot=find_free();
if(slot==-1){
printf("/nList Full");
return;
}
printf("Enter name:");
gets(addr_list[slot].name);
printf("Enter street:");
gets(addr_list[slot].street);
printf("Enter city:");
gets(addr_list[slot].city);
printf("Enter zip:");
gets(s);
addr_list[slot].zip=strtoul(s, /0,10);
}
/* Find anunused structure. */
int find_free(void)
{
register int t;
for(t=0; addr_list[t], name[0]&&t<MAX; ++t);
if(t==MAX) return-1; /* no slots free */
return t;
}
/* Delete an address. */
void deleteAddr(void)
{
register int slot;
char s[80];
printf("enter record #:");
gets(s);
slot=atoi(s);
if(slot>=0 && slot<MAX)
addr_list[slot].name[0]=/0;
}
/* Display the list on the screen. */
void list(void)
{
register int t;
for(t=0; t<MAX; ++t){
if(addr_list[t].name[0]) {
printf("% s/n", addr_list[t].name);
printf("% s/n", addr_list[t].street);
printf("% s/n", addr_list[t].city);
printf("% lu/n/n", addr_list[t], zip);
}
}
printf("/n/ n");
}
问答题 画出main函数的控制流程图;
【正确答案】main函数的控制流程图如下(限于篇幅只显示语句块,不显示具体语句): [*] 图中各判断语句如下: ①t<MAX ②c<1||c>4 ③addr_list[t].name[0] && t<MAX ④slot==-1 ⑤slot>=0 && slot<=MAX ⑥addr_list[t].name[0]
【答案解析】
问答题 设计一组测试用例,使该程序所有函数的语句覆盖率尽量达到100%。如果认为该程序的语句覆盖率无法达到100%,需说明原因。
【正确答案】设计测试用例时,关键需要注意将t的值达到Max,即起码要输入4个name才行,这样当t==Max才能为真,才可以执行相应的分支语句。 具体输入如下: 输入4个name: 1 小明 凤凰街 南京 210000 1 小红 南京路 上海 120000 1 王明 达成路 上海 120000 1 李明 南京路 北京 100000 打算输入第五个:1 删除一个name: 2 小明 列出所有:3 退出:4 这样,程序中每一条语句都能够被执行。 上述测试用例能够使每条语句均执行,故语句覆盖率能够达到100%。
【答案解析】