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

阅读下列说明和C代码,回答问题 1 至问题 3,将解答写在答题纸的对应栏内。 【说明】 假币问题:有n

枚硬币,其中有一枚是假币,己知假币的重量较轻。现只有一个天平,要求用尽量少的比较次数找出这枚假币。 【分析问题】 将n枚硬币分成相等的两部分: (1)当n为偶数时,将前后两部分,即 1...n/2和n/2+1...0,放在天平的两端,较轻的一端里有假币,继续在较轻的这部分硬币中用同样的方法找出假币: (2)当n为奇数时,将前后两部分,即1..(n -1)/2和(n+1)/2+1...0,放在天平的两端,较轻的一端里有假币,继续在较轻的这部分硬币中用同样的方法找出假币;若两端重量相等,则中间的硬币,即第 (n+1)/2枚硬币是假币。 【C代码】 下面是算法的C语言实现,其中: coins[]: 硬币数组 first,last:当前考虑的硬币数组中的第一个和最后一个下标 include <stdio.h> int getCounterfeitCoin(int coins[], int first,int last) { int firstSum = 0,lastSum = 0; int ì; If(first==last-1){ /*只剩两枚硬币*/ if(coins[first] < coins[last]) return first; return last; } if((last - first + 1) % 2 ==0){ /*偶数枚硬币*/ for(i = first;i <(1 );i++){ firstSum+= coins[i]; } for(i=first + (last-first) / 2 + 1;i < last +1;i++){ lastSum += coins[i]; } if(2 ){ Return getCounterfeitCoin(coins,first,first+(last-first)/2;) }else{ Return getCounterfeitCoin(coins,first+(last-first)/2+1,last;) } } else{ /*奇数枚硬币*/ For(i=first;i<first+(last-first)/2;i++){ firstSum+=coins[i]; } For(i=first+(last-first)/2+1;i<last+1;i++){ lastSum+=coins[i]; } If(firstSum<lastSum){ return getCounterfeitCoin(coins,first,first+(last-first)/2-1); }else if(firstSum>lastSum){ return getCounterfeitCoin(coins,first+(last-first)/2-1,last); }else{ Return(3 ) } } }

【问题一】 根据题干说明,填充C代码中的空(1)-(3) 【问题二】 根据题干说明和C代码,算法采用了()设计策略。 函数getCounterfeitCoin的时间复杂度为()(用O表示)。 【问题三】 若输入的硬币数为30,则最少的比较次数为(),最多的比较次数为()。

查看答案
答案
收藏
如果结果不匹配,请 联系老师 获取答案
您可能会需要:
您的账号:,可能还需要:
您的账号:
发送账号密码至手机
发送
安装优题宝APP,拍照搜题省时又省心!
更多“阅读下列说明和C代码,回答问题 1 至问题 3,将解答写在答…”相关的问题
第1题
阅读下列说明,回答问题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设计测试用例,使之满足基本路径覆盖的要求。

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

点击查看答案
第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题
试题一(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 设计测试用例,使之满足基本路径覆盖要求。

点击查看答案
第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至问题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)

点击查看答案
第6题
阅读以下技术说明和C语言代码,根据要求回答问题1至问题6。 【说明】 有两个进程(编号分别为0和1)需

阅读以下技术说明和C语言代码,根据要求回答问题1至问题6。

【说明】

有两个进程(编号分别为0和1)需要访问同一个共享资源。为了解决竞争条件(race condition)的问题,需要实现一种互斥机制,使得在任何时刻只能有一个进程访问该共享资源。以下【C代码1】给出了一种实现方法。

【C代码1】

int flag[2]; /+flag数组,初始化为FALSE*/

Enter_Critical_Section(int my_task_id, int other_task_id)

{ while (flag[other_task_id]==TRUE); /*空循环语句*/

flag[my_task_id]=TRUE;

}

Exit_Critical_Section(int my_task_id, int other_task_id)

{ flag[my_task_id]=FALSE;

}

当一个进程要访问临界资源时,就可以调用【C代码1】给出的这两个函数。【C代码2】给出了进程0的一个例子。

【C代码2】

Enter_Critical_Section(0,1);

……使用这个资源……

Exit_Critical_Section(0,1);

……做其他的事情……

什么是临界资源(critical resource)?请用100字以内的文字简要说明。

点击查看答案
第7题
阅读下列说明,回答问题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的取值设计测试用例,使用例集满足基本路径覆盖标准。

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

点击查看答案
第8题
阅读以下应用说明、图和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)空缺处的内容补充完整。

点击查看答案
第9题
阅读以下说明,回答问题1至问题2,将解答填入对应栏内。【说明】 天意公司是一家汽车零部件生产企业,

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

【说明】

天意公司是一家汽车零部件生产企业,在网上有定制生产服务项目。近日公司接到一份新配件生产意向,用户希望公司做一个配件生产周期和经费预算方案,为合同签订做准备。下图是天意公司制定的工作计划甘特图。

阅读以下说明,回答问题1至问题2,将解答填入对应栏内。【说明】 天意公司是一家汽车零部件生产企业,阅

计算各工作的持续时间、最早开始时间,并分析每项工作的紧前工作代码,填入下表。

阅读以下说明,回答问题1至问题2,将解答填入对应栏内。【说明】 天意公司是一家汽车零部件生产企业,阅

点击查看答案
第10题
试题四(共15分)阅读下列说明和C代码,回答问题1至问题3,将解答写在答题纸的对应栏内。【说明】设有n

试题四(共15分)

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

【说明】

设有n个货物要装入若干个容量为C的集装箱以便运输,这n个货物的体积分别为{S1,S2,...,Sn},且有si≤C(1≤i≤ n)。为节省运输成本,用尽可能少的集装箱来装运这n个货物。

下面分别采用最先适宜策略和最优适宜策略来求解该问题。

最先适宜策略(firstfit)首先将所有的集装箱初始化为空,对于所有货物,按照所给的次序,每次将一个货物装入第一个能容纳它的集装箱中。

最优适宜策略(bestfit)与最先适宜策略类似,不同的是,总是把货物装到能容纳它且目前剩余容量最小的集装箱,使得该箱子装入货物后闲置空间最小。

【C代码】

下面是这两个算法的C语言核心代码。

(1)变量说明

n:货物数

C:集装箱容量

s:数组,长度为n,其中每个元素表示货物的体积,下标从0开始

b:数组,长度为n,b[i]表示第i+1个集装箱当前已经装入货物的体积,下标从0开始

i,j:循环变量

k:所需的集装箱数

min:当前所用的各集装箱装入了第i个货物后的最小剩余容量

m:当前所需要的集装箱数

temp:临时变量

(2)函数firstfit

int firstfit(){

inti,j;

k=0:

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

b[i]=0;

}

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

(1);

while(C-b[j]<s[i]){

j++;

}

(2);

k=k>(j+1)?k:(j+1);

}

returnk;

}

(3)函数bestfit

int bestfit() {

int i,j,min,m,temp;

k=0;

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

b[i]=0;

}

For (i=0;i<n;i++){

min=C;

m=k+l;

for(j=O;j< k+l;j++){

temp=C- b[j] - s[i];

if(temp>0&&temp< min){

(3) ;

m=j,

}

}

(4);

k=k>(m+1)?k:(m+1);

}

return k;

}

【问题1】(8分)

根据【说明】和【C代码】,填充C代码中的空(1)~(4)。

【问题2】(4分)

根据【说明】和【C代码】,该问题在最先适宜和最优适宜策略下分别采用了(5) 和(6)算法设计策略,时间复杂度分别为 (7) 和 (8)(用O符号表示)。

【问题3】(3分)

考虑实例n= 10,C= 10,各个货物的体积为{4,2,7,3,5,4,2,3,6,2}。该实例在最先适宜和最优适宜策略下所需的集装箱数分别为(9)和(10)。考虑一般的情况,这两种求解策略能否确保得到最优解?(11) (能或否)

点击查看答案
第11题
试题七(共 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;

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