2022年职业考证-软考-软件设计师考试全真模拟专项剖析AB卷(带答案)
一.综合题(共15题)
1.
单选题
Python 语言的特点不包括()。
问题1选项
A.跨平台、开源
B.编译型
C.支持面向对象程序设计
D.动态编程
【答案】B
【解析】本题考查python相关问题。
python语义的特点:
跨平台、开源、简单易学、面向对象、可移植性、解释性、开源、高级语言、可扩展性、丰富的库、动态编程等等
综上所述B选项错误,python不是编译型语言,而是解释型语言。
2.
案例题
阅读下列说明和代码,回答问题1和问题2,将解答写在答题纸的对应栏内。
【说明】
凸多边形是指多边形的任意两点的连线均落在多边形的边界或内部。相邻的点连线落在多边形边界上,称为边;不相邻的点连线落在多边形内部,称为弦。假设任意两点连线上均有权
重,凸多边形最优三角剖分问题定义为:求将凸多边形划分为不相交的三角形集合,且各三角形权重之和最小的剖分方案。每个三角形的权重为三条边权重之和。
假设N个点的凸多边形点编号为V1,V2,……,VN,若在VK处将原凸多边形划分为一个三角形V1VkVN,两个子多边形V1,V2,…,Vk和Vk,Vk+1,…VN,得到一个最优的剖分方案,则该最优剖分方案应该包含这两个子凸边形的最优剖分方案。用m[i][j]表示带你Vi-1,Vi,…Vj构成的凸多边形的最优剖分方案的权重,S[i][j]记录剖分该凸多边形的k值。
其中:W(Vi-1VkVj)=Wi-1,k+Wk,j+Wj,i-1为三角形Vi-1VkVj的权重,Wi-1,k,Wk,j,Wj,i-1分别为该三角形三条边的权重。求解凸多边形的最优剖分方案,即求解最小剖分的权重及对应的三角形集。
[C代码]
#include<stdio.h>
#define N 6 //凸多边形规模
int m[N+1] [N+1]; //m[i][j]表示多边形Vi-1到Vj最优三角剖分的权值
int S[N+1] [N+1]; //S[i][j]记录多边形Vi-1到Vj最优三角剖分的k值
int W[N+1] [N+1]; //凸多边形的权重矩阵,在main函数中输入
/*三角形的权重a,b,c,三角形的顶点下标*/
int get_ triangle_weight(int a,int b,int c)
{
    return W[a][b]+W[b][c]+W[c][a];
}
/*求解最优值*/
void triangle_partition(){
int i,r,k,j;
int temp;
/*初始化*/
for(i=1;i{    /*r为子问题规模*/
      for(i=1;k    {
        (2);
        m[i][j]= m[i][j]+m[i+1][j]+get_triangle_weight(i-1,i,j); /*k=j*/
        S[i][j]=i;
        for(k=j+1;k          {    /*计算 [i][j]的最小代价*/
                temp=m[i][k]+m[k+1][j]+ge_triangle_ weight(i-1,k,j);
                if((3))
                  {        /*判断是否最小值*/ 
                              m[i][j]=temp;
                              S[i][j]=k;
                  }
          }
    }
}
}
/*输出剖分的三角形i,j:凸多边形的起始点下标*/
void print_triangle(int i,int j){
if(i==j) return;
print_triangle(i,S[i][j]);
print_ triangle((4));
print(“V%d- -V%d- -V%d\n“,i-1,S[i][j],j);
}
【问题1】(8分)
根据题干说明,填充C代码中的空(1)~(4)。
【问题2】(7分)
根据题干说明和C代码,该算法采用的设计策略为(5)。
算法的时间复杂度为(6),空间复杂度为(7)(用O表示)
【答案】【问题1】(8分)
(1)i3)
(7)O(n2)
【解析】本题考查的是凸多边形最优三角剖分动态规划设计过程。
本题算法难度较大,在没有理解算法过程的前提下,首先可以根据相关信息进行部分填空。
首先根据题干描述出现的将问题规模从k开始截断,此时其实就是“最优子结构”的说法,并且本题出现了递归式的应用,是典型的动态规划法的应用。
又根据题目中的代码,出现了三层嵌套for循环,此时代码的时间复杂度为O(n3)。
本题用到的辅助空间记录中间解有2个数组m[i][j]和S[i][j],都是二维数组,空间复杂度的量级为O(n2)。
最后分析代码填空部分。
第(1)空,r表示的是子问题规模,规模划分已知从r=2开始,子问题最大应该能够取到N,因此本空填写r<=N或其等价表示形式。
第(2)空缺失的是j的初始化赋值,本空较难。代码计算前边界为i,链长为r的链的后边界取值,结果为i+r-1,即本题填写j=i+r-1或其等价表示形式。
第(3)空缺失判断条件,此时注释明确说明此处判断最小值,判断后,m[i][j]值进行修改并修改为temp,也就是意味着m[i][j]此时记录的不是最优解(最小值),需要进行修正改为最小,即填写temp<m[i][j] 或其等价表示形式(某一个数值比最小值还小,则修改最小值)。
第(4)空缺失的是打印参数,结合代码上下文进行分析,上文打印print_triangle(i,S[i][j]);即截断的前一部分编号,下面print_ triangle((4));打印的应该是截断的后一部分,即填写s[i][j]+1,j。
3.
单选题
在设计某购物中心的收银软件系统时,要求能够支持在不同时期推出打折、返利、满减等不同促销活动,则适合采用()模式。
问题1选项
A.策略(Strategy)
B.访问者(Visitor)
C.观察者(Observer)
D.中介者(Mediator)
【答案】A
【解析】在设计某购物中心的收银软件系统时,要求能够支持在不同时期推出打折、返利、满减等不同促销活动,收银软件系统的计入规则有:打折、返利、满减三种不同的策略,每种策略之间封装起来,可以相互替换,使它们可以独立的变换,属于典型的策略模式。
4.
单选题
以下关于杀毒软件的描述中,错误的是( )。
问题1选项
A.应当为计算机安装杀毒软件并及时更新病毒库信息
B.安装杀毒软件可以有效防止蠕虫病毒
C.安装杀毒软件可以有效防止网站信息被篡改
D.服务器操作系统也需要安装杀毒软件
【答案】C
【解析】本题考查的是网络安全管理相关内容。
在杀毒软件的使用过程中,我们应该为个人计算机、服务器都安装杀毒软件,并且应当及时更新病毒库信息,可以有效防止蠕虫病毒等。ABD选项描述都是正确的。
杀毒软件只能防病毒,不能有效防止网站信息被篡改,所以C选项描述错误,本题选择C选项。
5.
单选题
IPv6地址长度为(  )bit。
问题1选项
A.16
B.32
C.64
D.128
【答案】D
【解析】本题考查IPv6的基本概念。IPv6地址由128位二进制表示。
6.
单选题
为了实现多级中断,保存程序现场信息最有效的方法是使用( )。
问题1选项
A.通用寄存器
B.累加器
C.堆栈
D.程序计数器
【答案】C
【解析】本题考查的是中断相关概念。
在中断过程中,程序现场信息保存在堆栈部分。本题选择C选项。
通用寄存器、累加器、程序计数器都是属于CPU内部的子部件,与本题无关。
7.
案例题
阅读下列说明和Java代码,将应填入(n)处的字句写在题纸的对应栏内。
【说明】
享元(flyweight)模式主要用于减少创建对象的数量,以低内存占用,提高性能。现要开发一个网络围棋程序允许多个玩家联机下棋。由于只有一台服务器,为节内存空间,采用享元模式实现该程序,得到如图6-1所的类图。
图6-1 类图
【Java代码】
import java.util.*:
enum PieceColor {BLACK,WHITE}//棋子颜
class PiecePos{//棋子位置
private intx;
private int y;
pubic PiecePos(int a,int b){
x=a;
y=b;
}
public int getX( ){
return x;
}
2022年高级编程语言排名
public int getY( ){
return y;
  }
}
abstract class Piece{//棋子定义
protected PieceColor m_color;//颜
protected Piecemopos m_pos;//位置
public Piece(PieceColor,color PiecePos pos){
m_color=color;
m_pos=pos;
}
(1);
}
class BlackPiece extends Piece{
public BlackPiece(PieceColor  color,PiecePos pos){
super(color,pos);
}
public void draw ( ) {
System out println("draw a black piece");
  }
}
class WhitePiece extends Piece{
public WhitePiece(PieceColor  color,PiecePos pos){
super(color,pos);
}
public void draw( ) {
System.out.println("draw a white piece");
  }
}
class PieceBoard{
//棋盘上已有的棋子
private static final  ArrayListm_arrayPiece=new ArrayList
private String m_blackName;//黑方名称

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。