(软考软件设计师)数据结构学习(C )(合集)
- 格式:pdf
- 大小:430.77 KB
- 文档页数:44
数据结构实验实验内容和目的:掌握几种基本的数据结构:集合、线性结构、树形结构等在求解实际问题中的应用,以及培养书写规范文档的技巧。
学习基本的查找和排序技术。
让我们在实际上机中具有编制相当规模的程序的能力。
养成一种良好的程序设计风格。
实验教材:数据结构题集(C语言版)清华大学出版社2007年实验项目:实验一、栈和循环队列㈠、实验内容:①栈掌握栈的特点(先进后出FILO)及基本操作,如入栈、出栈等,栈的顺序存储结构和链式存储结构,以便在实际问题背景下灵活应用。
本程序采用的是链栈结构,具有初始化一个栈、PUSH、POP、显示所有栈里的元素四个功能。
②循环队列掌握队列的特点(先进先出FIFO)及基本操作,如入队、出队等,学会循环队列的实现,以便在实际问题背景下灵活运用。
本程序具有初始化一个队列、入队、出队、显示队列的所有元素、队列长度五个功能。
㈡、实验代码①栈程序代码:#include <stdio.h>#include <malloc.h>#define Stack_Size 6#define ERROR 0#define OK 1typedef int SElemType;typedef struct SNode{SElemType data;struct SNode *next;}SNode,*LinkStack;int CreatTwo(LinkStack &head,int n){int i;SNode *p;head=(LinkStack)malloc(sizeof(SNode));head->next=NULL;printf("请输入数据(数字):\n");for(i=n;i>0;--i){p=(SNode *)malloc(sizeof(SNode));scanf("%d",&p->data);p->next=head->next;head->next=p;}return 1;}int menu_select(){int sn;for(;;){scanf("%d",&sn);if(sn<1||sn>6)printf("\n\t输入错误,请重新输入\n");elsebreak;}return sn;}int Push(LinkStack &top,SElemType e){SNode *q;q=(LinkStack)malloc(sizeof(SNode));if(!q){printf("溢出!\n");return(ERROR);}q->data=e;q->next=top->next;top->next=q;return(OK);}int Pop(LinkStack &top,SElemType &e){SNode *q;if(!top->next){printf("error!\n");return(ERROR);}e=top->next->data;q=top->next;top->next=q->next;free(q);return(OK);}void main(){ int e;LinkStack top;printf("1.初始化一个栈;\n2.PUSH;\n3.POP;\n4.显示所有栈里的元素;\n5.结束;\n");while(1){switch(menu_select()){case 1:if(CreatTwo(top,Stack_Size))printf("Success!\n");break; case 2:printf("Push:\n");scanf("%d",&e);if(Push(top,e))printf("Success!\n");break;case 3:if(Pop(top,e))printf("Success!\n");printf("%d\n",e);break;case 4:LinkStack p;printf("所有栈里的元素:\n");p=top;while(p->next){p=p->next;printf("%7d",p->data);}printf("\n");break;case 5:return;}}}运行结果:②循环队列程序代码:#include<stdlib.h>#include<stdio.h>#define OVERFLOW -1#define OK 1#define ERROR 0#define MAXSIZE 100typedef struct{int *elem;//队列存储空间int front;int rear;}SqQueue;//判断选择是否正确int menu_select(){int sn;for(;;){scanf("%d",&sn);if(sn<1||sn>6)printf("\n\t输入错误,请重新输入\n");elsebreak;}return sn;}//参数(传出)SqQueue &Q,循环队列(空)int InitQueue(SqQueue &Q){Q.elem=(int *)malloc(MAXSIZE*sizeof(int));if(!Q.elem)exit(OVERFLOW);Q.front=Q.rear=-1;for(int i=0;i<MAXSIZE;i++)Q.elem[i]=-1;return OK;}//返回Q的元素个数int QueueLength(SqQueue Q){return (Q.rear-Q.front+MAXSIZE)%MAXSIZE;}//显示队列的元素void Display(SqQueue Q){for(int i=0;i<=QueueLength(Q);i++)if(Q.elem[i]!=-1)printf("%d ",Q.elem[i]);printf("\n");}//入队int EnQueue(SqQueue &Q,int e){Q.rear=(Q.rear+1)%MAXSIZE;if(Q.rear==Q.front)return ERROR;Q.elem[Q.rear]=e;return OK;}//出队int DeQueue(SqQueue &Q,int &e){if(Q.front==Q.rear)return ERROR;e=Q.elem[Q.front+1];Q.elem[Q.front+1]=-1;Q.front=(Q.front+1)%MAXSIZE;return OK;}void main(){SqQueue Q;InitQueue(Q);int elem,e;printf("请输入队列元素(以0结束):\n");scanf("%d",&elem);while(elem!=0){EnQueue(Q,elem);scanf("%d",&elem);}printf("队列为:\n");Display(Q);printf("1.初始化一个队列;\n2.入队;\n3.出队;\n4.显示队列的所有元素;\n5.队列长度:\n6.结束;\n");while(1){switch(menu_select()){case 1:printf("请输入队列元素(以0结束):\n");scanf("%d",&elem);while(elem!=0){EnQueue(Q,elem);scanf("%d",&elem);}printf("队列为:\n");Display(Q);fflush(stdin);break;case 2:scanf("%d",&elem);EnQueue(Q,elem);printf("队列为:\n");Display(Q);fflush(stdin);break;case 3:DeQueue(Q,elem);printf("队列为:\n");Display(Q);break;case 4:printf("\n队列的所有元素:\n");Display(Q);break;case 5:printf("%d\n",QueueLength(Q));break;case 6:return;}}}运行结果:实验二、数组㈠、实验内容:数组一般不做插入或删除操作,也就是说,一旦建立了数组,则结构中的数据元素个数和元素之间的关系就不再发生变动。
中级软考必背知识点归纳总结中级软考,即计算机技术与软件专业技术资格(水平)考试中级,是衡量计算机专业技术人员专业水平的重要标准之一。
以下是一些必背的知识点归纳总结,以助于考生复习和准备。
1. 数据结构- 线性结构:数组、链表(单链表、双向链表、循环链表)、栈(顺序栈、链栈)、队列(顺序队列、链队列)。
- 树形结构:二叉树、二叉搜索树、平衡树、堆(最大堆、最小堆)。
- 图形结构:图的表示(邻接矩阵、邻接表)、图的遍历(深度优先搜索、广度优先搜索)、最短路径(迪杰斯特拉算法、弗洛伊德算法)、最小生成树(克鲁斯卡尔算法、普里姆算法)。
2. 操作系统- 进程管理:进程状态、进程通信、进程调度算法(先来先服务、短作业优先、轮转调度)。
- 内存管理:内存分配策略、分页、分段、虚拟内存。
- 文件系统:文件的逻辑结构、物理结构、文件控制块、文件目录结构。
3. 计算机网络- 网络模型:OSI七层模型、TCP/IP四层模型。
- 网络协议:IP协议、TCP协议、UDP协议、ICMP协议、ARP协议、RARP协议。
- 网络设备:路由器、交换机、网桥、集线器。
- 网络安全:防火墙、VPN、加密技术。
4. 数据库系统- 数据库模型:关系模型、非关系模型。
- SQL语言:数据定义、数据操纵、数据控制。
- 数据库设计:需求分析、概念性设计、逻辑设计、物理设计。
- 数据库事务:事务的ACID属性(原子性、一致性、隔离性、持久性)。
5. 软件工程- 软件开发生命周期:需求分析、设计、编码、测试、维护。
- 软件开发方法:瀑布模型、迭代模型、敏捷开发。
- 软件需求:需求收集、需求分析、需求规格说明。
- 软件设计:模块化设计、面向对象设计、设计模式。
- 软件测试:单元测试、集成测试、系统测试、验收测试。
6. 程序设计- 编程语言基础:数据类型、控制结构、函数、类和对象。
- 算法设计:排序算法(冒泡排序、选择排序、插入排序、快速排序)、查找算法(线性查找、二分查找)、递归算法。
第1 章绪论课后习题讲解1. 填空⑴()是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。
【解答】数据元素⑵()是数据的最小单位,()是讨论数据结构时涉及的最小数据单位。
【解答】数据项,数据元素【分析】数据结构指的是数据元素以及数据元素之间的关系。
⑶从逻辑关系上讲,数据结构主要分为()、()、()和()。
【解答】集合,线性结构,树结构,图结构⑷数据的存储结构主要有()和()两种基本方法,不论哪种存储结构,都要存储两方面的内容:()和()。
【解答】顺序存储结构,链接存储结构,数据元素,数据元素之间的关系⑸算法具有五个特性,分别是()、()、()、()、()。
【解答】有零个或多个输入,有一个或多个输出,有穷性,确定性,可行性⑹算法的描述方法通常有()、()、()和()四种,其中,()被称为算法语言。
【解答】自然语言,程序设计语言,流程图,伪代码,伪代码⑺在一般情况下,一个算法的时间复杂度是()的函数。
【解答】问题规模⑻设待处理问题的规模为n,若一个算法的时间复杂度为一个常数,则表示成数量级的形式为(),若为n*log25n,则表示成数量级的形式为()。
【解答】Ο(1),Ο(nlog2n)【分析】用大O记号表示算法的时间复杂度,需要将低次幂去掉,将最高次幂的系数去掉。
2. 选择题⑴顺序存储结构中数据元素之间的逻辑关系是由()表示的,链接存储结构中的数据元素之间的逻辑关系是由()表示的。
A 线性结构B 非线性结构C 存储位置D 指针【解答】C,D【分析】顺序存储结构就是用一维数组存储数据结构中的数据元素,其逻辑关系由存储位置(即元素在数组中的下标)表示;链接存储结构中一个数据元素对应链表中的一个结点,元素之间的逻辑关系由结点中的指针表示。
⑵假设有如下遗产继承规则:丈夫和妻子可以相互继承遗产;子女可以继承父亲或母亲的遗产;子女间不能相互继承。
则表示该遗产继承关系的最合适的数据结构应该是()。
数据结构C语言版实验教案一、实验目的1. 理解数据结构的基本概念和原理。
2. 掌握C语言的基本语法和编程技巧。
3. 培养实际操作能力和问题解决能力。
二、实验内容1. 线性表的实现与操作。
2. 栈和队列的实现与操作。
3. 链表的实现与操作。
4. 树和图的实现与操作。
5. 排序和查找算法的实现与优化。
三、实验环境1. 操作系统:Windows或Linux。
2. 编程语言:C语言。
3. 编译器:GCC或Clang。
4. 开发工具:Visual Studio或Code::Blocks。
四、实验步骤1. 了解实验要求,阅读相关教材和资料。
2. 分析实验问题,设计实验方案。
3. 编写实验代码,进行调试和测试。
4. 分析实验结果,总结实验经验和教训。
5. 完成实验报告,提交实验代码和报告。
五、实验评价1. 代码规范性和可读性。
2. 实验问题的解决能力和创新性。
4. 实验操作的熟练程度和团队合作能力。
六、线性表的实现与操作1. 实验目的:学习线性表的基本概念。
掌握线性表的顺序存储结构和存储结构。
学会实现线性表的基本操作,如插入、删除、查找和打印。
2. 实验内容:实现一个简单的线性表。
实现线性表的插入和删除操作。
实现线性表的查找和打印操作。
3. 实验环境:同上。
4. 实验步骤:设计一个线性表的数据结构。
编写实现线性表操作的函数。
编写测试线性表操作的程序。
调试并运行程序,验证操作的正确性。
5. 实验评价:同上。
七、栈和队列的实现与操作1. 实验目的:理解栈和队列的基本概念和特点。
掌握栈和队列的顺序存储结构和存储结构。
学会实现栈和队列的基本操作,如入栈、出栈、入队、出队等。
2. 实验内容:实现一个简单的栈。
实现一个简单的队列。
实现栈和队列的综合应用,如数制转换等。
3. 实验环境:同上。
4. 实验步骤:设计栈和队列的数据结构。
编写实现栈和队列操作的函数。
编写测试栈和队列操作的程序。
调试并运行程序,验证操作的正确性。
5. 实验评价:同上。
软件设计师学习笔记(自己整理)1、下午主要考题:数据流图:指出错误的数据流;缺少数据流;数据字典;加工访问文件;外部实体。
面向对象程序设计:UML(统一建模语言,共有9种图形)中的类图(类的关系),顺序图。
数据库设计:E-R图(实体之间的关系,实体之间联系的几种类型,几种类型如何转化成相应的关系模式);关系模式(必考和分值集中的考点,主要考察关系的属性,主键和外键);SQL;数据库的完整性(实体完整性,数据完整性,参照完整性)。
算法设计/C程序设计:关键路径;最短路径;回溯法;散列法;观察者模式;多叉平衡查找树。
(几种程序设计中考察的难易程度最大,考察算法)C++程序设计:单身模式;继承;观察者模式;类的定义。
Java程序设计:异常处理;继承;观察者模式;类的定义。
Web service:信息加密:2、数据流图的设计原则例题:实体与实体之间是不能有数据流的;数据流必须与加工有关;存储与存储之间也是不能有数据流的;实体与数据存储之间也不能有数据流;对一个加工而言,输入与输出数据流的名字不能相同,且要平衡,即有输入也要有输出;父图与子图的守恒原则。
3、操作系统例题讲解:题目答案为:D A知识要点:并行使用I/O设备即可以同时使用该设备;可剥夺方式优先级的进程调度方案即优先级高的优先使用cup或是i/o设备。
4、数据库设计例题讲解答案:问题一:m n 1 n m n问题二:读者ID 图书ID 读者ID ISBN号问题三:读者ID ;ISBN号;图书ID, ISBN号;读者ID 图书ID,读者ID 图书ID 借出时间;读者ID ISBN号预约时间,读者ID ISBN号图书ID考题分析:E-R图当中各个实体的联系类型,写出关系的属性,找出它的主键和外键5、数据结构之最小生成树:6、多媒体名称产生年份技术特点应用范围压缩对象1993.8 每秒1.5M MP3(MPEG-1第三层)视频压缩MPEG-1MPEG-1994 3-100M/S 数字电视,高清电视视频压缩2MPEG-1999.2 内容交互性,访问性,压缩性交互式游戏,广播电视,视频压缩4 Internet网MPEG-1998.10 多种音频和视频的描述智能多媒体,教育领域视频压缩7将不同的标准技术进行融合媒体数据的存储,隐私保护视频压缩MPEG-21MPEG-7:多媒体内容描述接口BMP 位图占空间大DIB 位图支持多种平台占空间大支持多种平台PCX 压缩功能DIF 矢量图放大图形不失真WMF 小图标,矢量图小微软GIF 网页上颜色少,256色小,质量高,动画JPEG 24位真彩图质量高PSD PSCDR CDRPCD 柯达公司WAVE 计算的音频的文件未经过压缩与bmp相似MOD 音色的样本和音频文件4,16,32个声段MP3 MPEG-1-V3Real Audio 网速传输压缩率高CD Audio 保存原声质量太大,不能被编辑MIDI 占空间最小不能记录人的声音播放音乐不能播放声音ASF:使用的是MPEG-4标准,微软公司提出。
2016年下半年软件设计师真题+答案解析(上午选择+下午案例完整版)1、在程序运行过程中,CPU需要将指令从内存中取出并加以分析和执行。
CPU依据( )来区分在内存中以二进制编码形式存放的指令和数据。
A。
指令周期的不同阶段B. 指令和数据的寻址方式C。
指令操作码的译码结果D. 指令和数据所在的存储单元答案: A指令和数据是都存储在内存中,传统计算机CPU在执行过程中根据指令周期的不同阶段来区分是指令还是数据,取指周期取出的是指令,执行周期取出的是数据。
2、计算机在一个指令周期的过程中,为从内存读取指令操作码,首先要将()的内容送到地址总线上。
A. 指令寄存器(IR)B。
通用寄存器(GR)C。
程序计数器(PC)D。
状态寄存器(PSW)答案: CPC(程序计数器)是用于存放下一条指令所在单元的地址。
当执行一条指令时,处理器首先需要从PC中取出指令在内存中的地址,通过地址总线寻址获取。
3、设16位浮点数,其中阶符1位、阶码值6位、数符1位、尾数8位。
若阶码用移码表示,尾数用补码表示,则该浮点数所能表示的数值范围是()。
A。
-264 ~(1—2-8)264B. -263~(1—2-8)263C. -264 ~(1-2-(1—2-8)264 ~(1—2—8)264D. —(1—2-8)263 ~(1-2-8)263;24415 5F5F 彟22182 56A6 嚦@6U答案: B如果浮点数的阶码(包括1位阶符)用R位的移码表示,尾数(包括1位数符)用M位的补码表示,则浮点数表示的数值范围如下。
4、已知数据信息为16位,最少应附加()位校验位,以实现海明码纠错。
A. 3B。
4C。
5D. 6答案: C海明码的构造方法是:在数据位之间插入k个校验位,通过扩大码距来实现检错和纠错。
设数据位是n位,校验位是k位,则n和k的必须满足以下的关系.2K—1≥n+k数据为16位时,至少需要5位校验位。
25-1≥16+55、将一条指令的执行过程分解为取址、分析和执行三步,按照流水方式执行,若取指时间t取址=4△t、分析时间t分析=2△t、执行时间t执行=3△t,则执行完100条指令,需要的时间为()△t。
第3章栈和队列习题1.选择题(1)若让元素1,2,3,4,5依次进栈,则出栈次序不可能出现在()种情况。
A.5,4,3,2,1 B.2,1,5,4,3 C.4,3,1,2,5 D.2,3,5,4,1(2)若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pn,若p1=n,则pi为()。
A.i B.n-i C.n-i+1 D.不确定(3)数组Q[n]用来表示一个循环队列,f为当前队列头元素的前一位置,r为队尾元素的位置,假定队列中元素的个数小于n,计算队列中元素个数的公式为()。
A.r-f B.(n+f-r)%n C.n+r-f D.(n+r-f)%n (4)链式栈结点为:(data,link),top指向栈顶.若想摘除栈顶结点,并将删除结点的值保存到x中,则应执行操作()。
A.x=top->data;top=top->link; B.top=top->link;x=top->link;C.x=top;top=top->link; D.x=top->link;(5)设有一个递归算法如下int fact(int n) { //n大于等于0if(n<=0) return 1;else return n*fact(n-1); }则计算fact(n)需要调用该函数的次数为()。
A. n+1 B. n-1 C. n D. n+2 (6)栈在()中有所应用。
A.递归调用 B.函数调用 C.表达式求值 D.前三个选项都有(7)为解决计算机主机与打印机间速度不匹配问题,通常设一个打印数据缓冲区。
主机将要输出的数据依次写入该缓冲区,而打印机则依次从该缓冲区中取出数据。
该缓冲区的逻辑结构应该是()。
A.队列 B.栈 C.线性表 D.有序表(8)设栈S和队列Q的初始状态为空,元素e1、e2、e3、e4、e5和e6依次进入栈S,一个元素出栈后即进入Q,若6个元素出队的序列是e2、e4、e3、e6、e5和e1,则栈S的容量至少应该是()。
2022年职业考证-软考-软件设计师考试全真模拟易错、难点剖析AB卷(带答案)一.综合题(共15题)1.单选题以下Windows系统中用于清除本地DNS缓存的命令是()。
问题1选项A.ipconfig/ releaseB.ipconfig/ flushdnsC.ipconfig/ displaydnsD.ipconfig/ registerdns【答案】B【解析】A选项ipconfig/release :释放IP地址租约。
B选项ipconfig/ flushdns:清楚本地DNS缓存,本题选择B选项。
C选项ipconfig/ displaydns:显示本地DNS内容。
D选项 ipconfig/ registerdns:DNS客户端手工向服务器进行注册。
其他:ipconfig /all:显示本机TCP/IP配置的详细信息。
ipconfig /renew:DHCP客户端手工向服务器刷新请求。
ipconfig /showclassid:显示网络适配器的DHCP类别信息。
ipconfig /setclassid:设置网络适配器的DHCP类别。
ipconfig /renew “Local Area Connection”:更新“本地连接”适配器的由 DHCP 分配 IP 地址的配置。
ipconfig /showclassid Local*:显示名称以 Local 开头的所有适配器的 DHCP 类别 ID。
ipconfig /setclassid “Local Area Connection” TEST:将“本地连接”适配器的 DHCP 类别 ID 设置为 TEST。
2.案例题生物学上通常采用编辑距离来定义两个物种DNA序列的相似性,从而刻画物种之间的进化关系。
具体来说,编辑距离是指将一个字符串变换为另一个字符串所需要的最小操作次数。
操作有三种,分别为:插入一个字符、删除一个字符以及将一个字符修改为另一个字符。
2017年下半年(中级)软件设计师真题+答案解析(上午选择+下午案例完整版)全国计算机软考1.防火墙的功能特性包括控制进出网络的数据包和数据流向、提供流量信息的日志和审计、隐藏内部IP以及网络结构细节。
正确答案为D,即提供漏洞扫描功能不是防火墙的功能特性。
2.在程序执行过程中,Cache与主存的地址映射是由硬件自动完成的,而不是由程序员调度或用户软件完成。
3.该四级指令流水线完成四步操作的时间依次为8ns、9ns、4ns、8ns,因此操作周期应至少为最长的时间4ns,即答案为C。
4.地址从AOOOOH到DFFFFH共有14位,需要用2的14次方个地址,即32K。
每个存储器芯片容量为32K/8=4K,因此需要8片芯片,答案为B。
5.计算机系统的主存主要是由DRAM构成的,而不是SRAM、Cache或EEPROM。
6.海明码利用奇偶性进行检错和纠错,因此答案为A。
码距为1的是重复码,海明码的数据位和校验位长度不一定相同。
7.CPU与外设进行数据交换时,采用中断方式和DMA方式可以并行工作,答案为B。
8.HTTPS协议基于SSL安全协议进行加密,答案为C。
默认端口为443,而不是1023、80或8080.9.HTTPS协议基于SSL安全协议进行加密,默认端口为443,答案为B。
10.典型被动攻击包括监听、嗅探和分析网络流量等,而系统干涉是一种主动攻击行为,答案为C。
11.入侵检测技术包括专家系统、模型检测、异常检测和特征检测等,因此答案为B。
21、脚本语言中常使用变量和函数,因此选项A不正确。
其他选项都正确。
22、中间代码常采用符号表来表示,因此选项A正确。
后缀式和三地址码也是常用的中间代码。
对中间代码进行优化时,需要考虑运行程序的机器特性,但并不是必须的,因此选项C不完全正确。
中间代码可以跨平台,因此选项D不正确。
23、基于硬件之上的软件可分为操作系统、系统软件和应用软件三个层次,其中操作系统位于最底层,系统软件位于中间层,应用软件位于最上层。
2020年下半年软件设计师真题+答案解析上午选择1、在程序执行过程中,高速缓存(Cache)与主存间的地址映射由()。
A.操作系统进行管理B.操作系统进行管理C.程序员自行安排D.硬件自动完成答案:DCache与主存地址映射由硬件完成。
2、计算机中提供指令地址的程序计数器PC在()中。
A.控制器B.运算器C.存储器D.I/O设备答案:APC是控制器中的子部件。
3、以下关于两个浮点数相加运算的叙述中,正确的是().A.首先进行对阶,阶码大的向阶码小的对齐B.首先进行对阶,阶码小的向阶码大的对齐C.不需要对阶,直接将尾数相加D.不需要对阶,直接将阶码相加答案:B浮点数运算的过程:对阶→尾数运算→规格化。
其中对阶的过程:小数向大数看齐,尾数右移。
4、某计算机系统的CPU主频为2.8GHz。
某应用程序包括3类指令,各类指令的CPI(执行每条指令所需要的时钟周期数)及指令比例如’下表所示。
执行该应用程序时的平均CPI为(4);运算速度用MIPS表示,约为(5)。
A.25B.3C. 3.5D.4答案:C5、A.700B.800C.930D.1100答案:B第一问关于平均CPI,即对列出的CPI求平均数。
4*35%+2*45%+6*20%=3.5。
第二问求MIPS,即每秒执行的百万条指令数。
根据第一问CPI,每条指令需要的时钟周期为4,每个时钟周期为主频的倒数,即1/2.8G秒,则每条指令需要时间3.5/2.8G秒。
每秒执行指令数为1/(3.5/2.8G)=2.8G/3.5=0.8G=800M。
(1M=106,1G=109)6、中断向量提供().A.函数调用结束后的返回地址B.I/O设备的接口地址C.主程序的入口地址D.中断服务程序入口地址答案:D中断向量就是指中断服务程序的入口地址,它存放着一条跳转到中断服务程序入口地址的跳转指令。
7、以下关于认证和加密的叙述中,错误的是()。
A.加密用以确保数据的保密性B.认证用以确保报文发送者和接收者的真实性C.认证和加密都可以阻止对手进行被动攻击D.身份认证的目的在于识别用户的合法性,阻止非法用户访问系统答案:C认证一般有账户名/口令认证、使用摘要算法认证和基于PKI的认证。
2022年职业考证-软考-软件设计师考试全真模拟易错、难点剖析B卷(带答案)一.综合题(共15题)1.单选题采用循环队列的优点是()问题1选项A.入队和出队可以在队列的同端点进行操作B.入队和出队操作都不需要移动队列中的其他元素C.避免出现队列满的情况D.避免出现队列空的情况【答案】B【解析】本题考查数据结构循环队列的问题。
1、循环队列的优点:可以有效的利用资源。
用数组实现队列时,如果不移动,随着数据的不断读写,会出现假满队列的情况。
即尾数组已满但头数组还是空的;循环队列也是一种数组,只是它在逻辑上把数组的头和尾相连,形成循环队列,当数组尾满的时候,要判断数组头是否为空,不为空继续存放数据。
2、循环队列的缺点:循环队列中,由于入队时尾指针向前追赶头指针;出队时头指针向前追赶尾指针,造成队空和队满时头尾指针均相等。
因此,无法通过条件front==rear来判别队列是"空"是"满"。
3、拓展知识:为充分利用向量空间,克服"假溢出"现象的方法是:将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量。
存储在其中的队列称为循环队列。
综上所述,C,D都不属于其优点,B选项是循环队列的优点,A是对栈的描述。
2.单选题中断向量提供()。
问题1选项A.被选中设备的地址B.待传送数据的起始地址C.中断服务程序入口地址D.主程序的断点地址【答案】C【解析】属于输入输出技术的中断方式:中断向量表:中断向量表用来保存各个中断源的中断服务程序的入口地址。
当外设发出中断请求信号以后,由中断控制器确定其中断号,并根据中断号查找中断向量表来取得其中断服务程序的入口地址,同时INTC 把中断请求信号提交给CPU。
3.单选题归并排序算法在排序过程中,将待排序数组分为两个大小相同的子数组,分别对两个子数组采用归并排序算法进行排序,排好序的两个子数组采用时间复杂度为0(n)的过程合并为一个大数组。
软考系统架构设计师教程考点精讲(一)软考系统架构设计师属于软考中的一项高级资格考试,考试分综合知识、案例分析和论文3个科目。
系统架构设计师考试作为一项高级资格考试,有一定的考试难度,那么该如何备考才能顺利通过考试呢?面对系统架构设计师教程无从下手的同学,希赛为您准备了几个重要的教程章节考点精讲,希望对您的学习有所帮助。
第一章1.1.1系统架构师的概念现代信息系统“架构”三要素:构件、模式、规划;规划是架构的基石,也是这三个贡献中最重要的。
架构本质上存在两个层次:概念层,物理层。
1.2.1系统架构师的定义负责理解、管理并最终确认和评估非功能性系统需求,给出开发规范,搭建系统实现的核心架构,对整个软件架构、关键构建、接口进行总体设计并澄清关键技术细节。
主要着眼于系统的“技术实现”,同时还要考虑系统的“组织协调”。
要对所属的开发团队有足够的了解,能够评估该开发团队实现特定的功能需求目标和资源代价。
1.2.2系统架构师技术素质对软件工程标准规范有良好的把握。
1.2.3系统架构师管理素质系统架构师是一个高效工作团队的创建者,必须尽可能使所有团队成员的想法一致,为一个项目订制清晰的、强制性的、有元件的目标作为整个团队的动力;必须提供特定的方法和模型作为理想的技术解决方案;必须避免犹豫,必须具备及时解决技术问题的紧迫感和自信心。
1.2.4系统架构师与其他团队角色的协调系统分析师,需求分析,技术实现系统架构师,系统设计,基于环境和资源的系统技术实现项目管理师,资源组织,资源实现来源:由于职位角度出发产生冲突制约,不可能很好地给出开发规范,搭建系统实现的核心架构,并澄清技术细节,扫清主要难点。
所以把架构师定位在项目管理师与系统分析师之间,为团队规划清晰的目标。
对于大型企业或项目,如果一人承担多个角色,往往容易发生顾此失彼的现象。
1.3系统架构师知识结构需要从大量互相冲突的系统方法和工具中区分出哪些是有效的,那些是无效的。
【软考软件设计师中级真题】第1章2005上半年软件设计师级上午试题分析与解答试题(1)、(2)在计算机中,最适合进行数字加减运算的数字编码是(1),最适合表示浮点数阶码的数字编码是(2)。
(1)A.原码B.反码C.补码D.移码(2)A.原码B.反码C.补码D.移码试题(1)、(2)分析在计算机的CPU中,通常只设置硬件加法器。
只有补码能够将减法转化为加法,故用硬件加法器可以较方便地进行数字加减法。
由于正数的移码大于负数的移码,利用这一特点,移码被广泛用来表示浮点数阶码的数字编码,这可以用比较阶码的大小来实现真值大小的比较。
参考答案(1)C (2)D试题(3)如果主存容量为16M字节,且按字节编址,表示该主存地址至少应需要(3)位。
(3)A.16 B.20 C.24 D.32试题(3)分析用二进制编码表示地址,16M字节地址最少需要24位。
参考答案(3)C试题(4)~(6)操作数所处的位置,可以决定指令的寻址方式。
操作数包含在指令中,寻址方式为(4);操作数在寄存器中,寻址方式为(5);操作数的地址在寄存器中,寻址方式为(6)。
(4)A.立即寻址B.直接寻址C.寄存器寻址D.寄存器间接寻址(5)A.立即寻址B.相对寻址C.寄存器寻址D.寄存器间接寻址(6)A.相对寻址B.直接寻址C.寄存器寻址D.寄存器间接寻址【软考软件设计师中级真题】试题(4)~(6)分析操作数包含在指令中的寻址方式为立即寻址;操作数在寄存器中的寻址方式为寄存器寻址;操作数的地址在寄存器中的寻址方式为寄存器间接寻址。
参考答案(4)A (5)C (6)D试题(7)三个可靠度R均为0.8的部件串联构成一个系统,如下图所示:则该系统的可靠度为(7)。
(7)A.0.240 B.0.512 C.0.800 D.0.992试题(7)分析本题中由三个部件串联构成系统,三个部件中任何一个部件失效就足以使系统失效。
串联系统的可靠度RS=R×R×R=0.8×0.8×0.8=0.512。
2018年上半年软件设计师真题+答案解析上午选择1、对有n个结点、e条边且采用数组表示法(即邻接矩阵存储)的无向图进行深度优先遍历,时间复杂度为(1)。
A.O(n2)B.O(e2)C.O(n+e)D.O(n*e)答案:A在邻接表中,就是要依次访问每个顶点,然后在每个顶点中依次访问每条边,把这些边的终点的入度+1。
也就是每个顶点和每条边依次要各访问一遍,所以时间复杂度是O(n+e)。
在邻接矩阵中,算法需要遍历邻接矩阵的每一个点,而邻接矩阵有n*n个点,所以时间复杂度是O(n*n)。
2、浮点数的表示分为阶和尾数两部分。
两个浮点数相加时,需要先对阶,即()(n为阶差的绝对值)。
A.将大阶向小阶对齐,同时将尾数左移n位B.将大阶向小阶对齐,同时将尾数右移n位C.将小阶向大阶对齐,同时将尾数左移n位D.将小阶向大阶对齐,同时将尾数右移n位答案:D对阶时,小数向大数看齐;对阶是通过较小数的尾数右移实现的。
3、计算机运行过程中,遇到突发率件,要求CPU暂时停止正在运行的程序,转去为突发事件服务,服务完毕,再自动返回原程序继续执行,这个过程称为(3),其处理过程中保存现场的目的是(4)。
A.阻塞B.中断C.动态绑定D.静态绑定答案:B4、 A.防止丢失数据B.防止对其他部件造成影响C.返回去维续执行原程序D.为中断处理程序提供数据答案:C中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。
5、海明码是一种纠错码,其方法是为需要校验的数据位增加若干校验位,使得校验位的值决定于某些被校位的数据,当被校数据出错时,可根据校验位的值的变化找到出错位,从而纠正错误。
对于32位的数据,至少需要加(5)个校验位才能构成海明码。
以10位数据为例,其海明码表示为D9D8D7D6D5D4P4D3D2D1P3D0P2P1中,其中Di(0≤i≤9)表示数据位,Pj(1≤j≤4)表示校验位,数据位D9由P4、P3和P2进行校验(从右至左D9的位序为14,即等于8+4+2,因此用第8位的P4、第4位的P3和第2位的P2校验),数据位D5由(6)进行校验。
2018年上半年软件设计师真题+答案解析上午选择1、对有n个结点、e条边且采用数组表示法(即邻接矩阵存储)的无向图进行深度优先遍历,时间复杂度为(1)。
A. O(n2)B. O(e2)C. O(n+e)D. O(n*e)答案:A在邻接表中,就是要依次访问每个顶点,然后在每个顶点中依次访问每条边,把这些边的终点的入度+1。
也就是每个顶点和每条边依次要各访问一遍,所以时间复杂度是O(n+e)。
在邻接矩阵中,算法需要遍历邻接矩阵的每一个点,而邻接矩阵有n*n个点,所以时间复杂度是O(n*n)。
2、浮点数的表示分为阶和尾数两部分。
两个浮点数相加时,需要先对阶,即()(n为阶差的绝对值)。
A. 将大阶向小阶对齐,同时将尾数左移n位B. 将大阶向小阶对齐,同时将尾数右移n位C. 将小阶向大阶对齐,同时将尾数左移n位D. 将小阶向大阶对齐,同时将尾数右移n位答案:D对阶时,小数向大数看齐;对阶是通过较小数的尾数右移实现的。
3、计算机运行过程中,遇到突发率件,要求CPU暂时停止正在运行的程序,转去为突发事件服务,服务完毕,再自动返回原程序继续执行,这个过程称为(3),其处理过程中保存现场的目的是(4)。
A. 阻塞B. 中断C. 动态绑定D. 静态绑定答案:B4、 A. 防止丢失数据B. 防止对其他部件造成影响C. 返回去维续执行原程序D. 为中断处理程序提供数据答案:C中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。
5、海明码是一种纠错码,其方法是为需要校验的数据位增加若干校验位,使得校验位的值决定于某些被校位的数据,当被校数据出错时,可根据校验位的值的变化找到出错位,从而纠正错误。
对于32位的数据,至少需要加(5)个校验位才能构成海明码。
以10位数据为例,其海明码表示为D9D8D7D6D5D4P4D3D2D1P3D0P2P1中,其中Di(0≤i≤9)表示数据位,Pj(1 ≤j≤4)表示校验位,数据位D9由P4、P3和P2进行校验(从右至左D9的位序为14,即等于8+4+2,因此用第8位的P4、第4位的P3和第2位的P2校验),数据位D5由(6)进行校验。
-1-数据结构学习(C++)(合集)题外话:先前有一篇文章叫《用C++模板描述的链表、栈、队列(声明与实现)》,当时是第一次发表文章(我才注册没几天),很不成熟,改了又改不说,还弄的老长,不利于阅读。于是我重写了一下,并且想做成一个系列,这从我的标题可以看出来。好,言归正传。本篇为后面一系列文章的序言,旨在说明写作的目的,以及写作的风格;或者说是为自己可能的错误,预先给个托词。如果您不想听我在这废话,请跳过本篇,直接阅读后面的文章。但是这样,我不能保证,您在阅读的同时,不会骂我白痴。
为什么写这些文章
这些文章可以说是《数据结构(用面向对象方法与C++描述)》这本书的读书笔记,但也不完全是。数据结构是计算机专业必修课——几乎每个计算机专业的学生都会推崇他的重要;同时,也是其他专业转修计算机专业的一个难点。从学习的角度来说,严蔚敏的《数据结构(C语言版)》是本不错的书。但是,C语言不是描述的理想工具。《数据结构(C语言版)》的前言里是这样说的:“虽然C语言不是抽象数据类型的理想描述工具,但鉴于目前和近一、二年内,……并增添了C++语言的引用调用参数传递方式等,构成了一个类C描述语言。”从抽象数据类型的定义——一个数学模型以及定义在该模型上的一组操作——可以看出,面向对象语言中类的概念和这个定义很接近,加之C语言的普及,用C++来描述于是就成了顺理成章的事情。于是,清华在2002年的考研参考书目中对《数据结构》的参考书做了改变,使用《数据结构(用面向对象方法与C++描述)》(殷人昆等编著,ISBN7-302-03405-2/TP1845)作为参考书,而实际上考的也是(废话,不是那叫误导)。坦白的讲,原书把教学目的和提供实例的目的搞混了,结果是个四不象:作为教科书,条理不清晰;提供各个方法的实现,也不是很实用,相反,重复建设太多。至于错误,可能有些是笔误,比如少个友元声明了,不是继承而使用别的类的成员函数没有指明了;还有一些,就是考虑不够周全。不管怎么说,现在不是挑书的时候,你想考清华的计算机专业研究生吗,这本书是你不二的选择。我发现读懂此书的最好方法,就是自己按照书上的思路,以及实际应用的分析,自己重新实现各种抽象数据类型。这样做还有一个好处,为自己将来积累一点财富。
我的写作风格
编译器我选用的是VC6,因此,我不保证我提供的代码在别的编译器也能通过——从头到尾只使用了iostream.h,没有任何别的库,当然更没有MFC,标准的C++代码应该没什么问题。全部是手工完成的代码,没有使用ClassWizard,主要是不喜欢那些乱七八糟的预处理和注释。这样完成之后,发现C++的声明和实现分开xx.h+xx..ccp这种文档结构并不招人喜欢——很乱。于是我采用了单工程单cpp的结构,就是一个工程只有一个cpp文件,放main(),其他的部分都是头文件,声明和实现放在一起——其实这是违反C++规范的,C++要求函数必须声明原型,实际上,我觉得这很罗嗦(我这是典型的C后遗症,以前用TC时为了不声明原型,把函数都放到main()前面),声明一下原型,我认为这和设定密码需要确认一个道理。由于使用的IDE环境,把声明单独集中起来作为-2-
一个文件已经没有必要——ClassView窗口很好用,就因为如此,我几乎从来不去看类的声明文件。除非你提供的是一个库,在你的工程中单独的声明文件已经不是必须的了。当然,这里的前提是从一个空的工程建立你的项目。如果你使用了AppWizard,我很难想象不使用ClassWizard的。因为这时文档的结构已经确定了,你所做的实际上是在修修补补。
什么人适合读这些文章
刚开始从C过渡到C++的人,看完这些后,会体会到C++的新特性。
和我一样研读那本黄皮书的人,希望看完之后能更好的理解和学习。
从未编写过超过1000行代码程序的人,这样我们才能达到共鸣。因为我们从来不使用工具和
库文件,做的事都是在编程老手看来很蠢的事。
一些约定
假定你使用的是VC6,先建立一个Win32ConsoleApplication的emptyproject。后面将陆续往这个工程中添加文件(就是将后面介绍的每一个文件都添加进去,不然到时候找不到xx.h不要埋怨),每一个#ifndefxx_H~#endif和其中的部分为一个头文件,文件名为xx.h。例如:#ifndefList_H#defineList_H……#endif这一大块为一个文件,文件名为List.h
数据结构学习(C++)—队列应用(事件驱动模拟)我看的两本教科书(《数据结构(C语言版)》还有这本黄皮书)都是以这个讲解队列应用的,而且都是银行营业模拟(太没新意了)。细比较,这两本书模拟的银行营业的方式还是不同的。1997版的《数据结构(C语言版)》的银行还是老式的营业模式(毕竟是1997年的事了),现在的很多地方还是这种营业模式——几个窗口同时排队。这种方式其实不太合理,经常会出现先来的还没有后来的先办理业务(常常前面一个人磨磨蹭蹭,别的队越来越短,让你恨不得把前面那人干掉)。1999版的这本黄皮书的银行改成了一种挂牌的营业方式,每个来到的顾客发一个号码,如果哪个柜台空闲了,就叫号码最靠前的顾客来办理业务;如果同时几个柜台空闲,就按照一种法则来决定这几个柜台叫号的顺序(最简单的是按柜台号码顺序)。这样,就能保证顾客按照先来后到的顺序接受服务——因为大家排在一个队里。这样的营业模式我在北京的西直门工商银行见过,应该说这是比较合理的一种营业模式。不过,在本文中最重要的是,这样的营业模式比较好模拟(一个队列总比N个队列好操作)。原书的这部分太难看了,我看的晕晕的,我也不知道按照原书的方法能不能做出来,因为我没看懂(旁白:靠,你小子这样还来现眼)。我按照实际情况模拟,实现如下:#ifndefSimulation_H#defineSimulation_H-3-
#include#include#include
classTeller{public:inttotalCustomerCount;inttotalServiceTime;intfinishServiceTime;Teller():totalCustomerCount(0),totalServiceTime(0),finishServiceTime(0){}};//#definePRINTPROCESSclassSimulation{public:Simulation(){cout
Simulation(inttellerNum,intsimuTime,intarrivalLow,intarrivalHigh,intserviceLow,intserviceHigh):tellerNum(tellerNum),simuTime(simuTime),arrivalLow(arrivalLow),arrivalHigh(arrivalHigh),serviceLow(serviceLow),serviceHigh(serviceHigh),arrivalRange(arrivalHigh-arrivalLow+1),serviceRange(serviceHigh-serviceLow+1){srand((unsigned)time(NULL));}-4-
voidInitialize(){curTime=nextTime=0;customerNum=customerTime=0;for(inti=1;i<=tellerNum;i++){tellers[i].totalCustomerCount=0;tellers[i].totalServiceTime=0;tellers[i].finishServiceTime=0;}customer.MakeEmpty();}
voidRun(){Initialize();NextArrived();#ifdefPRINTPROCESScout