问题 问答题

针对以下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<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 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=1,预期输出:在链表某位置的结点后插入一个结点。

输入数据:choose=2,预期输出:删除链表中某个位置的结点。

输入数据:choose=3,预期输出:反转链表的链接顺序。

输入数据:choose=其他非零数,预期输出:-1。

采用条件覆盖设计的测试用例如下表所示。

测试用例输入:a=2,b=-1,c=-2输出:a=2,b=-1,c=-3输入:a=-1,b=2,c=3输出:a=-1,b=2,c=6
取值条件T1,F2,T3,F4F1,T2,F3,T4
具体取值条件a>0,b<=0,a>1,c<=1a<=0,b>0,a<=1,c>1
通过路径P3(1-3-4)P4(1-3-5)

 

单项选择题
单项选择题