[计算机类试卷]软件水平考试(初级)程序员下午(应用技术)模拟试卷20及答案与解析.doc
《[计算机类试卷]软件水平考试(初级)程序员下午(应用技术)模拟试卷20及答案与解析.doc》由会员分享,可在线阅读,更多相关《[计算机类试卷]软件水平考试(初级)程序员下午(应用技术)模拟试卷20及答案与解析.doc(24页珍藏版)》请在麦多课文档分享上搜索。
1、软件水平考试(初级)程序员下午(应用技术)模拟试卷 20 及答案与解析 1 阅读以下说明和流程图,将应填入 (n)处的字句写在对应栏内。 说明 下面的流程图实现了正整数序列 K(1),K(2),K(n) 的重排,得到的新序列中,比 K(1)小的数都在 K(1)的左侧,比 K(1)大的数都在 K(1)的右侧。以 n=6为例,序列 12, 2, 9,13, 21, 8的重排过程为: 12,2,9,13,21,8 2,12,9,13,21,8 9,2,12,13,21,8 8,9,2,12,13,21 流 程图 2 阅读以下技术说明和问题模型图,根据要求回答问题 1和问题 2。 【说明】 某大学城图
2、书馆需要在无线阅览厅的某些位置上放置无线接入点 AP(Access Poin)。假设每个无线 AP覆盖范围的半径是 6米,因此必须使得每台笔记本电脑上的无线网卡到某个无线 AP的直线距离不超过 6米。为了简化问题,假设所有无线网卡在同一直线上,并且无线 AP沿该直线放置。该问题可以建模为如图 1-16所示,其中直线表示无线网卡所在的直线,实心正方形表示无线网卡。现利用贪心策略实现用尽可能少的无线 AP覆盖所有的无线网卡。 实现 贪心算法的流程如图 1-17所示。其中, di(1iN)表示第 i张无线网卡到通道 A端的距离, N表示无线网卡的总数,无线网卡的编号按照无线网卡到通道 A端的距离从小
3、到大进行编号; sk表示第 k(k1)个无线 AP到通道 A端的距离。算法结束后 k的值为无线 AP的总数。2 请填补图 1-17流程图中 (1)-(4)空缺处的内容。 3 该贪心算法的时间复杂度为 (5)。 4 阅读以下应用程序说明和 C程序,将 C程序段中 (1) (7)空缺处的语句填写完整。 【说明】 以下【 C程序】的功能是 从文件 text_01.ini中读入一篇英文短文,统计该短文中不同单词和它的出现次数,并按词典编辑顺序将单词及它的出现次数输出到文件word_xml.out中。 该 C程序采用一棵有序二叉树存储这些单词及其出现的次数,一边读入一边建立。然后中序遍历该二叉树,将遍历
4、经过的二叉树上节点的内容输出。 程序中的外部函数 int getword(FILE *fpt, char *word) 从与 fpt所对应的文件中读取单词置入 word,并返回 1;若已无单词可读,即到文件尾部时,则函数返回 0。 【 C程 序】 #include stdio.h #include malloc.h #include ctype.h #include string.h #define INF “TEXT_01.INI“ #define OUTF “WORD_XML.OUT“ typedef struct treenode char *word; int count; struc
5、t treenode *left, *right; BNODE; int getword(FILE *fpt,char *word); void binary tree(BNODE *t,char *word) BNODE *ptr, *p; int cmpres; p = NULL; (1); while (ptr) /*寻找插入位置 */ cmpres = strcmp(word, (2); /* 保存当前比较结果 */ if (!cmpres) (3) return; else (4); ptr = cmpres 0 ? ptr- right : ptr- left; ptr = (BN
6、ODE *)malloc(sizeof(BNODE); ptr- right = ptr- left = NULL; ptr- word = (char *)malloc(strlen(word)+1); strcpy(ptr- word,word); ptr- count = 1; if (p = NULL) (5) ; else if (cmpres 0) p- right = ptr; else p- left = ptr; void midorder(FILE *fpt, BNODE *t) if (6) return; midorder(fpt , t- left); fprintf
7、(fpt , “ %s %dn “ , t- word , t- count); midorder(fpt , t- right); void main() FILE *fpt; char word40; BNODE *root = NULL; if (fpt = fopen(INF , “r“) = NULL) printf(“Cant open file %sn“,INF); return; while (getword(fpt,word) = 1) binary_tree( (7) ); fclose(fpt); fopen(OUTF,“w“); midorder(fpt, root);
8、 fclose(fpt); 5 阅读以下算法说明和 C程序,根据要求回答问题 1和问题 2。 【说明】 【算法4-1】的功能是用来检查文本文件中的圆括号是否匹配。若文件中存在圆括号而没有对应的左括号或者右括号,则给出相应的提示 信息,如图 1-18所示。在【算法4-1】中, slack为一整数栈。算法中各函数的说明如表 1-11所示。【算法 4-1】将栈 stack置空,置 EOF为 falseCh -nextch(); while(not EOF) kkind(ch) ; if (k =(1) ) push( (2) ); push( (3) ); else if( k =(4) ) if(
9、not empty() pop(); pop(); ) else 显示错误信息 (缺少对 应左括号或右括号 ): 显示行号 row:显示列号 col: ) End if End if Ch -nextch(); end whileif(not empty() 显示错误信息 (缺少对应左括号或右括号 ): While(not empty() row -pop(); col -pop(): 显示行号 row:显示列号 col; ) End whileEnd if 为了识别更多种类的括号,对【算法 4-1】加以改进后得到【算法 4-2】。【算法 4-2】能够识别圆括号、方括号和花括号 (不同类型的
10、括号不能互相匹配 )。改进后,函数 kind(charch)的参数及其对应的返回值如表 1-12所示。【算法 4-2】将栈 stack置空,置 EOF为 falseCh -nextch(); while(not EOF) k - kind(ch); if(k 0) if(判断条件 1) push( (5) ); push( (6) ); push( (7) ); else if(判断条件 2 and判断条件 3) pop(); pop(); pop(); else 显示错误信息 (缺少对应左括号或右括号 ); 显 示行号 row;显示列号 col; ) end if end if ch - n
11、extch(); )end whileif(not empty() 显示错误信息 (缺少对应左括号或右括号 ); While(not empty() Pop(); row - pop(): col - pop(); 显示行号 row;显示列号 col; ) end whileend if 5 请将【算法 4-1】和【算法 4-2】中, (1) (7)空缺处的内容补充完整。 6 请从以下选项中选择相应的判断逻辑填写【算法 4-2】中 的 “判断条件 1”至 “判断条件 3”。注意,如 “判断条件 2”的逻辑判断结果为假,则无须对 “判断条件 3”进行判断。 判断条件 1: (8) 判断条件 2:
12、 (9) 判断条件 3: (10) 【供选择的答案】 A栈顶元素表示的是与当前字符匹配的左括号 B栈顶元素表示的是与当前字符匹配的右括号 C字符是左括号 D字符是右括号 E栈不空 F栈空 G字符是括号 7 阅读以下应用说明及 Visual Basic程序,根据要求回答问题 1至问题 2。 说明 某 Visual Basic应用程序用于监测 某种锅炉设备内液面高度 (0 50cm),其运行窗口界面如图 4-16所示。 图 4-16 某锅炉设备液面高度显示界面 在图 4-16中,设计了一个高度计 (矩形形状 shpMeter)及其中指示当前液面高度的水银柱 (矩形形状 shpT),文字标签标记了液
13、面高度的刻度;另有一个图片框 picCurve,用于动态描述检测到的液面高度曲线 (用户见到的曲线与水银柱等高变化 ); 开始 (CmdStart)按钮用于启动液面高度检测,命令按钮“暂停 ”(CmdStop)用于暂停液面高度检测。 液面高度计形状控件 shpMeter是固定的 ,其属性 FillsStyle默认为透明。矩形形状 shpT(水银柱 )的 Visible属性初始设置为不可见,属性 Filltype设置为 Solid(实心 ), FillColor设置为红色;图片框picCurve的属性 AutoRedraw设置为 True;程序设计过程中,创建了一个定时器TimT,属性 Enab
14、led初始设置为 False(不可用 ),属性 Interval(定时间隔 )的值应设置为 (1)。 为模拟锅炉设备液面高度的检测,程序中利用了 (0, 1)之间均匀分布的伪随机数获得 0, 50之间的随机液面高度 WH。为便 于在图片框 picCurve中绘制曲线,程序中对该图片框建立了如下坐标系统:图片框的左上角定义为原点 (0,0),水平向右方向为 X轴,垂直向上方向为 Y轴,右下角坐标为 (50.200)。为了便于观察记录的液面高度值,图片框中从上到下创建了 7条水平虚线 Ls(i), i=0,16 ,并在程序中按等间隔排列进行位置设置。应用程序中每隔 3 秒算出曲线点 (x, y),
15、其中 x=O, 1, 2 ,再用直线段连接各相邻曲线点形成液面高度曲线。 Visual Basic程序代码 Dim (2) AS Integer 试题全局变量 Private Sub CmdStart_Click() TimT.Enabled =(3) ShpT.Visible = True End Sub Private Sub CmdStop_Click() TimT.Enabled = False End Sub Private Sub Form_Load( ) Dim i,S As Integer PicCurve.Scale (0,0)-(50,200) 设置图片框坐标系:左上角 -
16、右下角 S = 25 H等于图片框高度的 1/8 For i = 0 To 6 设置 7条水平线 Ls(i)的位置 Ls(i).X1 = 0 Ls(i)起点横坐标 Ls(i).Y1 =(4) Ls(i)起点纵坐标 Ls(i).X2 = 50 Ls(i)终点横坐标 Ls(i).Y2 = Ls(i).Y1 Ls(i)终点纵坐标 Ls(i).BorderColor = class MiniComplex public: /重载流插入和提取运算符 (1) ostream return osObject; (2) istream isObject complex.realPart ch complex.
17、imagPart ch; return isObject; MiniComplex(double real=0,double imag=0); /构造函数 MiniComplex operator+(const MiniComplex /重载运算符 + MiniComplex operator-(const MiniComplex /重载运算符 - MiniComplex operator*(const MiniComplex /重载运算符 * MiniComplex operator/(const MiniComplex /重载运算符 / bool operator=(const MiniC
18、omplex /重载运算符= private : double (3); double imagPart; ; #end if #include “MiniComplex.h“ bool MiniComplex:operator=(const MiniComplex MiniComplex:MiniComplex(double real,double imag) realPart= real; imagPart=imagPart; MiniComplex MiniComplex:operator+(const MiniComplex temp.realPart = realPart+orthe
19、rComplex. realPart; temp.imagPart = imagPart +ortherComplex. imagPart; return temp; (4) MiniComplex temp; temp.realPart= realPart-ortherComplex. realPart; temp.imagPart = imagPart-ortherComplex. imagPart; return temp; MiniComplex MiniComplex:operator*(const MiniComplex temp.realPart = (realPart*orth
20、erComplex. realPart)-(imagPart *ortherComplex.imagPart); temp.imagPart = (realPart*ortherComplex. imagPart)+(imagPart *ortherComplex.realPart); return temp; MiniComplex MiniComplex:operator/(const MiniComplex float tt; tt=1/(ortherComplex.realPart*ortherComplex.realPart+ortherComplex.imagPart *orthe
21、rComplex. imagPart); temp.realPart=(realPart*ortherComplex, realPart)+(imagPart *ortherComplex. imagPart)*tt; temp.imagPart =(imagPart *ortherComplex. realPart)-(realPart*ortherComplex. imagPart)*tt; return temp; #include iostream #include MiniComplex.h using namespace std; int main() MiniComplex nu
22、ml(23, 34),num2(56, 35); cout “Initial Value of num1=“ num1 “n Initial Value of num2=“num2 end1; cout num1 “+“ num2 “=“ num1+num2 end1; /使用重载的加号运算符 cout num1 “-“ num2 “=“ num1-num2 end1; /使用重载的减号运算符 cout num1 “*“ num2 “=“ num1*num2 end1; /使用重载的乘号运算符 cout num1 “/“ num2 “=“ num1/num2 end1; /使用重载的除号运算符
23、 (5); 10 阅读以下关于某订单管理系统的技术说明、部分 UML类图及 Java程序,将Java程序中 (1)-(5)空缺处的语句填写完整。 说明 某订单管理系统的部分 UML类图如图 3-21所示。 图 3-21 某订单管理系统的部分分类图 在图 3-21中, Product表示产品, ProductList表示所销售产品的列表, Order表示产品订单, OrdeItem表示产品订单中的一个条目,OrderList表示订单列表, SalesSystem提供订单管理系统的操作接口。各个类的部分属性和方法说明如表 3-16所示。 可以使用类java.util.ArrayList E来实现对
24、象的聚集关系,如图 3-21所示 OrderList与 Order之间的聚集关系。 For.each循环提供了一种遍历对象集合的简单方法。在for.each循环中,可以指定需要遍历的对象集合及用来接收集合中每个元素的变量,其语法如下: for(用来接收集合中元素的变量:需要遍历的对象集合 ) 如果要使用 for-each循环来遍历对象集合,那么包含该对象集合的类必须实现接口java.util.Iterable T。 Java程序 7-1和 Java程序 7-2分别给出了类 OrderList和方法 statistic的 Java代码。 Java程序 7-1 import java.util.*
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
2000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 试卷 软件 水平 考试 初级 程序员 下午 应用技术 模拟 20 答案 解析 DOC
