![[语言类考试复习资料大全]中级软件设计师下午试题模拟89_第1页](http://file2.renrendoc.com/fileroot_temp3/2021-5/22/1e0e164f-af38-426c-9d57-e8ba86b4b77b/1e0e164f-af38-426c-9d57-e8ba86b4b77b1.gif)
![[语言类考试复习资料大全]中级软件设计师下午试题模拟89_第2页](http://file2.renrendoc.com/fileroot_temp3/2021-5/22/1e0e164f-af38-426c-9d57-e8ba86b4b77b/1e0e164f-af38-426c-9d57-e8ba86b4b77b2.gif)
![[语言类考试复习资料大全]中级软件设计师下午试题模拟89_第3页](http://file2.renrendoc.com/fileroot_temp3/2021-5/22/1e0e164f-af38-426c-9d57-e8ba86b4b77b/1e0e164f-af38-426c-9d57-e8ba86b4b77b3.gif)
![[语言类考试复习资料大全]中级软件设计师下午试题模拟89_第4页](http://file2.renrendoc.com/fileroot_temp3/2021-5/22/1e0e164f-af38-426c-9d57-e8ba86b4b77b/1e0e164f-af38-426c-9d57-e8ba86b4b77b4.gif)
![[语言类考试复习资料大全]中级软件设计师下午试题模拟89_第5页](http://file2.renrendoc.com/fileroot_temp3/2021-5/22/1e0e164f-af38-426c-9d57-e8ba86b4b77b/1e0e164f-af38-426c-9d57-e8ba86b4b77b5.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、书山有路勤为径,学海无涯苦作舟。祝愿天下莘莘学子:学业有成,金榜题名!语言类考试复习资料大全中级软件设计师下午试题模拟89中级软件设计师下午试题模拟89本试卷共6道题。试题一至试题四是必答题,试题五和试题六选答一题。每题15分,满分75分。试题一问题:1. 请补充函数fun(),该函数的功能是:只保留字符串中的大写字母,删除其他字符,结果仍保存在原来的字符串中,由全局变量m对删除后字符串的长度进行保存。 注意:部分源程序给出如下。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。 试题程序: #includestdio.h #include
2、conio.h int m; void fun(char*s) int i=0,j=0; char *p=s; while(*(p+i) if(*(p+i)=A 答案:(1)sj+=*(p+i) (2)i+ (3)m=j试题二问题:1. 阅读以下说明和Java代码,将应填入 (n) 处的字句写在对应栏内。 【说明】 任何一种程序都是为了解决问题而撰写的,解决问题时需要实现一些特定的运算法则。在策略(Strategy)模式下,可以更换实现算法的部分而不留痕迹,切换整个算法,简化改为采用其他方法来解决同样问题。 以下是一个“剪刀石头布”游戏。猜拳时的“策略”有2种方法:第一种是“猜赢后继续出同样的
3、招式”(WinningStrategy),第二种是“从上一次出的招式种,以概率分配方式求出下一个招式的几率”(ProbStrategy)。程序中定义了Hand类表示猜拳时的“手势”,类内部以0(石头)、1(剪刀)、2(布)来表示。Hand类的实例只会产生3个。 以下是Java语言实现,省略了不相关属性及方法,方法实现体亦有所省略,能够正确编译通过。 【Java代码】 /Hand.java文件 public class Hand public static final int HANDVALUE_GUU=0; /石头 public static final int HANDVALUE_CHO=1
4、; /剪刀 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; (1) Hand (int handvalue) this.handvalue=handvalue; public (2) Hand getHand(int handvalue) /从值取得对象实例 return hand hand
5、value; /Strategy.java文件 public interface Strategy public (3) Hand nextHand(); /ProbStrategy.java文件 import java.util.Random; public class ProbStrategy implements Strategy public Hand nextHand () int handvalue=0; /*省略具体实现*/ return Hand.getHand (handvalue); /WinningStrategy.java文件 import java.util.Rand
6、om; public class WinningStrategy implements Strategy /*省略了不相关属性*/ public Hand nextHand() if(!won) prevHand=Hand.getHand(random.nextInt(3); return prevHand; /Player.java文件 public class Player private String name; private Strategy strategy; public Player(String name, (4) strategy) =name; this
7、.strategy=strategy; public Hand nextHand()/向战略请示手势 return (5) ; 答案:(1)private (2)static (3)abstract (4)Strategy (5)strategy.nextHand()解析 Hand类要保证只产生3个实例,就要求不能随便生成Hand类,因此其构造方法需要是private型的,故空(1)填private。 先看空(3),nexthand()是接口Strategy的方法,应为抽象方法,故空(3)应填abstract。 再来看空(2),由对getHand()方法的调用方式Hand.getHand(ha
8、ndvalue)及Hand.getHand(random.nextInt(3),可知该方法是类Hand的静态方法,故空(2)应填static。 由语句this.strategy=strategy;可知:this.strategy与strategy是同数据类型,this表示自身引用,而this.strategy是Strategy类型,故空(4)应填Strategy。 方法nextHand()是“向战略请示手势”,取得手势是通过其所采用的“策略”实现的,故空(5)应填strategy.nextHand()。 试题三问题:1. 阅读以下说明和C代码,将应填入 (n) 处的字句写在对应栏内。 【说明】
9、 下面程序用来将打乱的单词还原为原来的次序,比如将rty还原为try。单词的原来次序存储于wordlist.txt文件中,原则上可用穷举法(rty对应的穷举为:rty、ryt、try、tyr、ytr、yrt),但考虑到破译速度,采用如下方法: 注意到单词列表中不存在组成字符完全相同的单词(如Hack12与Hack21包含完全相同的字符),因此将单词中的字符进行重组再进行比较,例如,try单词重组为rty(按ASCII码顺序),这样不管打乱的单词是什么顺序,只要是由r、t、y三个字母组成的均破译为try,大大提高破译速度。程序中借助二叉排序树以进一步提高查找效率,二叉排序树左子树(如果有)上的节
10、点对应的值均小于根节点的值,右子树(如果有)上的节点对应的值均大于根节点的值。 函数中使用的符号定义如下: #define NumberofWords 1275 /单词总数 #define MaxLength 10 /最长单词所含字符数 char WordList NumberofWords MaxLength;/存储单词列表 int cmp(Node *q,Node *p);/q与p比较。p小,返回负值:p大返回正值;相等,返回0 typedef struct Node/二叉树节点 char *eleLetters;/重组后的字符串 int index;/对应单词表中的下标 struct N
11、ode *lChild, *rChild;/左右子节点 Node; 【C代码】 void reCompose(Node *p, char *temp) /重组,亦即将temp字符串中的字符升序排序,存储于p节点中 /采用直接插入排序法 char c; strcpy(p-eleLetters, temp);/ int len=strlen(temp); int i, j, k; for(i=0; ilen-1; i+) k=i; for(j=i+1; jlen; j+) if(p-eleLettersj p-eleLettersk)k=j; if (1) ) c=p-eleLettersi; p
12、-eleLettersi=p-eleLettersk; p-eleLettersk=c; /if /for ; int find(Node 若查找失败, 返回-1 Node *p, *q; int flag; p= (2) ;/临时存储 reCompose(p, temp); /将temp重组 q= while(flag=(3) else /搜素右子树 q=q-rChild; /while if(flag=0)/找到匹配的, 保存下标 return (4) ; if( (5) )/查找失败 printf(cant unscramble the following word:%s, temp);
13、 return-1; ; 答案:(1)k!=i (2)(Node*)malloc(sizeofp) (3)q-cmp(p) (4)q-index (5)q=NULL解析 该题涉及二叉排序树的应用、直接插入排序算法等。 空(1)所在函数是直接插入排序的一个实现,理解了直接插入排序算法很容易得出答案,条件(1)成立时,需要进行交换,故空(1)应填“k!=i”。 空(2)比较简单,p声明为指针,在引用reCompse (p, temp)之前需要申请空间,故空(2)应填“(Node*)malloc(sizeof p)”。 接下来在二叉排序上进行查找。while循环体内只有两个分支,一个是flag0时继
14、续往左子树搜索,另一个就是往右子树搜索,此时应该对应的是flag0。据此可判知,flag存储的是查找节点p与当前节点q之间的大小关系,显然是调用类Node的cmp方法,故空(3)应填“cmp(q,p)”。注意,不能填成“cmp(p,q)”,那样将不可能找到匹配的,因为该二叉排序树是左子树小于根节点,而cmp(q,p)当p比q小时返回负值,搜索应往左子树继续。 空(4)是找到匹配时返回,根据函数注释,函数find的返回值是匹配单词在WordList数组中的下标,结构Node的index域正好存储的是下标。故空(4)应填“q-index”。 空(5)是查找失败的情况,对应条件为“q=NULL”。故
15、空(5)应填“q=NULL”。 试题四问题:1. 阅读以下函数说明和C代码,将应填入 (n) 处的字句写在对应栏内。 【说明】 在某些系统中,存在非常复杂的对象,可以采用循序渐进的方式,进行组合将小对象组合成复杂的对象。 以下实例展示了Builder(生成器)模式。该实例用来建立“文件”,文件内容包括:一个标题、一串字符以及一些有项目符号的项目。Builder类规定组成文件的方法,Director类利用这个方法产生一份具体的文件。下图显示了各个类间的关系。 以下是C语言实现,能够正确编译通过。 【C代码】 typedef void( (1) )(char *title); typedef vo
16、id (*fun2)(char items10, int N); typedef char* (*fun3)(); char buffer 500; struct Builder/构造器 fun1 makeTitle; (2) makeString; fun2 makeItems; fun3 getResult; ; struct Director struct Builder builder; ; cbar* consrruct( (3) director)/构造文件 char items 210=早安,午安; director-builder.makeTitle(Greeting); di
17、rector-builder.makestring(从早上到白天结束); director-builder.makeItems (items,2); director-builder.makeString(到了晚上); strcpy(items0,晚安); strcpy(items 1,好梦); director-builder.makeItems (items,2); return director-builder.getResult(); void TXTmakeTitle (char* title) img src=tu/1803/j/sp/zj/swrs78.41253F.jpg /
18、strcat (buffer, title); strcat (buffer, img src=tu/1803/j/sp/zj/swrs78.4164A9.jpg /nn); void TXTmakeString (char* str) strcat (buffer, ); strcat (buffer, str); strcat (buffer,nn); void TXTmakeItems(char items10,int N)/将items加入文件中 for(int i=0;iN;i+) strcat (buffer, .); strcat(buffer, (4) ); strcat (b
19、uffer, n); strcat (buffer, n); char* TXTgetResult() return buffer; void main() Director director; (5) =0;/清空缓冲区,使目前缓冲区中的内容不影响新生成的文件 director.builder.makeTitle=TXTmakeTitle; director.builder.makeString=TXTmakeTitle; director.builder.makeItems=TXTmakeItems; director.builder.getResult=TXTgetResult; cha
20、r* result=construct ( printf(%sn, result); 答案:(1)*fun1 (2)fun1 (3)struct Director* (4)itemsi (5)buffer0解析 先看空(3),首先函数construct的形参director应该与Director结构体相关,再根据函数体中的引用方式“director-builder.makeTitle(Greeting);”可知director是一个指针,因此空(3)应填struct Director*。由语句“char* result=construct(”也可进一步确认。 函数TXTmakeItems(ch
21、ar items10, int N)是将items加入文件中,因此语句strcat(buffer, (4) );是将第i个items加入缓冲区buffer中,strcat函数的原型为:char *strcat(char *strDestination, const char *strSource);。因此空(4)应填itemsi。 由注释可知语句“buffer0= (5) ;”是用来清除缓冲区的,其目的是使目前缓冲区中的内容不影响新生成的文件,就一个语句,事实上不可能清除缓冲区中的所有内容,但纵观生成文件,关键语句就是strcat,这样只要将缓冲区第一个单元的值置为“0”(字符串结束标志),就
22、能保证正确生成文件。故空(5)应填buffer0。 试题五问题:1. 阅读以下说明和Java代码,将应填入 (n) 处的字句写在相应处。 【说明】 对多个元素的聚合进行遍历访问时,需要依次推移元素,例如对数组通过递增下标的方式,数组下标功能抽象化、一般化的结果就称为迭代器(Iterator)。模式以下程序模拟将书籍(Book)放到书架(BookShelf)上并依次输出书名。这样就要涉及到遍历整个书架的过程。使用迭代器Iterator实现。下图显示了各个类间的关系。以下是JAVA语言实现,能够正确编译通过。 【Java代码】 /Iterator.java文件 public interface I
23、terator public abstract boolean hasNext (); public abstract Object next (); /Aggregate.java文件 public interface Aggregate public abstract Iterator iterator (); /Book.java public class Book /省略具体方法和属性 /BookShelfIterator.java文件 public class BookShelfIterator (1) Iterator private BookShelf bookShelf; pr
24、ivate int index; public BookShelfIterator(BookShelf bookShelf) this.bookShelf=bookShelf; this.index=0; public boolean hasNext () /判断是否还有下一个素 if (index bookShelf.getLength () return true; else return false; public Object nexr () (/取得下一个元素 Book book=bookShelf.getBookAt (index); index+; return book; /B
25、ookShelf.java import java.util.Vector; public class BookShelf private Vector books; public BookShelf (int initialsize) this.books=new Vector (initialsize); public Book getBookAt (int index) return (Book) books.get (index); public int getLength () return books.size (); public Iterator iterator () ret
26、urn new BookShelfIterator ( (2) ); /Main.java文件 public class Main public static void main (String args) BookShelf bookShelf=new BookShelf(4); /将书籍上架,省略代码 Iterator it=bookShelf. (3) ; while( (4) )(/遍历书架,输出书名 Book book=(Book)it. (5) ; System.out.println (+book.getName(); 答案:(1)implements (2)this (3)it
27、erator() (4)it.hasNext() (5)next()解析 Iterator是接口类,空(1)应该填implements。 根据构造函数BookShelfIterator(BookShelfbookShelf)可得,空(2)应填this,即自身引用。 空(3)是取得迭代器实例,BookShelf类中方法iterator()是返回Iterator接口,故空(3)应填iterator()。 while循环是遍历书架,输出书名,循环条件是“还有下一记录(书)”,故空(4)应填it.hasNext()。注意指针写法。 空(5)是取得书实例,BookShelf类中方法next()是返回Ob
28、ject类实例,取得下一本书,故空(5)应填next()。 试题六阅读下列说明和图,回答问题1至问题3,将解答填入对应栏内。 【说明】 某学校的教学系统描述如下: 学生信息包括:学号(Sno)、姓名(Sname)、性别(Ssex)、年龄(Sage)、入学年份(Syear)、主修专业(Smajor),其中学号是入学时唯一编定的。 教师信息包括:教工号(Tno)、姓名(Tname)、性别(Tsex)、年龄(Tage)、职称(Ttitle),其中教工号是唯一编定的。 课程信息包括:课程号(Cno)、课程名称(Cname)、学时(Cperiod)、学分(Ccredit),其中课程号是唯一编定的。 每个
29、专业每个年级只有一个班级,这样班级就可用入学年份标识。 每位教师只教授特定的一门的课程,每门课程可以有多个教师教授,各位老师的上课地点及上课时间有所不同。注意:一门课程至少有一位教师教授,否则这门课程就视为不存在。 每位学生可以同时选修多门不同的课程,一门课程至少要有10位学生选修,否则就取消这门课程的开设。注意:选修课程时要指定任课教师,不能重复选修同一门课程。课程结束后,任课教师给选修该课程的学生一个成绩(Grade)。注意:教师不能给没有选修他所教授课程的学生成绩,即使选修了其他教师教授的同一门课也不行。 下图是经分析得到的E-R图。 1. 【问题1】 根据题意,给出联系的属性。实体间的
30、联系有“一对一”、“一对多”和“多对多”,指出各联系分别属于哪一种。 答案:教授:上课地点、上课时间,一对多 选修:任课教师、成绩,多对多解析 “每位教师只教授特定的一门的课程,每门课程可以有多个教师教授,各位老师的上课地点及上课时间有所不同”,因此联系“教授”的属性应有:上课地点,上课时间,是一对多联系。 “每位学生可以同时选修多门不同的课程,一门课程至少要有10位学生选修,选修课程时要指定任课教师,任课教师给选修该课程的学生一个成绩(Grade)”,因此联系“选修”的属性应有:任课教师、成绩,是多对多联系。 2. 【问题2】 按照“有关模式名(属性,属性,)”的格式,将此E-R图转换为5个关系模式,指出每个关系模式中的主码和外码,其中模式名根据需要取实体名或联系名。 答案:教师(教工号,姓名,性别。年龄,职称),主码:教工号 课程(课程号,课程名称,学时,学分),主码:课程号 学生(学号,姓名,性别,年龄,主修专业,入学年份),主码:学号 教授(教工号,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 六一活动忆童年活动方案
- 六一活动游街活动方案
- 六一活动踢球活动方案
- 六一游园手工活动方案
- 六一玩具团队活动方案
- 六一结对活动方案
- 六一节团委活动方案
- 六一节景区活动方案
- 六一葵花义卖活动方案
- 医生的考试试题及答案
- 2022年长春中医药大学辅导员招聘考试笔试试题及答案解析
- 企业家刑事法律风险及其防范(课件)
- 实用文档2021近四年小米公司财务报表分析
- 部编版小学道德与法治三年级下册期末质量检测试卷【含答案】5套
- 立式圆筒形储罐罐底真空试验记录
- 小学生劳动教育评价细则
- 民法典案例解读PPT
- 质 量 管 理 体 系 认 证审核报告(模板)
- 肿瘤科新护士入科培训和护理常规
- 第4章 颌位(双语)
- 塔吊负荷试验方案
评论
0/150
提交评论