论述题3:针对以下C语言程序,请按要求回答问题(18分)
已知link.c源程序如下:
/*link.c程序对单向链表进行操作,首先建立一个单向链表,然后根据用户的选择可以对其进行插入节点、删除节点和链表反转操作*/
#include
#include
typedef struct list_node *list_pointer; //定义链表指针
typedef struct list_node{//定义链表结构
int data;
list_pointerlink;
}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_pointerptr=NULL;
list_pointernode, 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
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
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_pointerp1, 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分)
① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;
② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。