[试题]

论述题 3 :针对以下 C 语言程序,请按要求回答问题( 18 分)

已知 link.c 源程序如下:

/*link.c 程序对单向链表进行操作 , 首先建立一个单向链表 , 然后根据用户的选择可以对其进行插入节点 、

删除节点和链表反转操作 */

#include

#include

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 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");

// 建立一个单向链表:

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<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 your 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/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 分)

参考答案与解析:

相关试题

论述题3:针对以下C语言程序,请按要求回答问题下面是一个简单的C语言程序: (1

[试题]论述题3:针对以下C语言程序,请按要求回答问题下面是一个简单的C语言程序:(1)画出该函数的程序流程图。(2)设计测试用例,分别使函数的各种逻辑覆盖率尽量达到100%。如果认为该函数的某种逻辑覆盖率无法达到100%,需要说明原因。(3)设计特殊的测试用例,说明各种逻辑覆盖之间的关系。

  • 查看答案
  • 论述题3:针对以下C语言程序,请按要求回答问题下面是一个程序段(C语言),试设计

    [试题]论述题3:针对以下C语言程序,请按要求回答问题下面是一个程序段(C语言),试设计基本路径测试的测试用例,设计出的测试用例要保证每一个基本独立路径至少要执行一次。函数说明:当i flag=0;返回i count+100当i flag=l;返回i count*10否则 返回 i count*20输入参数:int i count int i flag输出参数:int i retum程序代码如下:(1)画出该函数的控制流程图。(2)采用基本路径测试法设计一组测试用例,保证每个基本独立路径都至少执行一次。

  • 查看答案
  • 针对以下C语言程序,请按要求回答问题。 已知link. c源程序如下: £¯*l

    [试题]针对以下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_n

  • 查看答案
  • 针对一下C语言程序,请按要求回答问题。 已知weekday. c源程序如下: i

    [主观题]针对一下C语言程序,请按要求回答问题。 已知weekday. c源程序如下: include include

  • 查看答案
  • 论述题1:以下是某应用程序的规格描述,请按要求回答问题程序规则:实现某城市的电话

    [试题]论述题1:以下是某应用程序的规格描述,请按要求回答问题程序规则:实现某城市的电话号码,该电话号码由三部分组成。它的说明如下:区号空白或3位数字;前缀非“0”或“1”开头的3位数字;后缀4位数字。(1)请分析该程序的规则说明和被测程序的功能(2)采用等价类划分方法设计测试用例。

  • 查看答案
  • 论述题2:以下是某“象棋中走马事件”应用程序的走马规则,请按要求回答问题以下是中

    [试题]论述题2:以下是某“象棋中走马事件”应用程序的走马规则,请按要求回答问题以下是中国象棋中走马事件中的走马原则:1)如果落点在棋盘外,则不移动棋子。2)如果落点与起点不构成日字型,则不移动棋子。3)如果落点处有己方棋子,则不移动棋子。4)如果在落点方向的邻近交叉点有棋子(绊马腿),则不移动棋子。5)如果不属于(1)~(4)条,且落点处无棋子,则移动棋子。6)如果不属于(1)~(4)条,且落点处为对方棋子(非老将),则移动棋子并除去对方棋子。7)如果不属于(1)~(4)条,且落点处为对方老将,则移动棋

  • 查看答案
  • 论述题1:以下是某应用程序的输入条件限制,请按要求回答问题某应用程序的输入条件组

    [试题]论述题1:以下是某应用程序的输入条件限制,请按要求回答问题某应用程序的输入条件组合为:姓名:填或不填性别:男或女状态:激活或未激活(1)对该应用程序采用正交试验设计法设计测试用例。(2)谈一下正交实验设计法设计测试用例好在哪里?

  • 查看答案
  • 论述题1:以下是一软件规格说明,请按要求回答问题软件规格说明:某工厂招工规定,报

    [试题]论述题1:以下是一软件规格说明,请按要求回答问题软件规格说明:某工厂招工规定,报名者年龄应该在16周岁到35周岁之间(到2005年12月31日为止),即出生年月不在上述范围内的人员将不予接受,并显示“年龄不合格”的出错信息。(1)请根据规格说明,划分等价类。(2)使用等价类划分方法为该软件设计测试用例。

  • 查看答案
  • 论述题1:以下是某手机中的MP3播放器状态之间交互行为的描述,请按要求回答问题下

    [试题]论述题1:以下是某手机中的MP3播放器状态之间交互行为的描述,请按要求回答问题下面以某手机中的MP3播放器的测试为例,说明如何设计测试案例。某手机中的MP3播放器有三个状态:待机、播放、停止,播放器最初处于“待机”状态;可能发生的事件有五种:用户单击“打开”按钮,单击“播放”按钮,单击“停止”按钮,单击“返回”按钮,以及播放结束。其中“打开”表示单击“打开”按钮,其他类推。请画出该播放器中交互行为的状态图(应满足功能图的要求,不可画成流程图)。

  • 查看答案
  • 论述题3:以下电费计算的几条规则,请按要求回答问题一些城市的电力公司把用户分为两

    [试题]论述题3:以下电费计算的几条规则,请按要求回答问题一些城市的电力公司把用户分为两类:单费率用户和复费率用户。对于单费率用户实行单一电价,即在任何时间短都是一个价;对于复费率用户在不同时段实行不同的电价。有4条计算电费的规则:对于单费率用户,按公式A计算电费;对于复费率用户,如果不在规定期间内,同单费率用户,按照公式A计算电费,否则按公式B计算;如果既不是单费率用户也不是复费率用户,则做其他处理。(1)根据上述要求,设计判定表。(2)根据上述判定表设计测试用例,尽量使其覆盖所有的情况。

  • 查看答案
  • 论述题 3 :针对以下 C 语言程序,请按要求回答问题( 18 分)已知 lin