2014年计算机408统考真题解析.pdf
《2014年计算机408统考真题解析.pdf》由会员分享,可在线阅读,更多相关《2014年计算机408统考真题解析.pdf(14页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、2014年计算机学科专业基础综合试题参考答案一、单项选择题1.C 2.9.D 10.17.A 18.25.D 26.33.C 34.1.解析:内层循环条件j=n与外层循环的变量无关,每次循环j自增1,每次内层循环都执行n次。外层循环条件为k=n,增量定义为k*=2,可知循环次数为2k=n,即k=log2n。所以内层循环的时间复杂度是O(n),外层循环的时间复杂度是O(log2n)。对千嵌套循环,根据乘法规则可知,该段程序的时间复杂度T(n)=T1(n)T2(n)=O(n)O(log2n)=O(nlog2n),选C。2.解析:将中缀表达式转换为后缀表达式的算法思想如下:从左向右开始扫描中缀表达式
2、;遇到数字时,加入后缀表达式;遇到运算符时:a.若为(,入栈;b.若为),则依次把栈中的运算符加入后缀表达式中,直到出现(,从栈中删除(;C.若为除括号外的其他运算符,当其优先级高于除(以外的栈顶运算符时,直接入栈;否则从栈顶开始,依次弹出比当前处理的运算符优先级高和优先级相等的运算符,直到一个比它优先级低的或者遇到了一个左括号为止。当扫描的中缀表达式结束时,栈中的所有运算符依次出栈加入后缀表达式。3.11.19.27.35.4.12.20.28.36.5.13.21.29.37.6.14.22.30.38.7.15.23.31.39.DAACB DABAA CCDBB DDCCC ACCAD
3、 BBCAB 8.16.24.32.40.DD BDD 待处理序列栈后缀表达式当前扫描元素动作alb+(c*d-e*f)/g a a加入后缀表达式lb+(c*d-e*t)/g a/入栈b+(c*d-e*f)/g/a b b加入后缀表达式+(c*d-e*f)/g I ab+优先级低千栈顶的/,弹出+(c*d-e*f)/g ab/+入栈(c*d-e*f)/g+ab/((入栈c*d-e*f)/g+(ab/C c加入后缀表达式*d-e*f)/g+(able*栈顶为(,入栈d-e*t)/g+(*able d d加入后缀表达式-e*f)/g+(*ab/cd 优先级低于栈顶的,弹出-e*f)/g+(ab/c
4、d*栈顶为(,入栈(续表)待处理序列栈后缀表达式当前扫描元素动作e*t)/g+(-ab/cd*e e加入后缀表达式*f)/g(ab/cd*e 优先级高于栈顶的,入栈f)/g+(-*ab/cd*e f f加入后缀表达式)/g+(-*ab/cd*ef)把栈中(之前的符号加入表达式/1!ab/cd*ef-I I优先级高于栈顶的+,I入栈j1;ab/cd*ef*-g g加入后缀表达式十ab/cd*ef*-g 扫描完毕,运算符依次退栈加入表达式ab/cd*ef*-g/+完成由此可知,当扫描到 f 的时候,栈中的元素依次是(,选B。在此,再给出中缀表达式转换为前缀或后缀表达式的手工做法,以上面给出的中缀表
5、达式为例:第一步:按照运算符的优先级对所有的运算单位加括号。式子变成(alb)+(c*d)-(e*f)/g)。第二步:转换为前缀或后缀表达式。前缀:把运算符号移动到对应的括号前面,则变成+(/(ab)/(-(*(cd)*(ef)g)。把括号去掉:+/ab/-*cd*efg 前缀式子出现。后缀:把运算符号移动到对应的括号后面,则变成(ab)/(cd)*(ef)*)-g)/)+。把括号去掉:ab/cd*ef*-g/+后缀式子出现。当题目要求直接求前缀或后缀表达式时,这种方法会比上一种快捷得多。3.解析:endl 指向队头元素,那么可知出队的操作是先从 Aendl读数,然后 endl 再加1。end
6、.2 指向队尾元素的后一个位置,那么可知入队操作是先存数到 Aend.2,然后 end.2 再加1。若把 AO储存第一个元素,当队列初始时,入队操作是先把数据放到 AO,然后 end.2 自增,即可知 end.2 初值为0;endl 指向的是队头元素,队头元素的在数组 A 中的下标为o,所以得知 endl 初值也为o,可知队空条件为 endl=end.2。然后考虑队列满时,因为队列最多能容纳 M-1 个元素,假设队列存储在下标为 0 到下标为 M-2 的 M-1 个区域队头为 AO;队尾为 AM-2,此时队列满,考虑在这种情况下 endl 和 end.2 的状态,endl 指向队头元素,可知
7、endl=O,end.2 指向队尾元素的后一个位置,可知 end.2=M-2+1=M-1,所以可知队满的条件为 endl=(end.2+1)modM,选A。注意:考虑这类具体问题时,用一些特殊情况判断往往比直接思考问题能更快地得到答案,并可以画出简单的草图以方便解题。4.解析:线索二叉树的线索实际上指向的是相应遍历序列特定结点的前驱结点和后继结点,所以先写出二叉树的中序遍历序列 debxac,中序遍历中在 x 左边和右边的字符,就是它在中序线索化的左、右线索,即b、a,选D。5.解析:将森林转化为二叉树即相当于用孩子兄弟表示法表示森林。在变化过程中,原森林某结点的第一个孩子结点作为它的左子树,
8、它的兄弟作为它的右子树。那么森林中的叶结点由千没有孩子结点,那么转化为二叉树时,该结点就没有左结点,所以 F 中叶结点的个数就等于 T 中左孩子指针为空的结点个数,选C。此题还可以通过一些特例来排除 A、B、D 选项。6.解析:前缀编码的定义是在一个字符集中,任何一个字符的编码 都 不是另一个字符 编码的前缀。选项D 中编码 110 是编码 1100的前缀,违反了前缀编码的规则,所以D不是前缀编码。7.解析:按照拓扑 排序的算法,每次都 选择入度为0的结点从图中删去,此图中一开始只有结点3的入度为0;删掉结点3后,只有结点1的入度为0;删掉结点1后,只有结点4的入度为O;删掉结点4后,结点2和
9、结点6的入度 都为o,此时选择删去不同的结点,会得出不同的拓扑序列,分别处理完毕后可知可能的拓扑序列为3,1,4,2,6,5和3,1,4,6,2,5,选D。8.解析:产生堆积现象,即产生了冲突,它对存储效率、散列函数和装填因子均 不会有影响,而平均查找长度 会因为堆积现象而增大,选D。9.解析:关键字数量 不变,要求结点数量 最多,那么 即每个结点中含关键字的数最最少。根据4 阶B树 的定义,根 结点最少含l个关键字,非根结点中最少含4/27-1=1个关键字,所以 每个结点中,关键字数量最少都为1个,即每个结点都 有2个分支,类似于排序 二叉树,而15个结点正好可以构造一个4层的4阶B树,使得
10、叶结点全在第四层,符合B树定义,因此选D。10.解析:首先,第二个元素为1,是整个序列中 的最小元素,所以可知该希尔排序为从小到大 排 序。然后考虑增量问题,若增量为2,第1+2个元素4明显比第1个元素9要大,A排除;若增量为3,第八i+3、i+6个元素都为有序序列Ci=1,2,3),符合希尔排序的定义;若增量为4,第1个元素9比第1+4个元素7要大,C排除;若增量为5,第1个元素9比第1+5个元素8要大,D排除,选B。11.解析:快排的阶段性排序 结果 的特点是,第i趟完成时,会有l个以上的数出现在它最终将要出现的位置,即它左边的数 都比它小,它右边的数 都比它大。题目问第二趟 排序的结果,
11、即要找不存在两个这样的数的 选项。A选项中2、3、6、7、9均符合,所以A排除;B选项中,2、9均符合,所以B排除;D选项中5、9均符合,所以D选项 排除;最后看C选项,只有9一个数符合,所以C不可能 是快速排序 第二趟的结果。12.解析:不妨设原来指令条数为X,那么原CPI就为20/x,经过编译优化后,指令条数减少到原来的70%,即指令条数为0.7x,而CPI增加到原来的1.2倍,即 24/x,那么 现在P 在M上的执行时间就为指令条数 xCPI=0.7x x 24/x=24x0.7=16.8s,选D。13.解析:8位定点补码表示的数据范围 为-12s121,若运算结果超出这个范围则会溢出,
12、A选项x+y=103-25=78,符合范围,A排除;B选项-x+y=-103-25=-128,符合范围,B排除;D选项寸-y=-103+25=-78,符合范围,D排除;C选项x-y=103+25=128,超过了127,选C。该题也可按照二进制写出两个数进行运算,观察运算 的进位信息得到 结果,不过这种方法更为麻烦和耗时,在实际考试中并不推荐。14.解析:(fl)和位)对应的二进制分别是(110011001001)2和(101100001100)2,根据IEEE 754浮点数标准,可知(fl)的数符为1,阶码为10011001,尾数为1.001,而(f2)的数符为1,阶码为01100001,尾数
13、为 1.1,则可知两数均为负数,符号相同,B、D排除。(fl)的绝对值为 l.001x226,(f2)的绝对值为 l.lx2-30,则(fl)的绝对值比(f2)的绝对值大,而符号为负,真值大小相反,即(fl)的真值比(f2)的真值小,即 xy,选 A。此题还有更为简便的算法,(fl)与(f2)的前 4 位为 1100 与 1011,可以看出两数均为负数,而阶码用移码表示,两数的阶码头三位分别为 100 和 011,可知(fl)的阶码大于(f2)的阶码,又因为是 IEEE754 规格化的数,尾数部分均为 l.xxx,则阶码大的数,真值的绝对值必然大,可知(fl)真值的绝对值大于(f2)真值的绝对
14、值,因为都为负数,则(fl)(f2),即 xlchild=NULL&root-rchild=NULL)wpl+.deep*root-wei9ht;if(root-.child!=NULL)wpl_PreOrder(root-lchilct,cteep+l);if(root今rchild!=NULL)wpl_PreOrder(root今rchild,deep+l);II若为叶子结点,累积wplII若左子树不空,对左子树递归遍历若右子树不空,对右子树递归遍历return,wpl;基于层次遍历的算法:#define MaxSize 100/设置队列的最大容量;int wpl_J;,:velOrder
15、(BiTree roo七)BiTree qMaxSize;/声明队列,endl为头指针,end2为尾指针ijlt erid,l,end2;,/队列最多容纳MaxSize-1个元素eridl=end2;,0;II头指针指向队头元素,尾指针指向队尾的后一个元素ir;i:t wp=0deep=0;.I I初始化wpl和深度BiTree lastNode;.,/lastNode用来记录当前层的最后一个结点B.iTree newlastNode;./newlastNode用来记录下一层的最后一个结点la.stNocie=root;./lastNode初始化为根结点newlastNode=NULL;./n
16、ewlastNode初始化为空qend2+=root;II根结点入队while(endl!=end2)II层次遍历,若队列不空则循环眨Treet=qendl+;.II拿出队列中的头一个元素if(t一lchild=NULL&七一lchild=NULL)wpl+=;deep*七一weight;.I I若为叶子结点,统计wplif:;lchil.d.!=NULL).I I若非叶子结点把左结点入队qend2+=t-lchild;newlcistNo.de=,t-lchild;II并设下一层的最后一个结点为该结点的左结点if(t-rchild!=NULL)I I处理叶结点qend2+=t.:.rchil
17、d;newlastNode=,t-rchild;if(t=lastNode)若该结点为本层最后一个结点,更新lastNodelas七Node=newlas七Node;deep+=l;/层数加1/while return:,wpl;II返回wpl【评分说明】若考生给出能够满足题目要求的其他算法且正确,可同样给分。考生答案无论使用C或者C+语言,只要答案正确同样给分。若对算法的基本设计思想和主要数据结构描述不十分准确,但在算法实现中能够清晰反映出算法思想且正确,参照的标准给分。若考生给出的二叉树结点的数据类型定义和算法实现中,使用的是除整型之外的其他数值,可视同使用整型类型。若考生给出的答案中算法
18、主要设计思想或算法中部分正确,可酌情给分。注意:上述两个算法一个为递归的先序遍历,一个为非递归的层次遍历,读者应当选取自己最擅长的书写方式。直观看去,先序遍历代码行数少,不用运用其他工具,书写也更容易,希望读者能掌握。在先序遍历的算法中,static是一个静态变量,只在首次调用函数时声明wpl并赋值为o,以后的递归调用并不会使得wpl为o,具体用法请参考相关资料中的关键字static说明,也可以在函数之外预先设置一个全局变量,并初始化。不过考虑到历年真题算法答案通常都直接仅由一个函数构成,所以参考答案使用static。若对static 不熟悉的同学可以使用以下形式的递归:int wpl_Pre
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2014 计算机 408 统考 题解
限制150内