●试题二阅读下列程序和控制流图,将应填入(n)的字句写在答题纸的对应栏内。【程序】下面是一段求最大值的程序,其中datalist是数据表,n是datalist的长度。int GetMax(int n,int da

题目

●试题二

阅读下列程序和控制流图,将应填入(n)的字句写在答题纸的对应栏内。

【程序】

下面是一段求最大值的程序,其中datalist是数据表,n是datalist的长度。

int GetMax(int n,int datalist[]){

int k=0;

for(int j=1;j<n;j++)

if(datalist[j]>datalist[k])

k=j;

return k;

}

【控制流图】

【问题1】

该程序的控制流图中A~E分别是什么?

【问题2】

计算控制流图的McCabe环路复杂性。

【问题3】

用基本路径覆盖法给出测试路径。

【问题4】

为各测试路径设计测试用例。

参考答案和解析
正确答案:
●试题二[问题1]【答案】(1)j<n(2)returnk;(3)datalist[j]>datalist[k]〓(4)k=j;(5)j++;[问题2]【答案】McCabe环路复杂性为3。[问题3]【答案】测试路径:Pathl:①→③Path2:①→②→④→⑥→…Path3:①→②→⑤→⑥→…[问题4]【答案】测试用例:Path1:取n=1,datalist[0]=1,预期结果:k=0Path2:取:n=2,datalist[0]=1,datalist[1]=0,预期结果:k=0Path3:取n=2,datalist[0]=0,datalist[1]=1,预期结果:k=1【解析】本题考查对软件测试概念和过程的理解,结合具体实例运用各种测试技术,学会测试用例设计、软件测试与程序调试的方法。软件测试是为了发现错误而执行程序的过程,其目的在于以最少的时间和人力系统地找出软件中潜在的各种错误和缺陷。根据2004新大纲和最近两次软件设计师考试的真题,不难发现各类系统分析理论的实例化考核比例逐渐升温,只要读者平时对这部分知识的实例多分析、多思考,这部分分数其实不难拿到。
如果没有搜索结果或未解决您的问题,请直接 联系老师 获取答案。
相似问题和答案

第1题:

●试题六

阅读以下说明和C++程序,将应填入(n)处的字句写在答题纸的对应栏内。

【说明】

设计一个类模板Sample用于对一个有序数组采用二分法查找元素下标。

【C++程序】

#include<iostream.h>

#define Max 100∥最多元素个数

template<class T>

class Sample

{

T A[Max]:∥存放有序数序

int n:∥实际元素个数

public

Sample(){}∥默认构造函数

Sample(T a[],int i);∥初始化构造函数

int seek(T c);

void disp()

{

for(int i=0;i<n;i++)

cout<<A[i]<<"";

cout<<end1:

}

};

template<class T>

Sample<T>::Sample(T a[],int i)

{

n=i;

for(intj=0;j<i;j++)

(1) ;

}

template<class T>

int Sample<T>::seek(T c)

{

int low=0,high=n-1,mid;

while( (2) )

{

mid=(low+high)/2;

if( (3) )

return mid;

else if( (4) )

low=mid+l;

else

(5) ;

}

return-1;

}

void main()

{

char a[]="acegkmpwxz";

Sample<char>s(a,1。);

cout<<"元素序列:";s.disp();

cout<<"元素′g′的下标:"<<s.seek(′g′)<<endl;

}


正确答案:

●试题六

【答案】(1)Aj=aj(2)low<=high(3)Amid==c(4)Amid<c(5)high=mid-1

【解析】在主函数中,首先由类模板实例化成Sample<char>模板类。(1)空所在处为构造函数的声明,将参数中的值赋值到类的成员变量中,所以(1)空应填入"Aj=aj"。

成员函数seek()采用二分法查找元素下标,变量lowhigh分别表示查找区间的下标,如果查询到目标,则返回相应的下标,若没有查询到,则其结束的条件即(2)空的内容为"low<=high"。根据二分法的原理,当中间的元素恰好等于目标元素时,则返回其下标,所以(3)空应填入"Amid==c";若中间的元素小于目标元素时,则mid+1作为新的查找区间的起始下标,所以(4)空应填入"Amid<c";否则mid-1作为新的查找区间的结束下标,所以(5)空应填入"high=mid-1"。

 

第2题:

●试题二

阅读下列程序或函数说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。

【函数2.1说明】

函数strcmp()是比较两个字符串s和t的大小。若s<t函数返回负数;若s=t函数返回0;若s>t,函数返回正数。

【函数2.1】

int strcmp(char *s,char *t)

{ while(*s && *t && (1) ){

s++;t++;

}

return (2) ;

}

【程序2.2说明】

在n行n列的矩阵中,每行都有最大的数,本程序求这n个最大数中的最小一个。

【程序2.2】

#includestdio.h

#define N 100

int a[N][N];

void main()

{ int row ,col,max,min,n;

/*输入合法n(<100),和输入n×n个整数到数组a的代码略*/

for (row=0;row<n;row++){

for(max=a[row][0],col=1;col<n;col++)

if( (3) )max=a[row][col];

if( (4) )min=max;

else if( (5) )min=max;

}

printf ("The min of max numbers is %d\n",min);

}


正确答案:

●试题二

【答案】(1)*s == *t(2) *s - *t

【解析】*s *t相等才执行循环体。返回二者差值,恰好符合题目要求。

【答案】(3) arow][col>max (4) row == 0(5) max<min

【解析】当前值比max大,则把它赋给maxmax是本行最大值。初始化min为第一行的max。该行的maxmin小,则将max赋给min

 

第3题:

●试题四

阅读下列函数说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。

【说明】

函数QuickSort是在一维数组A[n]上进行快速排序的递归算法。

【函数】

void QuickSort(int A[],int s,int t)

{int i=s,j=t+1,temp;

int x=A[s];

do{

do i++;while (1) ;

do j--;while(A[j]>x);

if(i<j){temp=A[i]; (2) ; (3) ;}

}while(i<j);

A[a]=A[j];A[j]=x;

if(s<i-1) (4) ;

if(j+1<t) (5) ;

}


正确答案:

●试题四

【答案】(1)Ai<x(2)Ai=Aj(3)Aj=temp(4)QuickSort(Asj-1)

(5)QuickSort(Aj+1t)

【解析】快速排序的思想是:任取待排序序列中的某个元素作为基准(一般取第一个元素),通过一趟排序,将待排元素分为左右两个子序列,左子序列元素的排序码均小于或等于基准元素的排序码,右子序列的排序码则大于基准元素的排序码,然后分别对两个子序列继续进行排序,直至整个序列有序。快速排序是对冒泡排序的一种改进方法,算法中元素的比较和交换是从两端向中间进行的,排序码较大的元素一次就能够交换到后面单元,排序码较小的记录一次就能够交换到前面单元,记录每次移动的距离较远,因而总的比较和移动次数较少。

 

第4题:

阅读下面程序: include void f(int n) { int x(5); static int y(10); if(n>0) { ++

阅读下面程序:

include<iostream.h>

void f(int n)

{

int x(5);

static int y(10);

if(n>0)

{

++x;

++y;

cout<<x<<","<<y<<endl;

}

}

void main()

{

int m(1);

f(m),

}

则该程序的输出结果是【 】


正确答案:611
6,11

第5题:

阅读下面程序: include void fun(int n) { int x(5); static int y(10); if(n>0) {

阅读下面程序:

include<iostream.h>

void fun(int n)

{

int x(5);

static int y(10);

if(n>0)

{

++x;

++y;

cout<<x<<","<<y<<end1;

}

}

void main()

{

int m(1);

fun(m);

}

则该程序的输出结果是______。


正确答案:611
6,11

第6题:

●试题一

阅读下列函数说明和C代码,把应填入其中n处的字句写在答卷的对应栏内。

【函数1.1说明】

函数strcpy(char*to,char*from)将字符串from复制到字符串to。

【函数1.1】

void strcpy(char*to,char*from)

{while( ( 1 ) );}

【函数1.2说明】

函数merge(int a[ ],int n,int b[ ],int m,int *c)是将两个从小到大有序数组a和b复制合并出一个有序整数序列c,其中形参n和m分别是数组a和b的元素个数。

【函数1.2】

void merge(int a[ ],int n,int b[ ],int m,int *c)

{ int i,j;

for(i=j=0;i<n && j<m;)

*c++=a[i]<b[j]? a[i++]:b[j++];

while( (2) )*c++=a[i++];

while( (3) )*c++=b[j++];

}

【函数1.3说明】

递归函数sum(int a[ ],int n)的返回值是数组a[ ]的前n个元素之和。

【函数1.3】

int sum(int a[ ],int n)

{ if(n>0)return (4) ;

else (5) ;

}


正确答案:

●试题一

【答案】(1)*to++=*from++ 或 (*to++=*from++)!=′\0

(2)i<n i!=n(3)j<m 或 j!=m

(4)an-1+sum(an-1);或 a0+sum(a+1n-1)(5)return 0

【解析】(1)完成字符的复制,并使指针指向下一元素。(2)当出现某一数组所有元素均已合并完成,则将另一数组其他元素直接进行复制。b串已复制完。(3)判断a串是否已复制完。(4)递归函数sun()完成数组n个元素的累加,当n>0时,使用规模为n-1的函数进行递归。(5)n<=0时,返回0即可。

 

第7题:

●试题三

阅读下列函数说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。

【说明】

函数move(int*a,int n)用于整理数组a[]的前n个元素,使其中小于0的元素移到数组的前端,大于0的元素移到数组的后端,等于0的元素留在数表中间。

令a[0]~a[low-1]小于0(初始为空);a[low]~a[i-1]等于0(初始为空);a[i]~a[high]还未考察,当前考察元素为a[i]。a[high+1]~a[n-1]大于0(初始为空)。

【函数】

move(int*a,int n)

{

int i,low,high,t;

low=i=0;high=n-1;

while( (1) )

if(a[i]<0)

{

t=a[i];a[i]=a[low];a[low]=t;

(2) ;i++;

}

else if( (3) )

{t=a[i];a[i]=a[high];a[high]=t;

(4) ;

}

else (5) ;

}


正确答案:

●试题三

【答案】(1)i<=high(2)low++(3)ai>0(4)high--(5)i++

【解析】程序的说明已经对程序的功能和相关变量解释得很清楚了,这儿就不再重复了。由变量i、变量low和变量high的含义和初值可以判断,ihigh之间的元素还未处理,因此while循环条件是"i<=high"或其等价形式,这就是(1)空所填写的内容。

(2)空所在语句块是处理当ai<0的情况,显然这时需要将ai]与alow]进行交换,交换后需要将ilow都要向后移动,因此(2)空处应填写"low++"或其等价形式。

(3)空需要填写执行(4)空所在语句块的条件,由(4)空所在语句块的可以判断,它是处理当ai>0的情况,因此(3)空处应填写"ai>0"或其等价形式。当ai>0时,需要将ai]与ahigh]进行交换,交换后需要将high都要向前移动,因此(4)空处应填写"high--"或其等价形式。注意这时i不能向后移动,因为交换后的ai]还没有处理,需要循环的下一趟进行处理。

ai=0情况,当ai=0时,不需要进行元素交换,只需将i向后移动就可以了,因此(5)空处应填写"i++"或其等价形式。

 

第8题:

●试题八

阅读以下说明和Java代码,将解答写入答题纸的对应栏内。

【说明】

下面的程序中定义了两个方法求自然数1~100的和。具体如下:int sum1(int n);利用循环求1~n的和,int sum2(int n);利用递归方法求和1~n的和;在main()方法中调用这两个方法求1~100的和并显示。在程序的每条横线处填写一个适当的语句,使程序的功能完整。

public class Sum{

public static void main (1)

{

//1.调用sum1(int n),求1~100的和

//标准输出

(2) ("1~100的和:"+sum1(100));

//2.调用sum2(int n),求1~100的和

//标准输出

(2) ("1~100的和:"+sum2(100));

}

static int sum1(int n)

{

int result=0;

for(int i=1;i<=n;i++)

(3)

retrun result;

}

static int sum2(int n)

{

if (4)

return 1;

else

(5)

}

}


正确答案:

●试题八

【答案】 (1)String args[](2)System.out(3)result=result + n;或等价形式(4)n==1

(5)return n+sum2(n-1)

【解析】此处为Java主函数的参数,是固定写法。Java程序的标准输出是调用System包的out对象的函数。循环累加。这是递归调用的结束条件。对n-1进行递归调用,并返回nn-1个整数和的和。

 

第9题:

阅读以下说明和Java代码,将解答写入对应栏内。

【说明】

下面的程序中定义了两个方法求自然数1~100的和。具体如下:int suml(int n);利用循环求1~n的和,int sum2(int n);利用递归方法求和1~n的和;在main()方法中调用这两个方法求1~100的和并显示。在程序的每条横线处填写一个适当的语句,使程序的功能完整。

public class Sum {

public static void main (1)

{

//1. 调用sum1(int n),求1~100的和

//标准输出

(2) ("1~100的和:" +sum1(100));

//2. 调用sum2(int n),求1~100的和

//标准输出

(2) ("1~100的和:"+sum2(100));

}

static iht sum1( int n)

{

int result=0;

for(int i=1;i<=n;i++)

(3)

retrun result;

}

static int sum2(int n)

{

if (4)

return 1

else

(5)

}

}


正确答案:(1)String args[] (2)System. out (3)result=result+n;或等价形式 (4)n==1; (5)return n+sum2 (n-1);
(1)String args[] (2)System. out (3)result=result+n;或等价形式 (4)n==1; (5)return n+sum2 (n-1); 解析:此处为Java主函数的参数,是固定写法。Java程序的标准输出是调用System包的out对象的函数。循环累加。这是递归调用的结束条件。对n-1进行递归调用,并返回n和n-1个整数和的和。

第10题:

阅读下列程序说明和C代码,把应填入其中n处的字句写在答卷的对应栏内。

【说明】

程序利用选择排序算法对数组a中的N个整数按照从小到大的顺序排列,并将排序结果显示出来。

【程序】

define N 10

main()

{

void (1);

int i,a[N];

for(i=0;i<10,i++) /*输入*/

scanf(“%d”,&a[i]);

(2);

for(i=0;i<N,i++) /*输出*/

printf(“%3d”,a[i]);

}

void selectSon(int x[],int n)

{

int i,j,k,t;

for(int i=0; (3);i++)

{

k=i;

for(j=i+1;j<n;j++)

if (4) k=j;

if (5)

{t=x[i];x[i]=x[k];x[k] =t;}

}

}


正确答案:(1)selectSort()
(1)selectSort() 解析:main函数中对selectSort函数的调用在定义之前,所以要进行说明。

更多相关问题