首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
阅读以下函数说明和C代码,回答问题 [说明] 任何一种程序都是为了解决问题而撰写的,解决问题时需要实现一些特定的运算法则。在策略(Strategy)模式下,可以更换实现算法的部分而不留痕迹,切换整个算法,简化改为采用其他方法来解决同样问题。 以
阅读以下函数说明和C代码,回答问题 [说明] 任何一种程序都是为了解决问题而撰写的,解决问题时需要实现一些特定的运算法则。在策略(Strategy)模式下,可以更换实现算法的部分而不留痕迹,切换整个算法,简化改为采用其他方法来解决同样问题。 以
admin
2012-02-20
35
问题
阅读以下函数说明和C代码,回答问题
[说明]
任何一种程序都是为了解决问题而撰写的,解决问题时需要实现一些特定的运算法则。在策略(Strategy)模式下,可以更换实现算法的部分而不留痕迹,切换整个算法,简化改为采用其他方法来解决同样问题。
以下是一个“剪刀石头布”游戏。猜拳时的“策略”有2种方法:第一种是“猜赢后继续出同样的招式”(WinningStrategy),第二种是“从上一次出的招式种,以概率分配方式求出下一个招式的几率”(ProbStrategy)。程序中定义了Hand类表示猜拳时的“手势”,类内部以0(石头)、1(剪刀)、2(布)来表示。Hand类的实例只会产生3个。
以下是C语言实现,省略了不相关属性及方法,方法实现体亦有所省略,能够正确编译通过。
[C代码]
typedef (1) (*funl)();
enum HandValue{HANDVALUE_GUU=0, HANDVALUE_CHO=1, HANDVALUE_PAA=2};
//手势可取值,依次为“石头”、“剪刀”、“布”
//其大小顺序是循环相克的,即:石头赢剪刀,剪刀赢布,布赢石头
bool won;
struct Hand *WSprevHand;
struct Hand{//手势
enum HandValue handvalue;
}hand[3]={HANDVALUE_GUU, HANDVALUE_CHO, HANDVALUE_PAA};
int fight(struct Hand *h1, struct Hand *h2)
//比较h1和h2。h1代表的手势较大时返回1,h1较小时返回-1,相等时返回0
//
{
if(h1->handvalue == h2->handvalue){
return 0;
}else if((h1->handvalue+1)% (2) == h2>handvalue){
return 1;
}else{
return -1;
}
}
struct Hand* getHand(int handvalue){
//依据手势代表的值取得手势,若handvalue不合法,返回NULL
switch(handvalue){
case 0:
return &hand[0];
break;
case 1:
return &hand[1];
bteak;
case 2;
return &hand[2];
break;
}
return (3) ;
}
struct Strategy{//策略
funl nextHand;//下一个手势
};
struct Hand* WSnextHand()
{
if(!won){
PSprevHand = getHand(rand()%3);
}
return PSprevHand;
}
struct Player{
char name[20];
(4) strategy;//策略
int wincount;
int losecount;
int gamecount;
};
void main()
{
Strategy WS;
WS.nextHand = WSnextHand;
WSpreVHand = NULL;
struct Player WSplayer;
(5)(WSplayer.name,"ww");
WSplayer.wincount = 0;
WSplayer.losecount = 0;
WSplayer.gamecount = 0;
WSplayer.strategy = &WS;
}
选项
答案
struct Hand* 3 NULL struct Strategy* strcpy
解析
条件(h1->handvalue+1)% (2) ==h2->handvalue是指h1大于h2,根据手势间大小顺序:石头(0)赢剪刀(1),剪刀(1)赢布(2),布(2)赢石头(0)。可得应填3。例如h1为布(2),h2为石头(0)时,h1->handvalue+1)% (2) 的值应为0。所以空(2)填3。
handvalue取值为:0、1、2,由注释“若handbalue不合法,返回NULL”可得空(3)应填NULL。
先看空(5)。结构体WSplayer的strategy是字符数组,对字符数组的赋值需要调用strcpy库函数。故空(5)应填strcpy。
来看空(4)。由语句“WSplayer.strategy = &WS;”及“Strategy WS;”可知,结构体WSplayer的strategy应该是Strategy结构体指针。故空(4)应填struct Strategy*。
最后来看空(1)。这明显是一个函数指针,函数指针的定义:函数返回类型函数指针变量名(参数列表)。故空(1)是该函数的函数返回类型。用到该定义的是在结构体Strategy中,“funl nextHand;//下一个手势”,此处只是一个声明,不能判断其返回类型,真正应用的是语句“WS.nextHand = WSnextHand;”,而其右端的函数原型为struct Hand* WSnextHand(),因此该函数指针的返回类型应为struct Hand*。故空(1)应填struct Hand*。
转载请注明原文地址:https://kaotiyun.com/show/klDZ777K
本试题收录于:
软件设计师下午应用技术考试题库软考中级分类
0
软件设计师下午应用技术考试
软考中级
相关试题推荐
针对下列程序段,对于(A,B)的取值,以下(57)测试用例组合能够满足条件覆盖的要求。IF((A-10)=20AND(B+20)>10)THENC=0IP((A-30)<10AND(B-30)<0)THENB=30①A=5
堆是一种数据结构,分为大顶堆和小顶堆两种类型。大(小)顶堆要求父元素大于等于(小于等于)其左右孩子元素。则________________是一个小顶堆结构。堆结构用二叉树表示,则适宜的二叉树类型为________________。对于10个结点的小顶堆,其
堆是一种数据结构,分为大顶堆和小顶堆两种类型。大(小)顶堆要求父元素大于等于(小于等于)其左右孩子元素。则________________是一个小顶堆结构。堆结构用二叉树表示,则适宜的二叉树类型为________________。对于10个结点的小顶堆,其
面向对象分析与设计是面向对象软件开发过程中的两个重要阶段,下列活动中,(25)不属于面向对象分析阶段。
某企业有生产部和销售部,生产部负责生产产品并送入仓库,销售部从仓库取出产品销售。假设仓库可存放n件产品。用PV操作实现他们之间的同步过程如下图所示。其中,信号量S是一个互斥信号量,初值为(1);S1是一个(2);S2是一
系统功能测试过程中,验证需求可以正确实现的测试用例称为(32)。
在计算机系统中常用的输入/输出控制方式有无条件传送、中断、程序查询和DMA等。其中,采用______方式时,不需要CPU控制数据的传输过程。
在性能测试中,关于数据准备,(65)描述是正确的。①识别数据状态验证测试案例。②初始数据提供了基线用来评估测试执行的结果。③业务数据提供负载压力背景。④脚本中参数数据真实模拟负载。
序言性注释是指在每个程序或模块开头的一段说明,起辅助理解程序的作用,一般包括:程序的表示、名称和版本号;程序功能描述;接口与界面描述;输入输出数据说明:开发历史;与运行环境有关的信息等。下列叙述中不属于序言性注释的是(23)。
随机试题
下列关于骨软骨瘤的叙述正确的是
A.免疫电泳B.免疫固定电泳C.交叉免疫电泳D.对流免疫电泳E.火箭免疫电泳将区带电泳和火箭电泳相结合的技术
患者,男,33岁。双手及膝盖烫伤,有大小不等的水疱,剧烈疼痛。该患者的烫伤已伤及皮肤的
道路工程中的路面等级可划分为高级路面、次高级路面、中级路面和低级路面等,其划分的依据有()。【2005年真题】
下列哪项不构成企业的收入()。
个人进行金融投资主要面临( )税收。
非上市债券的风险报酬率主要取决于()。
试从班级授课制的特点出发,论述实行小班化教学的优越性。
如下图所示,连接在HUB上的4台计算机要求划分在2个VLAN中,HUB上连的交换机应采用的VLAN划分方法是
李氏(Lee)化学公司是全球第三大化学公司,年销售额达280亿美元。李氏生产化工产品、塑料和农用产品,并为180个国家的客户提供服务。李氏在世界各地拥有员工56000人。现诚聘秘书1人。工作职责:准备月报及有关文件等日常秘书工作条件:获英语或秘
最新回复
(
0
)