ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:91.07KB ,
资源ID:3509320      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3509320.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(复习要点.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

复习要点.docx

1、复习要点1.后缀表达式转换表达式之间的转换 这里我给出一个中缀表达式:a+b*c-(d+e) 第一步:按照运算符的优先级对所有的运算单位加括号:式子变成拉:(a+(b*c)-(d+e) 第二步:转换前缀与后缀表达式 前缀:把运算符号移动到对应的括号前面 则变成拉:-( +(a *(bc) +(de) 把括号去掉:-+a*bc+de 前缀式子出现 后缀:把运算符号移动到对应的括号后面 则变成拉:(a(bc)* )+ (de)+ )- 把括号去掉:abc*+de+- 后缀式子出现 发现没有,前缀式,后缀式是不需要用括号来进行优先级的确定的。如表达式:3+(2-5)*6/3后缀表达式 栈3 +3 +

2、(3 2 +(-3 2 5 - +3 2 5 - +*3 2 5 - 6 +*/3 2 5 - 6 3 +*/3 2 5 - 6 3 / * +2.时间复杂度空间复杂度计算时间复杂度指的是算法执行时所用的时间的一个度量,空间复杂度是算法在执行时对所用存储空间的一个度量。例如,一个有n个元素的数组,每个元素的值为n,n=1,2,.n.如果把每个元素都打印出来,从1到n的时间复杂度就是O(n),如果你是把n个元素依次进栈然后立马出栈,则所需要的空间复杂度就是O(1)。你可以在辅导书上看一下这方面的例题,这个知识点不是很难,认真看肯定可以明白的。2空间复杂度 空间复杂度:算法所需存储空间的度量,记作

3、: S(n)=O( f(n) ) 其中 n 为问题的规模。一个算法所需存储空间:算法本身的存储空间、输入数据的存储空间、算法在运行过程中临时占用的存储空间。 如果额外空间相对于输入数据量来说是个常数,则称此算法是原地工作。3.某计算机内存按字节编址,内存地址区域从44000H到6BFFFH,共有多少K字节。若采用16K4bit的SRAM芯片,构成该内存区域共需多少片。答案也有了,6BFFFH - 44000H + 1H = 28000H = 163840 / 1024 = 160K需要20片 但是不理解为什么要“+1H”,为什么是“163840/1024”呢?谁能解释一下答案,谢谢了!补充:

4、那题中给出的16K4bit是干吗用的啊?别的题还有32K8bit 谢谢4.熊猫烧香危害程度:该病毒感染计算机系统后,会主动搜索受感染系统中邮件地址簿列表文件,找到后按照邮件地址逐一向外发送带有该病毒附件的电子邮件,并且在该日删除系统硬盘中的可执行文件(后缀名:.exe)和动态连接库文件(后缀名:.dll),造成计算机系统无法正常使用。CIH属恶性病毒,当其发作条件成熟时,其将破坏硬盘数据,同时有可能破坏BIOS程序,其发作特征CIH病毒是:1、以2048个扇区为单位,从硬盘主引导区开始依次往硬盘中写入垃圾数据,直到硬盘数据被全部破坏为止。最坏的情况下硬盘所有数据(含全部逻辑盘数据)均被破坏,如

5、果重要信息没有备份,那就只有哭了!2、某些主板上的Flash Rom中的BIOS信息将被清除。3、v1.4版本每月26号发作,v1.3版本每年6月26号发作,以下版本4月26号发作。5. 软件需求包括3个不同的层次业务需求、用户需求和功能需求。 除此之外,每个系统还有各种非功能需求。 业务需求(Business requirement)表示组织或客户高层次的目标。业务需求通常来自项目投资人、购买产品的客户、实际用户的管理者、市场营销部门或产品策划部门。业务需求描述了组织为什么要开发一个系统,即组织希望达到的目标。使用前景和范围(vision and scope)文档来记录业务需求,这份文档有时

6、也被称作项目轮廓图或市场需求(project charter 或 market requirement)文档。 用户需求(user requirement)描述的是用户的目标,或用户要求系统必须能完成的任务。用例、场景描述和事件响应表都是表达用户需求的有效途径。也就是说用户需求描述了用户能使用系统来做些什么。 功能需求(functional requirement)规定开发人员必须在产品中实现的软件功能,用户利用这些功能来完成任务,满足业务需求。功能需求有时也被称作行为需求(behavoral requirement),因为习惯上总是用“应该”对其进行描述:“系统应该发送电子邮件来通知用户已接

7、受其预定”。功能需求描述是开发人员需要实现什么。 系统需求(system requirement)用于描述包含多个子系统的产品(即系统)的顶级需求。系统可以只包含软件系统,也可以既包含软件又包含硬件子系统。人也可以是系统的一部分,因此某些系统功能可能要由人来承担。 6.解释程序也称为解释器,它或者直接解释执行源程序,或者将源程序翻译成某种中间表示形式后再加以执行;编译程序(编译器)则是将源程序翻译成目标语言程序,然后在计算机上运行目标程序。两种语言处理程序的根本区别是:在编译方式下,机器上运行的是与源程序等价的目标程序,源程序和编译程序都不再参与目标程序的执行过程,而在解释方式下,解释程序和源

8、程序(或某种等价表示)要参与到程序的运行过程中,运行程序的控制权在解释程序。解释器翻译源程序时不生成独立的目标程序,而编译器则将源程序翻译成独立的目标程序。7.画数据流图应该注意的问题汇总分类: 软件工程 2012-04-24 16:07 703人阅读 评论(0) 收藏 举报存储工作画数据流图应该注意的问题数据流图是软件设计师考试必考的题目之一,下面是画数据流图时应该注意的问题,希望对大家有所帮助。1) 适当地为数据流、加工、数据存储、外部实体命名,名字应该反应该成分的实际含义,避免空洞的名字。2) 画数据流而不画控制流3) 一个加工的输出数据流不应与输入数据流同名,即使他们的组成成分相同。4

9、) 允许一个加工有多条数据流流向另外一个加工,也允许一个加工有两个相同的输出数据流流向另外两个不同的加工。5) 保持父图和子图平衡。也就是说,父图中某加工的输入、输出必须与它的子图的输入、输出数据流在数量和名字上相同。值得注意的是,如果父图的一个输入(或输出)数据流对应于子图中几个输入或输出数据流,而子图中组成这些数据流的数据项全体正好是父图中的这一个数据流,那么它们仍然算是平衡的。6) 在自顶向下的分解过程中,若一个数据存储首次出现时只与一个加工有关,那么这个数据存储应作为这个加工的内部文件而不必画出。7) 保持数据守恒。也就是说,一个加工所有输出数据必须能从该加工的输入数据流中直接获得,或

10、者是通过该加工能产生的数据。8) 每隔加工必须既有输入数据流也有输出数据流。9) 在整套数据流图中,每隔数据存储必须既又读的数据流,又有写的数据流。但在某一张子图中可能只有读没有写,或者只有写没有读。四、画分层数据流图时应注意的问题下面从四个方面讨论画分层数据流图时应注意的问题。1合理编号分层数据流图的顶层称为0层,称它是第1层的父图,而第1层既是0层图的子图,又是第2层图的父图,依此类推。由于父图中有的加工可能就是功能单元,不能再分解,因此父图拥有的子图数少于或等于父图中的加工个数。为了便于管理,应按下列规则为数据流图中的加工编号:l 子图中的编号为父图号和子加工的编号组成。l 子图的父图号

11、就是父图中相应加工的编号。为简单起见,约定第1层图的父图号为0,编号只写加工编号1、2、3.,下面各层由父图号1、1.1等加上子加工的编号1、2、3.组成。按上述规则,图的编号即能反映出它所属的层次以及它的父图编号的信息,还能反映子加工的处理信息。例如1表示第1层图的1号加工处理,1.1、1.2、1.3.表示父图为1号加工的子加工,1.3.1、1.3.2、1.3.3.表示父图号为1.3加工的子加工。为了方便,对数据流图中的每个加工,可以只标出局部号,但在加工说明中,必须使用完整的编号。例如图5-4-5可表示第1层图的1号加工的子图,编号可以简化成图中的形式。图5-4-5 简化子图编号示例2注意

12、子图与父图的平衡子图与父图的数据流必须平衡,这是分层数据流的重要性质。这里的平衡指的是子图的输入、输出数据流必须与父图中对应加工的输入、输出数据流相同。但下列两种情况是允许的,一是子图的输入/输出流比父图中相应加工的输入/输出流表达得更细。例如,在图546中,若父图的“订货单”数据流是由客户、品种、帐号、数量四部分组成,则图中的子图和父图是平衡的。在实际中,检查该类情况的平衡,需借助于数据词典进行。二是考虑平衡时,可以忽略枝节性的数据流。例如图5-4-6,在4号加工的子图中4.3号子加工中增加了一个输出,表示出错的数据流(由虚线所示),则子图和父图仍可看作是平衡的。 图5-4-6 子图和父图的

13、平衡图片 子图和父图的平衡动画3局部文件图5-4-7中的父图和子图是平衡的,但子图中的文件W并没在父图中出现。这是由于对文件W的读、写完全局限在加工3.3之内,在父图中各个加工之间的界面上不出现,该文件是子图的局部文件或为临时文件。 图5-4-7 数据流图中的局部文件 应当指出的是,如果一个临时文件在某层数据流图中的某些加工之间出现,则在该层数据流图中就必须画出这个文件。一旦文件被单独画出,那么也需画出这个文件同其它成分之间的联系。4分解的程度对于规模较大的系统的分层数据流图,如果一下子把加工直接分解成基本加工单元,一张图上画出过多的加工将使人难以理解,也增加了分解的复杂度。然而,如果每次分解

14、产生的子加工太少,会使分解层次过多而增加作图的工作量,阅读也不方便。经验表明,一般说来一个加工每次分解量最多不要超过七个为宜。同时,分解时应遵循以下原则:l 分解应自然,概念上要合理、清晰。l 上层可分解的快些(即分解成的子加工个数多些),这是因为上层是综合性描述,对可读性的影响小。而下层应分解得慢些。l 在不影响可读性的前提下,应适当地多分解成几部分,以减少分解层数。l 一般说来,当加工可用一页纸明确地表述时,或加工只有单一输入/输出数据流时(出错处理不包括在内),就应停止对该加工的分解。另外,对数据流图中不再作分解的加工(即功能单元),必须作出详细的加工说明,并且每个加工说明的编号必须与功

15、能单元的编号一致。8.软件复杂性主要表现在程序的复杂性。程序的复杂性主要指模块内程序的复杂性。软件复杂性的度量方法有: 1、代码行度量法:以源代码行数作为程序复杂性的度量。 2、McCabe度量法:一种基于程序控制流的复杂性度量方法。9.C + + 中多态性的实现方式 多态性是面向对象程序设计的一大支柱,它指的是在基类中定义的属性或服务被派生类继承之后,可以表现出不同的行为. 也就是指一段程序能够处理不同类型对象的能力. 在面向对象程序设计语言C + + 中,这种多态性的实现方式有4 种,分别是强制多态、重载多态、类型参数化多态和包含多态. 其中,类型参数化多态和包含多态称为一般多态性,用来系

16、统地描述语义上相关的一组类型;强制多态和重载多态称为特殊多态性,用来描述语义上无关联的类型间的关系.下面详细介绍这4 种多态性的具体应用.1 包含多态在C + + 中公有继承关系是一种包含关系. 派生类直接公有继承基类定义中的属性或服务,如果1个程序段既能处理基类的对象也能处理基类的派生类的对象,该程序段称为多态程序段. C + + 采用虚函数实现包含多态. 一个函数一旦声明为虚函数,在编译阶段,编译器并不按照它的静态类型为它生成调用此函数的版本,而只为它生成虚函数表(表中存放与此函数同名、同参数、同返回值的虚函数的地址) . 在程序运行时,再根据实际对象的类型,查虚函数表,找出相应版本的函数

17、后,才能使用它. 因此,这种不是在编译阶段而是在运行阶段动态确定应使用哪一个虚函数的方式叫动态束定.要把一个函数声明为虚函数,只要在原函数的声明之前加上virtul 关键字即可. 利用虚函数进行动态束定,必须用指向基类的指针或引用来访问它,这是因为C + + 是类型系统,在编译阶段,C + + 的变量名或函数名就与相应的存储单元联系起来,使用名字也就是使用对应的存储单元. 这有利于检查类型系统,并可产生高效代码. 但这种类型的限制缺乏灵活性,不能在运行时改变名字的含义,然而多态要求在不同的上下文中,同一名字有多种含义,C + + 引入虚函数的目的是告诉编译器在运行时才能确定要调用哪一个虚函数.

18、 为了把变量名与相应的存储单元分开,它用指针来调用虚函数. 这样,只要改变指针所存地址的值,也就间接地改变了调用对象. 例:# include class Point / / 定义基类Point private :float x ,y;public :Point( ) ;Point( float i ,float j) x = i;y = j ; virtul float area( ) / / 声明为虚函数return 0. 0 ; ;const float Pi = 3. 141593;class Circle : public Point / / 定义派生类Circle private

19、:float radius;public :Circle( float r) radius = r ; virtul float area( )return Pi 3 radius 3 radius; ;void main( ) Point 3 pp; / / 指向基类的指针ppCircle c( 5. 4321) ;pp = &c ;cout area( ) endl ; / / 调用虚函数,执行派生类中定义的函数area( )从上面例子可看出,利用虚函数可在基类和派生类中使用相同的函数名定义函数的不同实现,从而实现“一个接口,多种方式”. 一般说来,外部函数不能声明为虚函数,成员函数(除构

20、造函数) 都可以声明为虚函数. 然而,在处理虚函数时,要动态确定应该选用哪一版本函数,故它比标准函数需要更多的存储空间. 因此,虚函数仅用于处理派生类中一系列同名、同参数和同返回值的函数.2 类型参数化多态类型参数化多态是指当1 个函数(或类) 对若干个类型参数操作时,这些类型具有某些公共的语义特性,可以用该函数(或类) 来描述这些公共语义特性. C + + 中的模板是实现类型参数化多态的工具,分为类模板和函数模板.2. 1 类模板一个类模板可以表示一组类. 下面是一个通用栈类,它可以存放整数、字符或类对象.# include template class stack / / stack 类模

21、板 T 3 v;T 3 p;int sz ;public :stack( int s) v = p = new T sz = s ; stack( ) delete v;void push( T a) 3 p + + = a ;T pop( ) return 3 22p;int size( ) const return p2v; void main( ) stack sch( 20) ; / / stack 类模板用char 实例化后创建对象stack si( 20) ; / / stack 类模板用int 实例化后创建对象sch. push( a) ;si. push( 10) ;其中,st

22、ack 类模板中带有一个类型参数T ,表示栈中存放对象的类型,它不是实际类型,因此不能用类模板直接生成实例对象. 通过对类模板的实例化(即给类模板的参数指定具体类型的过程) ,类模板实例化后的结果是类而不是实例对象,因此可用类模板实例化后的结果类产生实例对象. 在main ( ) 函数中,从stack 类模板实例化了两个模板类: stack 和stack ,然后又由这两个模板类分别实例化各自对象:sch 和si.2. 2 函数模板与类模板相似,可以定义操纵一组类型的函数. 下面定义了一个求两对象间的最大值的函数模板.template T max ( T a , T b) return a b

23、? a :b ;该函数模板可以求int , char , float 指针或任何重载了 运算符的类对象间的最大值. 函数模板也要实例化,实例化后就生成了具体的函数代码(即特定于参数的类型) ,与类模板不同的是,它的实例化不需要用户显式进行,而是在函数调用时由编译器来处理. 例如:int a , b;char c , d;int m1 = max( a , b) ; / / 调用max( int a , int b) ;int m2 = max( c , d) ; / / 调用max( char c , char d) ;事实上,函数模板表示了一组名字相同的函数,这些函数之间以及这些函数与其它同

24、名函数之间是重载函数的关系. 在使用函数模板时,应保证函数的参数与模板函数的参数正好相配,因为编译器不会给模板函数的参数提供任何形式的转换.总之,模板描述了一组类或一组函数,避免了为各种不同的数据类型进行重复的编码工作.3 重载多态重载是多态性中最简单的形式. 它是指用同一名字表示不同的函数或运算符,从而使C + + 具有更大的灵活性和扩展性. 它分为运算符重载和重载函数两种.3. 1 重载函数重载函数是指同一作用域内名字相同、但参数不同的函数. 例如:# include int func( int x , int y) return x y ? y :x;float func( float

25、x , float y) return x y ? y :x;double func( double x , double y) return x y ? y :x;void main( ) int n1 = 8 , n2 = 10 ;cout “the max is :” func( n1 ,n2) endl ;float m1 = 4. 3 , float m2 = 2. 6 ;cout “the max is :” func( m1 ,m2) endl ;double f1 = 2. 0 ,f2 = 4. 9 ;cout “the max is :” func( f1 ,f2) endl

26、 ;运行结果为:the max is :10the max is :4. 3the max is :4. 9上述3 个函数,函数名相同,函数参数不同,因为编译器是根据参数来识别重载函数,所以必须保证重载函数的参数有所不同,即两重载函数必须具有以下两种差别之一才能分辨.(1) 函数的参数个数不同;(2) 一个或多个参数的类型不同.3. 2 运算符重载C + + 的基本类型(int , char , float 等以及它们的派生类型) 既能描述数据的存储格式,又能描述施加在数据上的操作,这种操作用运算符来指定. 在基本类型中运算符都按系统预定义好的方式来工作.为了使用户定义的类型与基本类型一样,C

27、 + + 也允许用户定义类型使用运算符来表示操作. 实质上,运算符可以看成是一种函数,即运算符函数,只是对于基本类型,函数都是编译器给定的,不能加以改动. 但对于类对象,用户却可以重新定义运算符函数,以便设置运算符在类对象中新的含义. 因此,定义运算符在某类对象操作的做法即所谓的运算符重载.运算符函数可以是类的成员函数,也可以是非成员函数,如果是非成员函数,一般将它声明为该类的友员. 例:class complex / / 复数类 / / . . .public :Complex operator + ( const Complex & com)Complex temp( rpart + co

28、m. rpart , ipart + com. ipart) ;return temp;/ / . . . ;运算符函数operator + 被定义为公有的,程序中的其它函数可以调用它,在定义了该函数之后,就可以像基本类型一样对复数对象用+ 表达式实施运算. 当程序中有语句Complex a( 10 ,7) ,b( 3 ,5) ,c ;c = a + b;时,C + + 编译器把表达式a + b 解释为函数调用a. operator + (b) ,在调用时,operator + 成员函数首先创建一个临时Complex 类对象temp ,然后把出现在加法表达式中的两个复数之和暂存其内,最后将这个

29、临时对象返回.4 强制多态强制也称类型转换,是指将一种类型的值转换成另一种类型的值而进行的语义操作,从而防止类型错误. 类型转换可以是隐式的,在编译阶段完成;也可以是显式的,在运行阶段完成.4. 1 基本数据类型之间的类型转换C + + 定义了基本数据类型之间的转换原则,即char short int unsigned long unsigned long float double long double低 高当两个操作对象类型不一致时,在算术操作之前级别低的自动转换成级别高的类型.上述规则不适用于赋值操作. 当赋值运算符右端的类型与左端的类型不同时,右端的值要转换成左端类型,然后将转换后的值

30、赋值给左端.类型转换可以使用下面3 种强制类型转换表达式,从而可以改变编译器所使用的规则,可以按程序员自己的意愿进行所需的类型转换.(1) static-cast ( E) ;(2) T ( E) ;(3) ( T) E ;其中,E 表示一个运算表达式,T 表示一个类型表达式,第三种表达式是C 语言中所使用的风格,在C + + 中,建议不要使用,应选择使用第一种形式. 例如:设对象f 的类型为double ,且其值为5. 26 ,则表达式static-cast (f) 的值为5 ,类型为int .4. 2 用户定义类型的转换着重介绍类类型与其它数据类型之间的转换.(1) 在C + + 中,把其它数据类型转换成类对象是通过转换构造函数来完成的. 要求的前提是此类的转换构造函数是只带1 个非缺省参数的构造函数.(2) 把类对象转换成其它数据类型是通过转换运算符函数来完成的. 它是一种类似显示类型转换的机制,它的设计需要注意两点:第一,转换运算符函数必须

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1