首页 > 软考
题目内容 (请给出正确答案)
[主观题]

阅读下列说明和C代码,回答问题1至问题3,将解答写在答题纸的对应栏内。 【说明】 采用归并排序

对n个元素进行递增排序时,首先将n个元素的数组分成各含n/2个元素的两个子数组,然后用归并排序对两个子数组进行递归排序,最后合并两个已经排好序的子数组得到排序结果。 下面的C代码是对上述归并算法的实现,其中的常量和变量说明如下: arr:待排序数组 p,q,r:一个子数组的位置从p到q,另一个子数组的位置从q+1到r begin,end:待排序数组的起止位置 left,right:临时存放待合并的两个子数组 n1,n2:两个子数组的长度 i,j,k:循环变量 mid:临时变量 【C代码】

inciude<stdio.h> inciude<stdlib.h> define MAX 65536 void merge(int arr[],int p,int q,int r) { int *left, *right; int n1,n2,i,j,k; n1=q-p+1; n2=r-q; if((left=(int*)malloc((n1+1)*sizeof(int)))=NULL) { perror("malloc error"); exit(1); } if((right=(int*)malloc((n2+1)*sizeof(int)))=NULL) { perror("malloc error"); exit(1); } for(i=0;i<n1;i++){ left[i]=arr[p+i]; } left[i]=MAX; for(i=0; i<n2; i++){ right[i]=arr[q+i+1] } right[i]=MAX; i=0; j=0; for(k=p; (1) ; k++) { if(left[i]> right[j]) { (2) ; j++; }else { arr[k]=left[i]; i++; } } } void mergeSort(int arr[],int begin,int end){ int mid; if((3) ){ mid=(begin+end)/2; mergeSort(arr,begin,mid); (4) ; merge(arr,begin,mid,end); } }

【问题1】 根据以上说明和C代码,填充1-4。 【问题2】 根据题干说明和以上C代码,算法采用了(5)算法设计策略。 分析时间复杂度时,列出其递归式位(6),解出渐进时间复杂度为(7)(用O符号表示)。空间复杂度为(8)(用O符号表示)。 【问题3】 两个长度分别为n1和n2的已经排好序的子数组进行归并,根据上述C代码,则元素之间比较次数为(9)。

查看答案
答案
收藏
如果结果不匹配,请 联系老师 获取答案
您可能会需要:
您的账号:,可能还需要:
您的账号:
发送账号密码至手机
发送
安装优题宝APP,拍照搜题省时又省心!
更多“阅读下列说明和C代码,回答问题1至问题3,将解答写在答题纸的…”相关的问题
第1题
试题一(15 分)阅读下列说明,回答问题1 至问题3,将解答填入答题纸的对应栏内。[说明]基本路径法设

试题一(15 分)

阅读下列说明,回答问题1 至问题3,将解答填入答题纸的对应栏内。

[说明]

基本路径法设计出的测试用例能够保证在测试中程序的每一条可执行语句至少执

行一次。以下代码由C++语言书写,请按要求回答问题。

void ReadPara(CString temp )

{

if (temp == ">=" )

m_oper.SetCurSel(0 );

else

{

if (temp == ">" )

m_oper.SetCurSel(1 );

else

{

if (temp == "==" )

m_oper.SetCurSel(2 );

else

{

if (temp == "<=" )

m_oper.SetCurSel(3 );

else

{

if (temp == "<" )

m_oper.SetCurSel(4 );

else

m_oper.SetCurSel(5 );

}

}

}

}

return;

}

[问题1](6 分)

请画出以上代码的控制流图。

[问题2](3 分)

请计算上述控制流图的环路复杂度 V(G)。

[问题3](6 分)

请使用基本路径测试法为变量 temp 设计测试用例,使之满足基本路径覆盖要求。

点击查看答案
第2题
阅读下列说明,回答问题1至问题3。[说明] 基本路径法设计出的测试用例能够保证在测试中程序的每一

阅读下列说明,回答问题1至问题3。

[说明]

基本路径法设计出的测试用例能够保证在测试中程序的每一条可执行语句至少执行一次。以下代码由C++语言书写,请按要求回答问题。

void ReadPara(CString temp)

{

if(temp==">=")

m_oper.SetCurSel(0);

else

{

if(temp==">")

m_oper.SetCurSel(1);

else

{

if(temp=="==")

m_oper.SetCurSel(2);

else

{

if(temp=="<=")

m_oper.SetCurSel(3);

else

{

if(temp=="<")

m_oper.SetCurSel(4);

else

m_oper.SetCurSel(5);

}

}

}

}

return;

}

请画出以上代码的控制流图。

请计算上述控制流图的环路复杂度V(G)。

请使用基本路径测试法为变量temp设计测试用例,使之满足基本路径覆盖要求。

请帮忙给出每个问题的正确答案和分析,谢谢!

点击查看答案
第3题
阅读下列说明,回答问题1至问题3。【说明】 使用基本路径法设计出的测试用例能够保证程序的每一条可

阅读下列说明,回答问题1至问题3。

【说明】

使用基本路径法设计出的测试用例能够保证程序的每一条可执行语句在测试过程中至少执行一次。以下代码由C语言书写,请按要求回答问题。

int IsLeap(int year)

{

if(year% 4==0)

{

if((year % 100==0)

{

if(year % 400==0'

leap=1;

eIse

leap=0;

}

else

leap=1;

else

leap=0;

return leap;

}

请画出以上代码的控制流图。

请计算上述控制流图的V(G)。

假设的取值范围是1000<year<2001,请使用基本路径测试法为变量year设计测试用例,使之满足基本路径覆盖的要求。

请帮忙给出每个问题的正确答案和分析,谢谢!

点击查看答案
第4题
阅读下列说明,回答问题1至问题3。【说明】 以下代码由C语言书写,能根据指定的年、月计算当月所含天数

阅读下列说明,回答问题1至问题3。

【说明】

以下代码由C语言书写,能根据指定的年、月计算当月所含天数。

int GetMaxDay(int year, int month )

{

int maxday = 0;

if (month >= 1 && month <= 12 )

{

if (month == 2 )

{

if (year % 4 == 0 )

{

if (year % 100 == 0 )

{

if (year % 400 == 0 )

maxday = 29;

else

maxday = 28;

}

else

maxday = 29;

}

else

maxday = 28;

}

else

{

if (month == 4 || month == 6 || month == 9 || month == || )

maxday = 30;

else

maxday = 31;

}

}

return maxday; }

请画出以上代码的控制流图。

请计算上述控制流图的环路复杂度V(G)。

假设year的取值范围是1000<year<2001,请使用基本路径测试法为变量year、 month设计测试用例(写出year取值、month取值、maxday预期结果),使之满足基本路径覆盖要求。

请帮忙给出每个问题的正确答案和分析,谢谢!

点击查看答案
第5题
阅读下列说明,回答问题1至问题3,将解答填入的对应栏内。[说明] 逻辑覆盖是通过对程序逻辑结构的遍

阅读下列说明,回答问题1至问题3,将解答填入的对应栏内。

[说明]

逻辑覆盖是通过对程序逻辑结构的遍历实现程序的覆盖,是设计白盒测试用例的主要方法之。以下代码由C浯言书写,请按要求回答问题。

void cal (int n)

{

int g, s, b, q;

if((n>1000) && (n<2000) )

{

g=n % 10;

s=n % 100 / 10;

b=n / 100 % 10;

q= n / 1000;

if((q+g) =={ s + b ) )

{

printf("%-5d",n);

}

}

printf("\n");

return;

}

请找出程序中所有的逻辑判断语句。

请分析并给出分别满足100%DC(判定覆盖)和100%CC(条件覆盖)时所需的逻辑条件。

假设n的取值范围是0<n<3000,请用逻辑覆盖法为n的取值设计测试用例,使用例集满足基本路径覆盖标准。

请帮忙给出每个问题的正确答案和分析,谢谢!

点击查看答案
第6题
阅读以下应用说明、图和C++代码,根据要求回答问题1至问题3。 [说明] 已知以下C++程序运行时的输出

阅读以下应用说明、图和C++代码,根据要求回答问题1至问题3。

[说明]

已知以下C++程序运行时的输出结果如下。

1:1

1:1

1:1

[C++程序]

01 include <iostream>

02 using namespace std;

03 class Stock{

04 protect:

05 (1) { };

06 Stock(int n, int pr=1) {

07 shares = n; share_val=pr;

08 };

09 void ~Stock() { };

10 public:

11 //成员函数

12 void output() {

13 (2)<< shares << ":" << share_val << endl;

14 }

15 private:

16 //成员变量

17 int shares;

18 int share_val;

19 };

20

21 void main() {

22 Stock a(1); a.output

23 Stock b; b.output

24 Stock c = Stock (); c.output

25 }

请根据C++程序运行时的输出结果,将代码中(1)、(2)空缺处的内容补充完整。

点击查看答案
第7题
阅读下列说明,回答问题1至问题5。【说明】 某工厂的信息管理数据库的部分关系模式如下所示: 职工(职

阅读下列说明,回答问题1至问题5。

【说明】

某工厂的信息管理数据库的部分关系模式如下所示:

职工(职工号,姓名,年龄,月工资,部门号,电话,办公室)

部门(部门号,部门名,负责人代码,任职时间)

关系模式的主要属性、含义及约束如表22-1所示,“职工”和“部门”的关系示例分别如表22-2和表22-3所示。

阅读下列说明,回答问题1至问题5。【说明】 某工厂的信息管理数据库的部分关系模式如下所示: 职工(职

根据上述说明,由SQL定义的“职工”和“部门”的关系模式,以及统计各部门的人数C、工资总数Totals、平均工资Averages的D_S视图如下所示,请在空缺处填入正确的内容。

Create Table 部门 (部门号 Char(1) (a)

部门名 Char(16),

负责人代码 Char(4),

任职时间 DATE,

(b) (职工号));

Create Table 职工 (职工号 Char(4),

姓名 Char(8),

年龄 NUMDER(3),

月工资 NUMDER(4),

部门号 Char(1),

电话 Char(8),

办公室 Char(8),

(a) (职工号),

(c) (部门号),

CHECK((d) ));

Create View D_S(D,C,Totals,Averages) As

(Select 部门号, (e)

from 职工

(f)

点击查看答案
第8题
试题七(共 15 分) 阅读下列说明、图和Java 代码,回答问题1 至问题3,将解答写在答题纸的对应栏内。

试题七(共 15 分)

阅读下列说明、图和Java 代码,回答问题1 至问题3,将解答写在答题纸的对应栏内。

[说明]

已知四个类之间的关系如图 7-1 所示,分别对每个类的方法进行编号,例如 Shape的 perimeter()为 1 号,表示为“1:perimeter()” ,Rectangle 类的 perimeter()为 2 号,表示为“2:perimeter()” ,依此类推,其中,每个类的 perimeter方法签名相同。

试题七(共 15 分) 阅读下列说明、图和Java 代码,回答问题1 至问题3,将解答写在答题纸的对

[Java 代码]

Triangle tr = new Triangle();

Square sq = new Square();

Shape sh = tr;

[问题 1] 关于上述 Java代码中 sh 和 tr 的以下叙述中,哪两个是正确的(写出编号) 。

① sh 和 tr 分别引用同一个对象;

② sh 和 tr 分别引用同一类型的不同的对象;

③ sh 和 tr 分别引用不同类型的不同对象;

④ sh 和 tr 分别引用同一个对象的不同拷贝;

⑤ sh 和 tr 所引用的内存空间是相同的。

[问题 2] 写出下面消息对应的方法编号(如果该消息错误或者没有对应的方法调用,请

填写“无” ) 。

tr.height() (1)

sh.perimeter() (2)

sq.height() (3)

sq.perimeter() (4)

sh.height() (5)

tr.perimeter() (6)

[问题 3] 下列赋值语句中哪两个是合法的(写出合法赋值语句的编号) 。

① sq = sh; ② sh = tr; ③ tr = sq; ④ sq = tr; ⑤ sh = sq;

点击查看答案
第9题
试题四(共20 分) 阅读以下说明和 C 语言代码, 回答问题 1 至问题3, 将解答填入答题纸的对应栏内。

试题四(共20 分)

阅读以下说明和 C 语言代码, 回答问题 1 至问题3, 将解答填入答题纸的对应栏内。

【说明】

在实时系统中, 许多控制软件需要将数据封装到一个数据结构中, 以节省存储空间。对于位操作,使用汇编语言实现其访问比较容易,但会增加编程难度,因此现在普遍采用 C 语言实现。使用高级语言编程要特别注意结构的存储格式以及编译器的特性。本题所使用的编译器对变量按声明顺序分配地址。分析图 4-1所示的 C 语言代码,回答以下问题。

试题四(共20 分) 阅读以下说明和 C 语言代码, 回答问题 1 至问题3, 将解答填入答题纸的对

【问题 1】 (8 分)

如果处理机按 16 位以大端方式(big_endian)编址,请在图 4-2 所示的存储器图表中填入 myRadarData 数据的存储内容(十六进制表示)。

试题四(共20 分) 阅读以下说明和 C 语言代码, 回答问题 1 至问题3, 将解答填入答题纸的对

【问题 2】 (8分)

在图 4-1 所示的程序中,第 22 行的语句执行完成后,下列语句的结果是多少?请将应填入(n)处的内容写在答题纸的对应栏中。

q->X = (1)

q->Y = (2)

q->Z = (3)

q->U = (4)

若再执行一次q++,则下列语句的结果又是多少?请将应填入(n)处的内容写在答题纸的对应栏中。

q->X = (5)

q->Y = (6)

q->Z = (7)

q->U = (8)

【问题 3】 (4 分)

内存空间常划分为代码段(text) 、数据段(data) 、bss 段(bss) 、堆区(heap)和栈区(stack) ,那么图 4-1 中 myRadarData 数组的存储空间应分配在哪个段中?指针变量 p、q 应分配在哪个段中?

点击查看答案
第10题
试题五(共 15 分) 阅读下列说明、图和C++代码,回答问题1 至问题3,将解答写在答题纸的对应栏内。 [

试题五(共 15 分)

阅读下列说明、图和C++代码,回答问题1 至问题3,将解答写在答题纸的对应栏内。

[说明]

已知四个类之间的关系如图 5-1 所示,分别对每个类的方法进行编号,例如 Shape的 perimeter()方法为 1 号,表示为“1:perimeter()” ,Rectangle 类的 perimeter()为2号,表示为“2:perimeter()” ,依此类推,其中,每个类的 perimeter方法都为虚函数且方法签名相同。

试题五(共 15 分) 阅读下列说明、图和C++代码,回答问题1 至问题3,将解答写在答题纸的对应栏

[C++代码]

Triangle *tr = new Triangle();

Square *sq = new Square();

Shape *sh = tr;

[问题 1] 关于上述 C++代码中 sh 和 tr 的以下叙述中,哪两个是正确的(写出编号) 。

① sh 和 tr 分别引用同一个对象;

② sh 和 tr 分别引用同一类型的不同的对象;

③ sh 和 tr 分别引用不同类型的不同对象;

④ sh 和 tr 分别引用同一个对象的不同拷贝;

⑤ sh 和 tr 所引用的内存空间是相同的。

[问题 2] 写出下面消息对应的方法编号(如果该消息错误或者没有对应的方法调用,请

填写“无” ) 。

tr->height() (1)

sh->perimeter() (2)

sq->height() (3)

sq->perimeter() (4)

sh->height() (5)

tr->perimeter() (6)

[问题 3] 不考虑内存释放问题,下列赋值语句中哪两个是合法的(写出合法赋值语句的

编号) 。

① sq = sh; ② sh = tr; ③ tr = sq; ④ sq = tr; ⑤ sh = sq;

点击查看答案
第11题
阅读下列说明,回答问题1至问题3。 【说明】 以下代码由C语言书写,在输入3个整数后,能够输出最大数和

阅读下列说明,回答问题1至问题3。

【说明】

以下代码由C语言书写,在输入3个整数后,能够输出最大数和最小数。

int main(void)

{

int a, b, c, max, min;

printf("input three numbers: ");

scanf("%d%d%d", &a, &b, &c);

if(a>b) /*判断1*/

{

max=a;

min=b;

}

else

{

max=b;

min=a;

}

if(max<c) /*判断2*/

max=c;

else if(min>c) /*判断3*/

min=c;

printf("max=%d\nmin=%d", max, min);

return 0;

}

请画出该程序段的控制流图,并分析该控制流图中有多少条线性独立路径(V(G)的值)。

为了用分支(判定)覆盖方法测试该程序,需要设计测试用例,使其能对该程序中的每个判断语句的各种分支情况全部进行过测试。

对两组输入数据(1)a=3,b=5,c=7;(2)a=4,b=6,c=5,请分别写出程序中各个判断语句的执行结果(以T表示真,以F表示假),填入答题纸的相应栏中。

上述两组测试数据是否能实现该程序的分支(判定)覆盖?如果能,请说明理由。如果不能,请再增设一组输入数据,使其能实现分支(判定)覆盖。

请帮忙给出每个问题的正确答案和分析,谢谢!

点击查看答案
退出 登录/注册
发送账号至手机
密码将被重置
获取验证码
发送
温馨提示
该问题答案仅针对搜题卡用户开放,请点击购买搜题卡。
马上购买搜题卡
我已购买搜题卡, 登录账号 继续查看答案
重置密码
确认修改