针对以下C语言程序,请按要求回答问题。 已知link. c源程序如下: /*link. c程序对单向链表进行操作,首先建立一个单向链表,然后根据用户的选择可以对其进行插入结点、删除结点和链表反转操作*/ #include<stdio. h

admin2013-03-13  27

问题    针对以下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。 采用条件覆盖设计的测试用例如下表所示。 [*]

解析
转载请注明原文地址:https://jikaoti.com/ti/eUE7FFFM
0

相关试题推荐
最新回复(0)