题目
论述题 3 :针对以下 C 语言程序,请按要求回答问题(18 分)
已知 link.c 源程序如下:
/*link.c 程序对单向链表进行操作 , 首先建立一个单向链表 , 然后根据用户的选择可以对其进行插入节点 、
删除节点和链表反转操作 */
#include
#include
typedef struct list_node *list_pointer; // 定义链表指针
typedef struct list_node{ // 定义链表结构
int data;
list_pointer link;
}list_node;
// 用到的操作函数:
list_pointer create(); // 建立一个单向链表
void insert(list_pointer *p_ptr, list_pointer node); // 在 node 后加入一个新的节点
void delete_node(list_pointer *p_ptr, list_pointer trail, list_pointer node);
// 删除前一个节点是 trail 的当前节点 node
void print(list_pointer ptr); // 打印链表节点中的值
list_pointer invert(list_pointer lead); // 反转链表
int main()
{
list_pointer ptr=NULL;
list_pointer node, trail;
list_pointer *p = &ptr;
int choose, location, i;
printf("you should create a link first:\n");
// 建立一个单向链表:
ptr=create(); /* ptr 指向链表的第一个节点 */
print(ptr);
// 根据用户的不同选择进行相应的操作:
printf("input number 0, you can quit the program\n");
printf("input number 1, you can insert a new node to link\n");
printf("input number 2, you can delete a node from the link\n");
printf("input number 3, you can invert the link\n");
printf("please input your choice\n");
scanf("%d", &choose);
while(choose!=0){
switch(choose){
case 1:
printf("you will insert a node to the link\n");
printf("please input the location of the node:\n");
scanf("%d", &location);
node = ptr;
i = 1;
while(i<location){
node = node->link;
i++;
}
insert(p, node); /* p 为指向 ptr 的指针 */
print(ptr);
break;
case 2:
printf("you will delete a node from the link\n");
printf("please input the location of the node:\n");
scanf("%d", &location);
node = ptr;
if(location ==1)
trail = NULL;
trail = ptr;
i = 1;
while(i<location){
trail = trail->link;
i++;
}
node = trail->link;
delete_node(p, trail, node);
print(ptr);
break;
case 3:
printf("you will invert the link\n");
ptr = invert(ptr);
print(ptr);
break;
default:
break;
return -1;
}
printf("please input your choice\n");
scanf("%d", &choose);
}
return 0;
}
// 根据用户的输入数值建立一个新的单向链表:
list_pointer create()
{
int i, current, length;
list_pointer p1, p2, head;
printf("please input the node number of the link:\n");
scanf("%d", &length);
printf("the number of the link is : %d\n", length);
printf("please input the data for the link node:\n");
i =0;
p1= p2= (list_pointer) malloc(sizeof(list_node));
head = p1;
for(i = 0; i
scanf("%d", ¤ t);
p1->data = current;
p2->link = p1;
p2 = p1;
p1 = (list_pointer) malloc(sizeof(list_node));
}
p2->link = NULL;
return head;
}
……
(1 )画出主函数 main 的控制流程图。(10 分)
(2 ) 设计一组测试用例 , 尽量使 main 函数的语句覆盖率能达到 100% 。 如果认为该函数的语句覆盖率无法达到 100% ,需说明原因。(8 分)
第1题
论述题3:针对以下C语言程序,请按要求回答问题
下面是一个简单的C语言程序:
(1)画出该函数的程序流程图。
(2)设计测试用例,分别使函数的各种逻辑覆盖率尽量达到100%。如果认为该函数的某种逻辑覆盖率无法达到100%,需要说明原因。
(3)设计特殊的测试用例,说明各种逻辑覆盖之间的关系。
第2题
论述题3:针对以下C语言程序,请按要求回答问题
下面是一个程序段(C语言),试设计基本路径测试的测试用例,设计出的测试用例要保证每一个基本独立路径至少要执行一次。
函数说明:当i flag=0;返回i count+100
当i flag=l;返回i count*10
否则 返回 i count*20
输入参数:int i count int i flag
输出参数:int i retum
程序代码如下:
(1)画出该函数的控制流程图。
(2)采用基本路径测试法设计一组测试用例,保证每个基本独立路径都至少执行一次。
第3题
论述题3:简单谈一下你对穷举测试的理解,并按要求回答问题
(1)穷举测试的方法对于所有项目程序都是可行的么?
(2)若是针对小型的程序,穷举测试是可能的么?若是,说明此时采用穷举测试能否保证程序是百分之百正确呢?
第4题
● 针对以下 C 语言程序段,对于(MaxNum,Type)的取值,至少需要(62)个测试用例能够满足判定覆盖的要求。
while (MaxNum-- > 0 )
{
if (10 == Type )
x = y * 2;
else
if (100 == Type )
x = y + 10;
else
x = y - 20;
}
(62)A.5 B. 4 C. 3 D. 2
第5题
A.5
B.4
C.3
D.2
第6题
阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。
【说明】
逻辑覆盖法是设计白盒测试用例的主要方法之一,通过对程序逻辑结构的遍历实现
程序的覆盖。针对以下由C语言编写的程序,按要求回答问题。
【问题1] (6分)
请给出满足100%DC(判定覆盖)所需的逻辑条件。
【问题2] (10分)
请画出上述程序的控制流图,并计算其控制流图的环路复杂度V(G)。
【问题3](4分)
请给出问题2中控制流图的线性无关路径。
第7题
int MathMine(int x)
{
int m=0;
int i;
for(i=x-1; i<=x+1; i++)
{
if (i<0) continue;
if (i>31) break;
if (sta[i]=-1) m++;
}
return m;
}
A.3
B.4
C.5
D.6
第8题
int MathMine(int x )
{
int m = 0;
int i;
for(i = x-1; i <= x + 1; i++ )
{
if (i < 0 ) continue;
if (i >31 ) break;
if (sta[i] == -1 ) m++;
}
return m;
}
(56)
A.3
B.4
C.5
D.6
第9题
A.3
B.4
C.5
D.6
第10题
(C语言)有以下程序
main()
{
int a=1,b;
for(b=1;b<=10;b++)
{
if(a>=8)break;
www.54yjs.cn
if(a%2==1) {a+=5;continue;}
a-=3;
}
printf("%d\n",b);
}
程序运行的结果是
A、3B、4C、5D、6
为了保护您的账号安全,请在“赏学吧”公众号进行验证,点击“官网服务”-“账号验证”后输入验证码“”完成验证,验证成功后方可继续查看答案!