问答题 已知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 initlist(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/")
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 an unused 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%。
【答案解析】