问答题 已知C源程序如下:
/* 一个使用结构体数组的简单地址列表 */
#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(); /* 初始化结构体数组 */
for(;;) {
choice=menu select ();
switch (choice) {
case 1: enter();
break;
case 2: deleteAddr();
break;
case 3: list();
break;
case 4: exit(0);
}
}
return 0;
}

/*初始化列表*、
void init list(void)
{
register int t;
for (t=0; t<MAX; ++t) addr_list [t].name [0] =/0;
}

/*获取菜单选择*/
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 filekn");
printf("4. Quitkn");
do {
printf("/nEnter your choice:");
gets (s);
c=atoi (s);
}while(c<1 || c>4);
return c;
}

/*增加地址*/
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);

/*查找未用结构*/
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;
}
/*删除地址*/
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;
/*在屏幕上显示列表*/
void list (void)
{
register int t;
for(t=0;t if(addr list[t].name[0]) {
printf("%s/n", addr_list[t].name);
printf("%skn", addr_list[t].street);
printf("%s/n", addr_list[t].city);
printf("%lu/n/n", addr_list[t].zip);
}
}
printf("/n/n");
}
5. 画出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]
6. 设计一组测试用例,使该程序所有函数的语句覆盖率尽量达到100%。如果认为该程序的语句覆盖率无法达到100%,则说明原因。
设计测试用例时,关键需要注意将t的值达到Max,即起码要输入4个name才行,这样,当t=Max才能为真,才可以执行相应的分支语句。
具体输入如下:
输入4个name: 1
小明
凤凰街
南京
210000
1
小红
南京路
上海
120000
1
王明
达成路
上海
120000
1
李明
南京路
北京
100000
打算输入第5个:1
删除一个name:2
小明
列出所有:3
退出:4
这样,程序中每一条语句都能够被执行。
上述测试用例能够使每条语句均执行,故语句覆盖率能够达到100%。
问答题 画出main函数的控制流程图。
【正确答案】
【答案解析】main函数的控制流程图如下(限于篇幅只显示语句块,不显示具体语句):
问答题 设计一组测试用例,使该程序所有函数的语句覆盖率尽量达到100%。如果认为该程序的语句覆盖率无法达到100%,则说明原因。
【正确答案】
【答案解析】设计测试用例时,关键需要注意将t的值达到Max,即起码要输入4个name才行,这样,当t=Max才能为真,才可以执行相应的分支语句。
具体输入如下:
输入4个name: 1
小明
凤凰街
南京
210000
1
小红
南京路
上海
120000
1
王明
达成路
上海
120000
1
李明
南京路
北京
100000
打算输入第5个:1
删除一个name:2
小明
列出所有:3
退出:4
这样,程序中每一条语句都能够被执行。
上述测试用例能够使每条语句均执行,故语句覆盖率能够达到100%。