[计算机类试卷]软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷50及答案与解析.doc

上传人:terrorscript155 文档编号:507219 上传时间:2018-11-29 格式:DOC 页数:16 大小:133.50KB
下载 相关 举报
[计算机类试卷]软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷50及答案与解析.doc_第1页
第1页 / 共16页
[计算机类试卷]软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷50及答案与解析.doc_第2页
第2页 / 共16页
[计算机类试卷]软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷50及答案与解析.doc_第3页
第3页 / 共16页
[计算机类试卷]软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷50及答案与解析.doc_第4页
第4页 / 共16页
[计算机类试卷]软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷50及答案与解析.doc_第5页
第5页 / 共16页
点击查看更多>>
资源描述

1、软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷 50及答案与解析 一、必答题(共 4道大题,每道大题 15分) 0 说明 一个新的音像商店准备向比较广泛的人群出租录像带和光碟。该商店的管理决定在计算机系统的支持下来运作。 音像商店在货架上存放着题材广泛的当前流行的电影库。由于同一个电影片名可能有于不同的导演而有不同的版本,因此电影用电影代码区分,而不用电影片名;同一个版本有多份拷贝,因此音像制品用一个唯一的编号标识。某个特定的电影可以存放在录像带或光碟上,录像带和光碟的租金不同。录像带要么是 Beta格式要么是 VHS格式;光碟为 DVD格式,容量比较大,一张光碟可以存储同一电影片

2、名的不同版本。每个电影都有特定的租用期(用天表示 ),并带有在租用期内的租金。音像商店必须能够立即回答关于某个电影的库存和有多少供租用的带子或光碟。 音像商店的店员负责定购音像、联系客户、音像上架,并对客户的询问给出答复。 该系统采用面向对象方法开发,系统中的类以及类之间的关系用 UML类图表示,图 1-1是该系统的用例图,图 1-2是该系统的类图的一部分。 图 1-1 1 根据题意,给出 “电影 ”类的主要属性。 2 根据 题意,指出图 1-1中缺失的用例。 2 说明 为了有效记录交通事故情况,欲设计一个交通事故记录系统。 一辆汽车有一个唯一的 “车牌号 ”,车主购买汽车时需要提供相关信息,

3、包括身份证、姓名、年龄、性别、地址等。一个车主可以拥有多辆汽车,而一辆汽车只有一个车主。驾驶员不一定是车主,因此记录交通事故时要记录驾驶员身份证号,同时记录事故发生时刻。 图 2-1描绘了人、汽车、交通事故三个实体类型及实体间联系的一个 E-R图。 图 2-1对应的关系模式为: 人 (身份证号,姓名,性别,年龄,地址 ) 汽车 (车牌号, 型号 ) 事故 (车牌号,身份证号,时刻,损失,描述 ) 拥有 (身份证号,车牌号 ) 3 指出每种关系模式的主键。 4 创建人表时, “身份证号 ”使用 INTEGER数据类型,并且要求此列值不能为空、值惟一,姓名列不能为空。请在下列用于创建表人的 SQL

4、语句空缺处填入正确的内容。 CREATE TABLE 人 (身份证号 INTEGER, 姓名 CHAR(20) (1) , 性别 CHAR(1), 年龄 INTEGER, 地址 CHAR(20), (2) ) 5 请在下列 SQL查询语句空缺处填入正确的内容 (1)查询身份证号为 “123456”的人作为驾驶员时所有的事故记录。 SELECT * FROM事故 WHERE (1) (2)查询身份证号为 “123456”的车主所拥有的汽车的事故记录。 SELECT * FROM事故 WHERE 车牌号 (2) (SELECT车牌号 FROM (3) WHERE身份证号 = “123456“) (

5、3)查询车牌号为 “123456”汽车在车主是驾驶员时的事故记录。 SELECT * FROM 事故 WHERE (4) (SELECT * FROM (5) WHERE 车牌号 = “123456“ AND (6) ) 6 阅读下列函数说明、图和 C代码,回答问题 说明 假定用一个整型数组表示一个长整数,数组的每个元素存储长整数的一位数字,则实际的长整数 m表示为: m=ak10k-2+ak-110k-3+a310+a2 其中 a1保存该长整数的位数, a0保存该长整数的符号: 0表示正数、 1表示负数。 运算时先决定符号,再进行绝对值运算。对于绝对值相减情况,总是绝对值较大的减去绝对值较小

6、的,以避免出现不够减情况。注意,不考虑溢出情况,即数组足够大。 函数 int cmp(int *LA, int *LB); /*比较长整数 LA与 LB的绝对值大小 */ /*若 LA绝对值较大返回正值, LA较小返回负值,相等则返回 0*/ int ADD (int *LA, int *LB, int *LC) /*计算长整数 LA与 LB的和,结果存储于 LC中 */ /*注意:正数与 负数的和相当于正数与负数绝对值的差 */ /*数据有误返回 0,正常返回 1*/ if(LA = NULL | LB = NULL | LC = NULL)return 0; int *pA, *pB, i

