问答题

针对以下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,预期输出...
题目列表

你可能感兴趣的试题

问答题

已知C源程序如下:
/* Input today’s date,output tomorrow’s date */
/* version 2 */
#include <stdio.h>
struct ydate
int day; int month; int year; ;
int leap(struct ydate d)
if((d.year%4==0&&d.year%100!=0)||(d.year%400==0)
return 1;
else
return 0;
int numdays(struct ydate d)
int day;
static int daytab[]=
31,28,31,30,31,30,31,31,30,31,30,31;
if (leap (d)&&d.month==2)
day=29;
else
day=daytab [d.month-1];
return day;
int main (void)
struct ydate today, tomorrow;
printf("format of date is: year,month, day
输入的年、月、日之间应用逗号隔开\n"
printf(" today is: ") ;
scanf ("%d, %d, %d", &today. year, &today.month, &today. day) ;
while(0>=today.year|| today.year>65535||0>=today.month||today.month>12)||0>=
today, day||today, day>numdays (today))
printf("input date error! reenter the day!\n");
printf("today is :");
scanf ("%d, %d, %d", &today. year, &today.month, &today. day);
if (today. day! =numdays (today))
tomorrow.year:today.year;
tomorrow.month=today.month;
tomorrow.day=today.day+1;
else if(today.month==12)
tomorrow.year:today.year+1;
tomorrow.month=1;
tomorrow.day=1;
else
tomorrow.year=today.year;
tomorrow.month=today.month+1;
tomorrow.day=1;
printf("tomorrow is :%d,%d,%d\n\n",
tomorrow.year, tomorrow.month, tomorrow.day);
(1)画出程序中所有函数的控制流程图。
(2)设计一组测试用例,使该程序所有函数的语句覆盖率和分支覆盖率均能达到100%。如果认为该程序的语句或分支覆盖率无法达到100%,则说明为什么。

答案: (1)函数leap的流程图如下:

函数numdays的流程图如下左图所示。
main函数...
问答题

已知C源程序如下:
/*一个使用结构体数组的简单地址列表*/
# include <stdion.h>
# include <stdlib.h>
define MAX 4
struct addr
char name[30];
char street[40];
char city[20];
unsigned long int zip;
addr list [MAX] ;
void init_list (void), enter (void);
void deleteAddr(void), list(void);
int menu select (void), find free (void);
int main (void)
char choice;
init_list();/ *初始化结构体数组*/
for(;;)
choice=menu_select();
switch (choice)
case 1:enter();
break;
case 2:deleteAddr();
break;
case 3:list();
break;
case 4:exit(0);

return 0
/*初始化列表*/
void init_list (void)
register int t;
for(t=0;t<MAX;++t)addr_list[t].name[0]=\0;
/ *获取菜单选择* /
int menu_select (void)
char s[80];
int c;
printf("1. Enter a name\n");
printf("2. Delete a name\n");
printf("3. List the file\n") ;
printf("4. Quit\n") ;
do
printf("\nEnter your choice:");
gets (s);
c=atoi (s);
while(c<1| | c>4);
return c;
/ *增加地址* /
void enter (void)
int slot;
char s[80];
slot=find_free ();
if (slot==-1)
printf("\nList Full") ;
return;
printf("Enter name:");
gets (addr_list [slot] .name);
printf("Enter street:");
gets (addr_list[slot]. street);
printf("Enter city:");
gets(addr_list[slot]. city);
printf("Enter zip:");
gets (s);
addr_list[slot] .zip=strtoul(s, \0,10);
/*查找未用结构*/
int find_free (void)
register int t;
for(t=0; addr_list [t]. name[0] &&t<MAX;++t);
if(t==MAX) return-1; / * no slots free * /
return t;
/*删除地址*/
void deleteAddr(void)
register int slot;
char s[80];
printf("enter record # :");
gets (s);
slot=atoi(s);
if(slot>=0 && slot<MAX)
addr_list [slot]. name[0]:\0;
/ *在屏幕上显示列表*/
void list (void)
register int t;
for(t=0;t<MAX;++t)
if (addr_list [t]. name[0])
printf ("%s\n", addr_list It] . name);
printf("%s\n",addr_list[t] .street);
printf("%s\n",addr list[t] .city);
printf ("%lu\n\n", addr_list [t]. zip);

printf ("\n\n");
画出main函数的控制流程图。

答案: main函数的控制流程图如下(限于篇幅只显示语句块,不显示具体语句):

图中各判断语句如下:
问答题

用基本路径测试法为下列程序设计测试用例。
程序功能描述:计算学生人数、学生分数的总分数和平均分。要求运行时最多输入50个学生分数(以-1作为输入结束的标志),程序流程图如下图所示。

答案: (1) 根据题目中的程序流程图,将其转换为控制流图,如下图所示。

(2) 计算得到的控制流图G的环...
问答题

针对以下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的控制流程图。

答案: 主函数的控制流程如下图所示。
问答题

为下列程序确定最小的测试用例数,程序流程图如下右图所示。

答案: 首先注意到,该图可分为上下两层:分支谓词1的操作域是上层(c),分支谓词8的操作域是下层(d),同上例,只要分别得到两层...
问答题

已知C源程序如下:
/*一个使用结构体数组的简单地址列表*/
# include <stdion.h>
# include <stdlib.h>
define MAX 4
struct addr
char name[30];
char street[40];
char city[20];
unsigned long int zip;
addr list [MAX] ;
void init_list (void), enter (void);
void deleteAddr(void), list(void);
int menu select (void), find free (void);
int main (void)
char choice;
init_list();/ *初始化结构体数组*/
for(;;)
choice=menu_select();
switch (choice)
case 1:enter();
break;
case 2:deleteAddr();
break;
case 3:list();
break;
case 4:exit(0);

return 0
/*初始化列表*/
void init_list (void)
register int t;
for(t=0;t<MAX;++t)addr_list[t].name[0]=\0;
/ *获取菜单选择* /
int menu_select (void)
char s[80];
int c;
printf("1. Enter a name\n");
printf("2. Delete a name\n");
printf("3. List the file\n") ;
printf("4. Quit\n") ;
do
printf("\nEnter your choice:");
gets (s);
c=atoi (s);
while(c<1| | c>4);
return c;
/ *增加地址* /
void enter (void)
int slot;
char s[80];
slot=find_free ();
if (slot==-1)
printf("\nList Full") ;
return;
printf("Enter name:");
gets (addr_list [slot] .name);
printf("Enter street:");
gets (addr_list[slot]. street);
printf("Enter city:");
gets(addr_list[slot]. city);
printf("Enter zip:");
gets (s);
addr_list[slot] .zip=strtoul(s, \0,10);
/*查找未用结构*/
int find_free (void)
register int t;
for(t=0; addr_list [t]. name[0] &&t<MAX;++t);
if(t==MAX) return-1; / * no slots free * /
return t;
/*删除地址*/
void deleteAddr(void)
register int slot;
char s[80];
printf("enter record # :");
gets (s);
slot=atoi(s);
if(slot>=0 && slot<MAX)
addr_list [slot]. name[0]:\0;
/ *在屏幕上显示列表*/
void list (void)
register int t;
for(t=0;t<MAX;++t)
if (addr_list [t]. name[0])
printf ("%s\n", addr_list It] . name);
printf("%s\n",addr_list[t] .street);
printf("%s\n",addr list[t] .city);
printf ("%lu\n\n", addr_list [t]. zip);

printf ("\n\n");
设计一组测试用例,使该程序所有函数的语句覆盖率尽量达到100%。如果认为该程序的语句覆盖率无法达到100%,则说明原因。

答案: 设计测试用例时,关键需要注意将t的值达到Max,即起码要输入4个name才行,这样,当t==Max才能为真,才可以执行相...
问答题

针对以下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,预期输出...
微信扫码免费搜题