针对以下C语言程序,请按要求回答问题。
已知link.c源程序如下:
/*link.c程序对单向链表进行操作,首先建立一个单向链表,然后根据用户的选择可以对其进行插入节点、删除节点和链表反转操作*/
#include<stdio.h>
#include<stdlib.h>
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 *p 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");
//建立一个单向链表
prt=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 you choice\n");
scanf ("%d", &choose);
while (choose!=0)
switch (choose)
case 1:
i=1;
while (i<looation)
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 you 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",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=1;i<length;i++)
scanf ("%d", &current) ;
p1->data=current ;
p2->link=p1;
p2=p1;
p1=(list_pointer)malloc(sizeof(list_node));
p2->link=NULL;
return head;
…
设计一组测试用例,尽量使main函数的语句覆盖率能达到100%。如果认为该函数的语句覆盖率无法达到100%,则说明原因。
参考答案:设计测试用例如下:
输入数据:choose=0,预期输出:0。
输入数据:choose=A,预期输出:在链表某位置的节点后插入一个节点。
输入数据:choose=B,预期输出:删除链表中某个位置的节点。
输入数据:choose=C,预期输出:反转链表的链接顺序。
输入数据:choose=其他非零数,预期输出:-A。
采用条件覆盖设计的测试用例如下表所示。
测试用例
|