软件设计师模拟题及答案解析第二十四套.docx
《软件设计师模拟题及答案解析第二十四套.docx》由会员分享,可在线阅读,更多相关《软件设计师模拟题及答案解析第二十四套.docx(11页珍藏版)》请在冰豆网上搜索。
软件设计师模拟题及答案解析第二十四套
软件设计师模拟题及答案解析第二十四套
81.利用逐点插入建立序列(52,43,73,88,76,18,38,61,45,39)对应的二叉排序树之后,查找元素61要进行(86)次元素间的比较。
(86)A.3
B.4
C.6
D.8
参考答案:
(86)A。
解析:
利用逐点插入建立二叉排序树是从空树开始,通过查找将每个节点作为一个叶子插入。
建立序列(50,72,43,85,75,20,35,45,65,30)的二叉排序树如图8所示。
根据图8所示的二叉排序树可知,查找元素61要进行3次元素间的比较。
82.为了在状态空间树中(87),可以利用LC-检索(LeastCostSearch)快速找到一个答案节点。
(87)A.进行遍历
B.找出最优的答案节点
C.找出任一个答案节点
D.找出所有的答案节点
参考答案:
(87)B。
解析:
在状态空间树中,定义为节点的成本函数,g(X)为从节点向X到达一个答案节点所需做的附加工作的估计函数,h(X)为从根节点到节点X的成本,则用成本估计函数选择下一个E-节点的检索策略总是选取值最小的活节点作为下一个E-节点,因此这种检索策略称为最小成本检索,简称LC-检索(LeastCostSearch)。
在状态空间树中找出最优的答案节点,就可以利用LC-检索快速找到一个答案节点。
根据定义在进行LC-检索时,为避免算法过分偏向于做纵深检查,应该在成本估计函数中考虑根节点到当前节点的成本(距离)。
83.图9中不存在(88)。
图9
(88)A.欧拉路径
B.欧拉回路
C.欧密尔顿路径
D.哈密尔顿回路
参考答案:
(88)B。
解析:
通过连通图G中每条边一次且仅一次,遍历图中所有节点的回路称为欧拉回路。
通过连通图G中每条边一次且仅一次,遍历图中所有节点的开路称为欧拉开路(欧拉路径)。
若G是连通图,则存在欧拉回路的充要条件是所有节点的度数均为偶数度;存在欧拉开路的充要条件是当且仅当G中有且只有两个节点的度数为奇数度。
由于图3-6中有两个节点的度数是奇数度,因此图3-6中只存在欧拉路径,但不符合欧拉回路的充要条件,即不存在欧拉回路。
通过连通图G中每个节点一次且仅一次的回路称为欧密尔顿回路。
通过连通图G中每个节点一次且仅一次的开路称为欧密尔顿开路(哈密尔顿路径)。
84.在最好和最坏情况下的时间复杂度均为O(nlogn),但不稳定的排序算法是(89)。
(89)A.堆排序
B.快速排序
C.归并排序
D.基数排序
参考答案:
(89)A。
解析:
堆排序在最好和最坏情况下的时间复杂度均为O(nlogn)但不稳定。
快速排序最好和最坏情况下的时间复杂度分别为O(n2)和O(nlogn)且不稳定。
归并排序是在最好和最坏情况下的时间复杂度均为O(nlogn)且稳定的排序方法。
基数排序在最好和最坏情况下的时间复杂度均为O(d(n+rd))。
85.利用动态规划方法求解每对节点之间的最短路径问题(allpairsshortestpathproblem)时,设有向图G=共有n个节点,节点编号1~n,设C是G的成本邻接矩阵,用Dk(I,j)即为图G中节点i到j并且不经过编号比k还大的节点的最短路径的长度(Dn(i,j)即为图G中节点i到j的最短路径长度),则求解该问题的递推关系式为(90)。
(90)A.Dk(I,j)=Dk-1(I,j)+C(I,j)
B.Dk(I,j)=Dk-1(I,k)+Dk-1(k,j)
C.Dk(I,j)=min{Dk-1(I,j),Dk-1(I,j)+C(I,j)}
D.Dk(I,j)=min{Dk-1(I,j),Dk-1(I,k)+Dk-1(k,j)}
参考答案:
(90)D。
解析:
设Pk(I,j)表示从i到j并且不经过编号比k还大的节点的最短路径,那么Pk(I,j)有以下两种可能。
①Pk(I,j)经过编号为k的节点,此时Pk(I,j)可以分为从i到k和从k至j的两段,易知Pk(I,j)的长度为Dk-1(I,k)+Dk-1(k,j)。
②Pk(I,j)不经过编号为k的节点,此时Pk(I,j)的长度为Dk-1(I,j)。
因此,求解该问题的递推关系式为:
Dk(I,j)=min{Dk-1(I,j),Dk-1(I,k)+Dk-1(k,j)}。
86.通常,(91)应用于保护被中断程序现场等场合。
(91)A.队列
B.堆栈
C.双链表
D.数组
参考答案:
(91)B。
解析:
在计算机中,堆栈被定义为一段特殊的内存区。
其存取数据的特点是先进后出(FILO)。
这一特点使它最常用于保护被中断程序的现场等应用场合。
87.若有说明语句“inta[10],*p=a;”,对数组元素的正确引用是(92)
(92)A.a[p]
B.P[a]
C.*(P+2)
D.P+2
参考答案:
(91)C。
解析:
在C语言中,约定数组名单独出现在表达式中时,它表示数组首元素的指针。
有inta[10],则a可以作为&a[0]使用。
另有整型指针变量p,代码p=a实现p指向数组a的首元素。
则表达式*(p+2)是引用数组元素a[2]。
表达式a[p]和p[a]都是不正确的,下标必须是整型表达式,不可以是指针表达式。
表达式p+2是指针表达式,它的值是&p[2]。
所以只有表达式*(p+2)引用数组a的元素a[2]。
所以解答是C。
88.下面各语句中,能正确进行赋字符串操作的语句是(93)
(93)A.chars[5]={"ABCDE"};
B.chars[5]={’A’,’B’,’C’,’D’,’E’};
C.char*s;s="ABCDE";
D.char*s;scanf("%",s);
参考答案:
(93)C。
解析:
字符串最终存储于字符数组中,存储字符串的字符数组可以是程序主动引入的(定义或动态分配),也可以是字符串常量,由系统分配。
其中字符数组用字符串初始化就是字符串存储于由程序引入的字符数组的例子。
给字符指针赋字符串则是系统自动分配字符率存储空间的例子。
给字符指针赋字符串并不是将一个长长的字符串存于字符指针变量中,而是将字符串常量存储于常量区,并将存储这个字符串的首字节地址赋给指针变量,让指针变量指向字符率常量的首字符。
对于以字符串作为字符数组初值的情况,要求字符数组足够的大,能存得下字符串常量。
这里有一个特别的规定,若数组的大小少于存储字符串有效字符的字节个数,系统将报告错误;当字符数组的大小只能存储字符串的有效字符,而不能存储字符率结束标记符时,则存储于字符数组中的内容是字符序列,因没有存储字符率结束标记符,存储的内容就不是字符串。
如代码chara[5]="ABCDE"。
另外,给字符数组元素逐一赋字符初值,并在字符初值中没有字符串结束标记符,则存于字符数组中的内容也不是字符率。
如代码chars[5]={’A’,’B’,’C’,’D’,’E’}。
特别要注意当字符指针还未指向某个字符数组的元素时,不可以通过字符指针输入字符串。
如代码char*s;scanf("%s",s)。
若写成char*str;scanf("%s",&str)更是错误的了。
由于C语言规定数组不能相互赋值,所以只能将字符串常量赋给某字符指针。
如代码char*s;s="ABCDE"是正确的。
实际上,字符率"ABCDE"被存储于常量区中,向指针变量赋的是字符指针,让s指向其中的字符’A’。
所以解答是C。
89.若有以下定义,则不能表示a数组元素的表达式是(94)
inta[10]={1,2,3,4,5,6,7,8,9,1o},*p=a;
(94)A.*p
B.a[10]
C.*a
D.a[p-a]
参考答案:
(94)B。
解析:
上述代码定义了有10个元素的整型数组。
,和定义指针变量p,并让p指向数组元素a[0]。
所以代码*p是引用a[0]。
由于数组a只有10个元素,最后一个元素是a[9],表达式a[10]是错误的。
数组名a可以作为a的首元素的指针,表达式*a就是a[0],是对数组a的首元素a[0]的引用。
指针p的值是a,表达式p-a。
的值是0,所以a[p-a]就是a[0]。
所以解答是B。
90.若有以下定义,则值为3的表达式是(95)
inta[]={1,2,3,4,5,6,7,8,9,10},*p=a;
(95)A.p+=2,*(p++)
B.p+=2,*++p
C.p+=3,*p++
D.p+=2,++*p
参考答案:
(95)A。
解析:
数组a有10个元素,分别有值1至10,指针变量p指向a[0],A逗号表达式p+=2,*(P++),先是P+=2使P指向a[2],接着是*(P++),以当时P所指变量a[2]取内容3为表达式的值,同时使p指向a[3]。
B返号表达式p+=2,*++p,先是p+=2使p指向a[2],以后是*++p,又使p增1,让它指向a[3],并取指针p所指变量a[3]的内容4作为表达式的值。
C逗号表达式p+=3,*p++,先是p+=3使p指向a[3],以后是*p++,表达式的值是a[3]为4,而使p指向a[4]。
D逗号表达式p+=2,++*p,先是p+=2,使p指向a[2],以后是++*p,因当时的*p就是a[2],++a[2]使a[2]增1,变成4,并以4为表达式的值。
所以只有p+=2,*(p++)的值是3。
所以解答是A。
91.若二叉树的先序遍历序列为ABCEDF,后序遍历序列为CEBFDA,则其中序遍历序列为(96)。
(96)A.CEFBDAB.CBEAFDC.CEBAFDD.CBEDFA
参考答案:
(96)B。
解析:
对于二叉树遍历序列有一个性质,包含有中序遍历序列的任意两个遍历序列可以唯一确定该二叉树。
那么由题中的先序遍历序列和后序遍历序列就可以唯一确定此二叉树,如图10所示,再对其进行中序遍历,中序遍历序列为CBEAFD。
图1092.在C++中,使用静态成员解决同一个类的不同对象之间的数据共享问题。
以下关于一个类的静态成员的叙述中,说法错误的是(97)。
(97)A.静态成员变量可被该类的所有方法访问
B.该类的对象共享其静态成员变量的值
C.该类的静态数据成员变量的值不可修改
D.该类的静态方法只能访问该类的静态成员变量
参考答案:
(97)D。
解析:
静态成员作为类的一种成员,它被类的所有对象共享,而不是属于某个对象的。
静态成员可分为静态成员变量和静态方法。
静态成员变量的值可以被更新。
只要对静态成员变量的值更新一次,所有对象的该静态成员变量值都会被更新。
静态成员函数可以直接访问静态成员,但不能直接访问非静态成员。
选项D“该类的静态方法只能访问该类的静态成员变量”的说法不够准确。
93.在面向对象软件开发过程中,采用设计模式(98)。
(98)A.以减少设计过程创建的类的个数
B.以保证程序的运行速度达到最优值
C.以复用成功的设计和体系结构
D.以允许在非面向对象程序设计语言中使用面向对象的概念参考答案:
(98)C。
解析:
设计模式是对被用来在特定场景下,解决一般设计问题的类和相互通信的对象的描述。
通常,一个设计模式有4个基本要素:
模式名称、问题(模式的使用场合)、解决方案和效果。
每一个设计模式系统