7、, N, carry, flag; flag = LA0 + LB0; switch(flag) /*根据参与运算的两个数的符号进行不同的操作 */ case 0: case 2: Lc0 = LA0;/*LA与 LB同号,结果符 号与 LA(LB)相同 */ pA = LA; pB = LB; (1) ; break; case 1: /*LA与 LB异号 */ /*比较两者的绝对值大小,结果符号与较大者相同 */ flag = (2) ; if(flag 0) /*LA较大 */ LC0 = LA0; pA = LA; pB = LB; else if(flag LB1 ? LA1 : L

8、B1; for(i = 0; i = pA1)/*LA计算完毕 */ carry += flag * pBi+2; else if(i = pB1)/*LB计算完毕 */ carry += pAi+2; else carry += pAi+2 + flag * pBi+2; LCi+2 = carry % 10; carry /= 10; if( (4) )/*需要借位,针对减法 */ LCi+2 += 10; carry-; /*for*/ if( (5) )/*最高进位,针对加法 */ LCi+2 = carry; i+; if(LCi+1 = 0) i-; /*若最高位为零,针对减法 *

9、/ LC1 = i; return 1; ;/*ADD*/ 7 阅读下列函数说明、图和 C代码,回答问题 说明 在进行文法 分析的时候,通常需要检测一个单词是否在我们的单词列表里。为了提高查找和定位的速度,通常都要画出与单词列表所对应的单词查找树。 程序构造一棵二叉排序树,每个节点存储一个单词,按字典序列,较小的在左子树,较大的在右子树。 函数中使用的预定义符号如下: typedef struct TreeNode/*二叉排序树节点 */ char *word; struct TreeNode *left, *right; BNODE; 函数 int getWord(FILE *fpt, ch

10、ar *word) /*从文件 fpt中读取单词到 word中,到达文件结束时返回 0*/ char c; c = fgetc(fpt); if(c = EOF)return 0; /*跳过单词间的非字母字符 */ while(!(tolower(c) = a ptr = (BNODE*)malloc(sizeof ptr); ptr-left = ptr-right = NULL; ptr-word = (char*)malloc(strlen(word) + 1); strcpy(ptr-word, word); if(p = NULL) (4) ; else if(compres 0)

11、p-right = ptr; else p-left = ptr; int main() FILE *fpt; char word40; BNODE *root = NULL; if(fpt = fopen(“text.in“, “r“) = NULL) printf(“不能打开文件 text.in! n“); return 1; while(getWord(fpt, word) = 1) BTree (5) ; fclose(fpt); return 0; 8 阅读下列函数说明和 C+代码,回答问题 说明 任何一种程序都是为了解决问题而撰写的,解决问题时需要实现一些特定的运算法则。在策略 (

12、Strategy)模式下,可以更换实现算法的部分而不留痕迹,切换整个算法,简化改为采用其他方法来解 决同样问题。 以下是一个 “剪刀石头布 ”游戏。猜拳时的 “策略 ”有 2种方法:第一种是 “猜赢后继续出同样的招式 ”(WinningStrategy),第二种是 “从上一次出的招式中,以概率分配方式求出下一个招式的几率 ”(ProbStrategy)。程序中定义了 Hand类表示猜拳时的“手势 ”,类内部以 0(石头 )、 1(剪刀 )、 2(布 )来表示。 Hand类的实例只会产生 3个。以下是 C+语言实现,能够正确编译通过。 C+代码 class Hand private: int h

13、andvalue; 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

14、) 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;

15、 /*省略具体实现 */ 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) ; ; 9 阅读以下说明和 Java代码,回答问题 说明 任何一种程序都是为了解决问题而撰写的,解决问题时需要实现一些特定的运算法则。在策略 (Str

16、ategy)模式下,可以更换实现算法的部分而不留痕迹,切换整个算法,简化改为采用其他方法来解决同样问题。 以下是一个 “剪刀石头布 ”游戏。猜拳时的 “策略 ”有 2种方法:第一种是 “猜赢后继续出同样的招式 ”(WinningStrategy),第二种是 “从上一次出的招式种,以概率分配方式求出下一个招式的几率 ”(ProbStrategy)。程序中定义了 Hand类表示猜拳时的“手势 ”,类内部以 0(石头 )、 1(剪刀 )、 2(布 )来表示。 Hand类的实例只会产生 3个。 以下是 Java语言实现,省略了不相关属性及方法,方法实现体亦有所省略,能够正确编译通过。 Java代码 /

17、Hand.java文件 public class Hand public static final int HANDVALUE_GUU = 0; /石头 public static final int HANDVALUE_CHO = 1; /剪刀 public static final int HANDVALUE_PAA = 2; /布 public static final Hand hand = new Hand(HANDVALUE_GUU), new Hand(HANDVALUE_CHO), new Hand(HANDVALUE_PAA), ; private int handvalue

18、; (1) Hand(int handvalue) this.handvalue = handvalue; public (2) Hand getHand(int handvalue)(/从值取得对象实例 return handhandvalue; /Strategy.java文件 public interface Strategy public (3) Hand nextHand(); /ProbStrategy.java文件 import java.util.Random; public class ProbStrategy implements Strategy public Hand

19、nextHand() int handvalue = 0; /*省略具体实现 */ return Hand.getHand(handvalue); /WinningStrategy.java文件 import java.util.Random; public class WinningStrategy implements Strategy /*省略了不相关属性 */ public Hand nextHand() if(!won) prevHand = Hand.getHand(random.nextInt(3); return prevHand; /Player.java文件 public

20、class Player private String name; private Strategy strategy; public Player(String name, (4) strategy) this.name = name; this.strategy = strategy; public Hand nextHand()/向战略请示手势 return (5) ; 10 阅读以下函数说明和 C代码,回答问题 说明 任何一种程序都是为了解决问题而撰写的,解决问题时需要实现一些特定的运算法则。在策略 (Strategy)模式下,可以更换实现算法的部分而不留痕迹,切换整个算法,简化改为采

21、用其他方法来解决同样问题。 以下是一个 “剪刀石头布 ”游戏。猜拳时的 “策略 ”有 2种方法:第一种是 “猜赢后继续出同样的招式 ”(WinningStrategy),第二种是 “从上一次出的招式种,以概率分配方式求出下一个招式的几率 ”(ProbStrategy)。程序中定义了 Hand类表示猜拳时的“手势 ”,类内部以 0(石头 )、 1(剪刀 )、 2(布 )来表示。 Hand类的实例只会产生 3个。 以下是 C语言实现,省略了不相关属性及方法,方法实现体亦有所省略,能够正确编译通过。 C代码 typedef (1) (*funl)(); enum HandValueHANDVALUE

22、_GUU=0, HANDVALUE_CHO=1, HANDVALUE_PAA=2; /手势可取值,依次为 “石头 ”、 “剪刀 ”、 “布 ” /其大 小顺序是循环相克的,即:石头赢剪刀,剪刀赢布,布赢石头 bool won; struct Hand *WSprevHand; struct Hand/手势 enum HandValue handvalue; hand3=HANDVALUE_GUU, HANDVALUE_CHO, HANDVALUE_PAA; int fight(struct Hand *h1, struct Hand *h2) /比较 h1和 h2。 h1代表的手势较大时返回

23、1, h1较小时 返回 -1,相等时返回 0 / if(h1-handvalue = h2-handvalue) return 0; else if(h1-handvalue+1)% (2) = h2handvalue) return 1; else return -1; struct Hand* getHand(int handvalue) /依据手势代表的值取得手势,若 handvalue不合法,返回 NULL switch(handvalue) case 0: return break; case 1: return bteak; case 2; return break; return

24、 (3) ; struct Strategy/策略 funl nextHand;/下一个手势 ; struct Hand* WSnextHand() if(!won) PSprevHand = getHand(rand()%3); return PSprevHand; struct Player char name20; (4) strategy;/策略 int wincount; int losecount; int gamecount; ; void main() Strategy WS; WS.nextHand = WSnextHand; WSpreVHand = NULL; struc

25、t Player WSplayer; (5)(WSplayer.name,“ww“); WSplayer.wincount = 0; WSplayer.losecount = 0; WSplayer.gamecount = 0; WSplayer.strategy = 软件水平考试(中级)软件设计师下午(应用技术)试题模拟试卷 50答案与解析 一、必答题(共 4道大题, 每道大题 15分) 1 【正确答案】 电影代码、电影片名、导演 2 【正确答案】 (A)“定购音像 ” (B)“联系客户 ” 3 【正确答案】 人:身份证汽车:车牌号 事故: (车牌号,身份证 ) 拥有:车牌号 4 【正确答案

26、】 (1)NOT NULL (2)PRIMARY KEY(身份证号 ) 5 【正确答案】 (1)身份证号 =“123456“ (2)IN (3)拥有 (4)EXISTS (5)拥有 (6)拥有 .身份证号 = 事故 .身份证号 6 【正确答案 】 flag=1 cmp(LA,LB) carry=0 LCi+2 0 carry 7 【正确答案】 ptr=*t ptr-word p=ptr *t=ptr ” 及 “Strategy WS;” 可知,结构体WSplayer的 strategy应该是 Strategy结构体指针。故空 (4)应填 struct Strategy*。 最后来看空 (1)。这明显是一个函数指针,函数指针的定义:函数返回类型函数指针变量名 (参数列表 )。故空 (1)是该函数的函数返回类型。用到该定义的是在结构体 Strategy中, “funl nextHand;/下一个手势 ”,此处只是一个 声明,不能判断其返回类型,真正应用的是语句 “WS.nextHand = WSnextHand;” ,而其右端的函数原型为 struct Hand* WSnextHand(),因此该函数指针的返回类型应为 struct Hand*。故空 (1)应填 struct Hand*。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试资料 > 职业资格

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1