itgle.com

阅读下列函数说明和C++代码,回答问题[说明]任何一种程序都是为了解决问题而撰写的,解决问题时需要实现一些特定的运算法则。在策略(Strategy)模式下,可以更换实现算法的部分而不留痕迹,切换整个算法,简化改为采用其他方法来解决同样问题。以下是一个“剪刀石头布”游戏。猜拳时的“策略”有2种方法:第一种是“猜赢后继续出同样的招式”(WinningStrategy),第二种是“从上一次出的招式中,以概率分配方式求出下一个招式的几率”(ProbStrategy)。程序中定义了Hand类表示猜拳时的“手势”,类

题目

阅读下列函数说明和C++代码,回答问题

[说明]

任何一种程序都是为了解决问题而撰写的,解决问题时需要实现一些特定的运算法则。在策略(Strategy)模式下,可以更换实现算法的部分而不留痕迹,切换整个算法,简化改为采用其他方法来解决同样问题。

以下是一个“剪刀石头布”游戏。猜拳时的“策略”有2种方法:第一种是“猜赢后继续出同样的招式”(WinningStrategy),第二种是“从上一次出的招式中,以概率分配方式求出下一个招式的几率”(ProbStrategy)。程序中定义了Hand类表示猜拳时的“手势”,类内部以0(石头)、1(剪刀)、2(布)来表示。Hand类的实例只会产生3个。以下是C++语言实现,能够正确编译通过。

[C++代码]

class Hand{

private:

int handvalue;

static Hand *hand0;

static Hand *hand1;

static Hand *hand2;

(1) ;

Hand(int handvalue){

this->handvalue = handvalue;

}

public:

(2) Hand* getHand(int handvalue){

/*省略具体实现*/

}

};

Hand *Hand::hand0 = new Hand(0);

Hand *Hand::hand1 = new Hand(1);

Hand *Hand::hand2 = new Hand(2);

class Strategy{

public:

(3) Hand* nextHand() = 0;

};

class WinningStrategy : public Strategy{

private:

bool won;

Hand *prevHand;

public:

winningStrategy(){

won = false;

}

Hand* nextHand(){

if(!won){

prevHand = Hand::getHand(rand()%3);

}

return prevHand;

}

};

class probstrategy : public Strategy{

public:

Hand* nextHand(){

int handvalue = 0;

/*省略具体实现*/

return Hand::getHand(handvalue);

}

};

class Player{

private:

string name;

Strategy* strategy;

public:

Player(string name, (4) strategy){

this->name = name;

this->strategy = strategy;

}

Hand *nextHand()(//向战略请示手势

return (5) ;

}

};


相似考题
更多“阅读下列函数说明和C++代码,回答问题[说明] 任何一种程序都是为了解决问题而撰写的,解决问题时需 ”相关问题
  • 第1题:

    阅读以下说明和C++代码。

    [说明]

    已知类SubClass的getSum方法返回其父类成员与类SubClass成员j的和,类 SuperClass中的getSum为纯虚拟函数。程序中的第23行有错误,请修改该错误并给出修改后的完整结果,然后完善程序中的空缺,分析程序运行到第15行且尚未执行第15行的语句时成员变量j的值,最后给出程序运行后的输出结果。

    [C++代码]


    正确答案:(1)this->j (2)SuperClass∷ 错误更正结果:SuperClass*s=new SubClass(-3); 变量i的值:0 运行结果:-32
    (1)this->j (2)SuperClass∷ 错误更正结果:SuperClass*s=new SubClass(-3); 变量i的值:0 运行结果:-3,2 解析:本题考查的是面向对象程序设计语言C++。
    考查的主要知识点为C++程序设计语言中类成员变量的初始化、父类成员方法的调用、对象的构造等。第一空要求用用参数j的值更新数据成员,由于成员变量名也为i因此需要明确地指出需要更新的变量j为类中的成员变量,可以在前面加上一个明确的前缀this来表示,因此(1)处应填写this->j:(2)处要求调用父类的成员方法getValue(),为了和子类中的getValue()相区别,需要加上域前缀,因此(2)处应该填写SuperClass∷,表明该函数属于类SuperClass;在程序的第23行,由于SuperClass s表明已经定义了一个对象,因此,后面不应该使用new再次分配一个对象,但是后面的程序代码将s作为一个对象指针使用,因此需要将s定义为一个指针,因此更改后结果应为:SuperClass*s= new SubClass(-3);当程序运行到第15行但是还没有执行15行的语句时,成员变量i的值应为构造函数初始化列表中指定的j的初始化值,本题目为0:最后程序的输出为-3和 2,-3为子类中成员变量j的值,而2表示父类中i的值和子类中i的值的和。

  • 第2题:

    简要说明解决问题的策略。


    正确答案:
    (1)启发式方法与算法式方法。所谓算法式是指将达到目标的各种可能的方法都算出来。根据现有问题状态与目标状态的相似关系,采取较少的操作来解决问题的方法就是启发式。
    (2)手段一目的分析法与爬山法。手段一目的分析就是把大的目标状态分成一个一个的小目标,然后进行算子(算子亦称操作者,指在思维中用以指导进行操作的计划和方法)搜索。爬山法是指通过评价当前的问题状态,从而增加这一状态与目标状态的差异,经过迂回前进最终达到解决问题的总目标。
    (3)目标递进策略与目标递归策略。利用现在的算子,沿着某条通路通过一个一个节点,逐级向目标递进。这就是目标递进策略。目标递归策略是从目标状态出发,按照子目标组成的逻辑顺序逐级向初始状态递归。

  • 第3题:

    在学习“程序设计语言的控制结构”这节课时,某教师撰写了如下的教学目标。仔细阅读,完成后面的题目。
    教学目标:
    让学生体会并理解循环结构解决问题的基本思想。
    掌握循环语句的用法。
    培养学生解决问题的能力。
    (1)根据新课程理念和要求,重新设计教学目标。教学目标要具体、明确、可评价,行为动词使用恰当。
    (2)确定教学重点和难点,并说明突破难点的措施。


    答案:
    解析:
    (1)教学目标:通过用不同结构编写程序解决同一问题,让学生体会并理解循环结构解决问题的基本思想;学会FOR循环语句的基本语法结构和用法;能够用FOR循环结构解决简单问题。 (2)教学重点:FOR循环用法。
    教学难点:理解循环结构解决问题的基本思想。
    使用与其他程序结构对比、同类迁移练习等方法来突破难点。

  • 第4题:

    在学习“程序设计语言的控制结构”这节课时,某教师撰写了如下的教学目标。仔细阅读,完成后面的题目。

    教学目标:

    让学生体会并理解循环结构解决问题的基本思想。

    掌握循环语句的用法。

    培养学生解决问题的能力。

    (1)根据新课程理念和要求,重新设计教学目标。教学目标要具体、明确、可评价,行为动词使用恰当。

    (2)确定教学重点和难点,并说明突破难点的措施。


    正确答案:
    (1)教学目标:通过用不同结构编写程序解决同一问题,让学生体会并理解循环结构解决问题的基本思想;学会FOR循环语句的基本语法结构和用法;能够用FOR循环结构解决简单问题。
    (2)教学重点:FOR循环用法。
    教学难点:理解循环结构解决问题的基本思想。
    使用与其他程序结构对比、同类迁移练习等方法来突破难点。

  • 第5题:

    在撰写公共关系调查报告时;既要阐述公共关系存在的问题,又应该说明解决问题所采取的措施。


    答案:对
    解析: