C++初步认识课件_第1页
C++初步认识课件_第2页
C++初步认识课件_第3页
C++初步认识课件_第4页
C++初步认识课件_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1.0本科程在专业学习中的地位1.1程序设计语言1.2C+前史1.3C+1.4C+编程流程1.5最小样板程序1.6程序与算法1.7过程化程序设计1.8对象化程序设计1.9小结,1.0本科程在专业学习中的地位,本科程学习的高端目标:,1.程序设计竞赛;2.初级程序员(证书):第四五学期相当于实习工程师(本科毕业)3.中级程序员(证书):第五六学期相当于助理工程师(本科毕业工作1年以上)4.高级程序员(证书):第六七学期相当于工程师(本科毕业工作5年以上)5.软件设计师(证书):第七八学期相当于高级工程师(本科毕业工作9年以上),C+到底难不难学?它从开始诞生以来,发展势头一直旺到现在,背后一定也有它的道理。C+综合了各家之长,功能多,操作起来简单。有人说它难学,这是正常的,否则,一学就会的东西,还用得着努力教和学吗?至于学习的结果,就因人而异,甚至大相径庭了。难怪有的人趣味盎然,有的人大叹苦经。中国古代有名画家王冕就是因为信奉了这样一句话而成才的:没有学不会的事情!,1.1程序设计语言(ProgrammingLanguage),人们用程序设计语言描述需要解决的问题,用“语言翻译/编译器”加工以使计算机理解其描述,尔后就能使计算机代替人们工作了。虽然编程语言最终目的是促使计算机为人们工作,但人们用编程语言对问题的描述方式与内容,随着使用群体的扩大,越来越多地成为人们之间相互交流过程描述与信息表达的工具。计算机上的机器指令也称为机器代码,它是机器语言的程序。机器语言是低级语言,汇编语言是机器语言的直接符号表示,所以基本上也是低级语言。而C+则是高级语言。,moveax,DWORDPTRa$ebp8b45fcleaeax,DWORDPTReax+eax*28d0440movecx,DWORDPTRb$ebp8b4df8addecx,ecx03c9subeax,ecx2bc1inceax40movDWORDPTRa$ebp,eax8945fc,汇编语言和某个特定的机器语言:,程序语言越低级,则必须对过程描写越具体,指令也就越接近机器的硬件逻辑。程序语言越高级,就越接近对问题的描述与表达,因而更直观,容易被人们所理解。程序语言从低级到高级的发展,也就是从具体描述(编程)到抽象描述(编程),高级语言的抽象描述最后都需用“语言编译器”自动转化成机器的具体实现。语言编译器的发展,则是从简单到复杂的过程。语言越是高级,描述越是抽象,则用于自动化转换的语言编译器越复杂,以便人们对问题只需有个相对简单的描述(编程),就能够被机器所理解。,1.2C+前史(Pre-C+history),1953年12月,IBM公司的JohnBackus写了一份备忘录,建议为IBM704设计一种全新的编程语言。Backus多年工作在计算机上,深切体会到编程困难,他的目标是设计一种用于科学计算的“公式翻译语言”。他带领的一个团队,终于在1954年完成了FORTRAN语言的设计和实现。在那以后,不同版本的FORTRAN语言纷纷面世。1966年,美国统一了它的标准,称为FORTRAN66语言,此后,又被更新为FORTRAN77和FORTRAN90。FORTRAN语言的后继版本要兼容以前大量的FORTRAN老程序,这一负担阻碍了它,无法革新成现代编程语言特征。但不管怎样,FORTRAN语言一直活跃了40多年,Backus为此摘取了1977年度的“图灵奖”。,代数语言ALGOL,1958年,一个国际商业和学术计算机科学家组成的委员会在瑞士开会,探讨改进FORTRAN问题,并尝试设计一种标准化的计算机语言。1960年,该委员会在1958年讨论的基础上,定义了一种新的语言国际代数语言ALGOL60,首次引入了局部变量和递归概念,在数学表达和算法描述上比FORTRAN更出色,而且它不是解释执行,而是编译后运行,比FORTRAN程序效率更高。但由于ALGOL语言的设计要求是独立于机器的,所以就面临许多语言实现方面的技术问题,致使ALGOL语言无法流行。但它却演变为其他编程语言设计的概念基础。,科学计算借助于FORTRAN获得快速进展的时候,还没有一种适用于商业计算的语言。美国国防部注意到了这种情况,1959年5月,五角大楼委托GraceMurrayHopper博士领导一个委员会,开始设计面向商业的通用语言COBOL。COBOL最重要的特征是语法与英文很接近,可以让不懂计算机的人也能看懂程序。1968年,COBOL语言进行了标准化。后又在1974年和1984年进行了标准化更新。COBOL语言曾经风靡一时。,商用语言COBOL,BASIC语言,60年代中期,美国Dartmouth学院的JohnG.Kemeney和ThomasE.Kurtz认为,像FORTRAN这样的编程语言,都是为专业人员设计的,而他们希望能为无经验的人提供一种简单的编程语言,特别希望那些非计算机专业的学生也能通过这种语言学会使用计算机。于是,他们在简化FORTRAN的基础上,研究出了BASIC语言。由于BASIC语言易学易用,很快就成为最流行的计算机语言之一,几乎所有小型和个人计算机都使用它。BASIC语言发展到后来,出现了许多改版,典型的有1983年推出的TrueBASIC,1985年推出的QBASIC,以及1991年推出的VisualBASIC(简称VB)。VB一直风靡至今长盛不衰。,Lisp语言,同在60年代中期,美国MIT的JohnMcCarthy等人设计和实现了用于人工智能研究的Lisp语言。Lisp语言是基于表处理的函数语言,由于该语言更面向问题,因此较容易编程,描述能力更强,更易于进行程序正确性验证和软件维护。但由于实现技术复杂,处理文件等能力不强,运行效率低,该工具一直停留在实验室阶段。,计算机教学语言LOGO和结构化的编程语言Pascal,1967年,美国麻省理工大学人工智能实验室S.Papert为儿童设计了一种LOGO编程语言。他用LOGO语言启发孩子们的学习与思考,一些孩子用LOGO语言设计出了真正的程序,于是LOGO成为一种热门的计算机教学语言。1971年,瑞士联邦技术学院N.Wirth教授发明了Pascal语言。Pascal语言语法严谨,层次分明,程序易写,具有很强的可读性,是第一个结构化的编程语言。它一出世就受到广泛欢迎,为此,他获得1984年度的“图灵奖”。,Simula67语言,1967年,挪威奥斯陆的JohanDahl和KristenNygaard推出了Simula67语言。该语言第一次提出类的概念,能够把应用中的概念直接用编程语言描述,比其他语言编写的程序更具可读性,而且编译系统捕捉类型错误的能力十分强,保证了程序规模扩大之后,错误量不会非线性增长。该语言曾配置在好几个大型计算机上,但由于编译实现不完善,导致运行效率低下,只能执行一些小型程序,所以像ALGOL语言一样,没能流行,但成为未来面世的面向对象编程语言的概念基础。,C语言,1970年,AT,程序中“iostream”是C+为特定环境编制的标准输入输出流类的标准库头文件。“cout”是标准输出设备的名字,“”是操作命令,指示将后面的数据(字串Helloworld.n),送到显示器设备上去。“std”是“名空间”。程序中有若干名字,程序规模大起来后,难免会有名字冲突,就好像学校中遇到同名学生:A班中有张三,B班中也有张三,当A、B班在一起上课时,就有名字冲突问题。解决的简单办法就是两个张三分别命名为:“A班的张三”,“B班的张三”。C+也是这样来解决问题的。为了防止程序员自己又命名一个“cout”而造成冲突,就特地对语言专门提供的标准设备名“cout”冠以前缀“std:”,表示“标准库中的cout”。,编程风格(ProgrammingStyle),C+的程序语法是以空格和换行(回车)来区分词法单位,以特定的字符来辨认语法的,如,分号“;”表示语句的结束。除此之外,其书写形式就比较随意。程序设计格式的随意性,给程序设计风格带来了可朔性。程序设计风格应以可读性为准则,合理的紧凑性、模块整体性、对齐、锯齿型嵌套、注释都是形成特定风格的因素。为了让程序表现出美感,又不致于语句前后内容含混不清、结构混乱,语句书写讲究疏密得当。高级程序员的程序风格,体现了极大的一贯性和艺术性。每个初学者必须要模仿编程风格,随着编程量的增加,对程序的感受多多,会不知不觉地形成自己独特的风格。,最小样本程序,/=/min_sample.cpp/带标准输出的最小样本程序/=#includeintmain()std:cout”helloWorld.n”;/显示字符串/=,1.6程序与算法(Program&Algorithm),计算机程序是用计算机语言所要求的规范描述出来的一系列动作,它表达了程序员要求计算机执行的操作。优秀的程序员尤其是C+程序员,追求编程方法的实效性。这意味着所谓“学会计算机语言,看得懂语法,了解了语言的描述方法”,还是不够的,它和熟练运用计算机语言,能用语言高效、正确地描述问题、解决问题是有天壤之别的。学习计算机语言在于让计算机准确地执行程序,和学习其他语言一样,都需要一个充分的实践过程。,算法(Algorithm)的定义,1)目的性算法是有求解目的的动作序列,算法必须有运算结果,而程序只是强调过程性;2)抽象性算法离不开数据结构,而数据结构在具体的计算机上实现要受到表示范围的限制,算法比具体的程序设计抽象层次要高一些,算法甚至不在乎用什么编程语言来描述;3)研究性算法许多时候用于理论研究,描述算法的目的是沟通人们的思想,而不是实现,所以,算法可以用伪编程语言来描述。,编程与结构(Programming&Structure),编程是为了解决计算问题,计算问题强调算法,程序设计也就是在一定抽象层次上的算法设计。这里的抽象层次应理解为数据的描述方式。当许多编程问题含有大量纵横交错的数据时,人们便逐渐意识到数据组织与数据结构的重要,意识到数据存在的形式必须脱离程序。1976年,计算机专家N.Wirth提出这样的经典公式:程序算法数据结构强调编程中数据结构的描述应相对算法而独立。程序不再是单纯的过程体(操作序列)了,不再是单纯的算法了,而是算法和数据结构的有机组织。,1.7过程化程序设计(ProceduralProgramming),过程化程序设计主要体现在算法上,编程就是解决算法如何设计问题。当算法很大时,就考虑将它按功能划分。程序组织围绕算法的切分而展开。这一类问题一般都是小规模的问题,一般的程序设计语言都可以胜任。过程程序设计按照问题来设计算法。它所使用的是语言中现成的基本数据类型。问题模型反映为过程结构模型,实际上就是功能模型。但由于过程模块与数据的复杂关系没有清晰地分离出来,所以它一般都是“具体问题具体解决”,无法重复使用其中的“零部件”,而且,问题庞大以后,其复杂性会无法收场。,结构化程序设计(StructuredProgramming),结构化程序设计方法主要体现在过程的功能划分与过程内部的编写规则上,因此它是一种规范的过程化程序设计思想。结构化程序描述任何实体的操作序列只需用“顺序,选择(分支),重复(循环)”三种基本控制结构。结构化程序设计中的各个过程体和各个组成部分以模块来表示。每个模块,其内聚性(agregation)越强,外联性(association)越少,则模块独立性越好。,内聚性,即模块内部所涉及的功能越单一越好。这样一旦修改起来,就职责明确,不会因为这个原因那个原因都来找这个模块算帐。外联性,即模块之间的联系越少越好,联系意味着依赖性,外联性少,模块的独立性就好,独立性意味着自说自话地修改本模块与外界无关。因此就容易编程和修改。减少外联性还涉及到对数据的分离与归类。将过程体中的数据分离出来,独立地用数据结构去描述其数据和处理,这都是模块划分的原则。,1.8对象化程序设计(ObjectifiedProgramming),伴随着人类对计算机的依赖性日益增强,程序规模不断扩大,模块数呈指数级递增,模块间的数据传递五花八门,同一程序中模块之间的关系错综复杂,结构化程序设计的规范已经不能保证程序的正确性,可维护性和重用性了。人们开始意识到不可能在语言中内置所有的待解决问题的数据结构,必须让语言具有自建数据结构的能力。数据结构对于算法,对于程序是如此的重要,但当时大多数语言都没有专门支持对数据结构的直接描述。,在C语言中有一种结构(struct)类型,可以在单纯空间上复合其他数据类型,描述数据的组织,但还是不能避免其数据操作的安全问题。在大规模程序设计中,问题尤其突出。软件发展似有一个不可逾越的极限,因此,在软件产业界曾一度有软件危机之说。其实浩瀚的编程大军并非每个人都必须要精通问题的每个细节,这就像使用电视机的人并非都要精通其内部的每个细节!我们可用电视机的外壳,把电视机的内部电路和外部使用一分为二。外部使用只需要了解电视机的基本操作方法,内部电路提供电视机的各项功能,两者都需要一个共同的规范电视机的按钮操作功能。,抽象数据类型就是想要描述这一共同的规范,它描述数据的组织和相关的操作。如果语言能够自由定义数据类型,那么,问题就能化成以抽象数据类型为媒介的使用与实现独立的两部分,因而该语言的解决问题的能力一定就强。衡量一个语言的优劣,能否自定义或者说扩充数据类型是其重要指标。C+有一个类(class)机制,这正是C语言欠缺的地方。数据类型的本质是数据组织(实现)和其操作(使用)的捆绑性。当对应到具体编程时,用抽象数据类型来界定,就能把编程大军分为两个阵营,一个是专业性极强的,专门实现抽象数据类型的编程,好比生产电视机者;另一个是专门使用抽象数据类型的编程,好比使用电视机者。,要能使抽象数据类型能够维护两大程序员阵营的编程利益,必须要在语言的设计中加入一些语言机制,这些语言机制采用了许多难以想象的技术,实现了数据封装,类型安全等,而且还必然要使代码更容易阅读和维护,否则没有人愿意用。抽象数据类型的使用,最终像使用基本数据类型那样简单,对应的实体就称之为对象。因此,编程的意义就是算法在对象之间穿梭,或曰针对对象的算法设计。所以其相应的编程就是对象化的编程了。无论是实现抽象数据类型的程序员群体,还是使用抽象数据类型的程序员群体,他们都以同样的参照在工作,都在做算法设计的工作,所以更加直截了当而又具体的编程模式变成了:程序算法抽象数据类型,面向对象的程序设计(Object-OrientedProgramming),基于对象的程序设计本质上还是过程化的。只是某些数据关系析取出来了,成为一个类,便可以更好地重用了。类的层次关系也带来了对象的层次关系,它反映了同种操作的异类行为。例如,各电视机的维修操作,不同的型号,有部分维修操作是共同的,如打开后盖,但内部有些部件的操作处理是不同的,电视机之间反映了层次关系。它所反映的是一棵电视机树。电视机有不同种类,修理方法也不同,那么,电视机在被修理时,必然反映出自己被特殊操作的个性。也即分层之后的对象集合中每个对象行为的个性,这种属性称为对象操作的多态性。,面向对象程序的运行,不再是一个进程硬要全面主宰一切似地完成计算任务的形式,而是面对环境中正在“生活”的对象,不时地请求其服务,以达到完成计算的目的。那些生活中

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论