C++优秀分享资料_第1页
C++优秀分享资料_第2页
C++优秀分享资料_第3页
C++优秀分享资料_第4页
C++优秀分享资料_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

1、第一章第一章 概说概说C+1.0 1.0 本科程在专业学习中的地位本科程在专业学习中的地位1.1 1.1 程序设计语言程序设计语言 1.2 C+1.2 C+前史前史 1.3 C+1.3 C+ 1.4 C+1.4 C+编程流程编程流程 1.5 1.5 最小样板程序最小样板程序1.6 1.6 程序与算法程序与算法 1.7 1.7 过程化程序设计过程化程序设计 1.8 1.8 对象化程序设计对象化程序设计 1.91.9 小结小结 第一章第一章 概说概说C+1.0 本科程在专业学习中的地位本科程在专业学习中的地位智能无线终端应用智能无线终端应用(5-7(5-7学期学期) ) 电磁场与电磁波;电磁场与电

2、磁波; 数字图象处理;数字图象处理; 信号检测与处理;信号检测与处理; 微波技术与天线;微波技术与天线; 射频电路设计原理与应用射频电路设计原理与应用。 专业基础课程专业基础课程第一层次第一层次(3-5(3-5学期学期) ): 电路原理、模拟电子技术、数字电路与数字逻辑;电路原理、模拟电子技术、数字电路与数字逻辑;第二层次第二层次(5-6(5-6学期学期) ): 信号与系统信号与系统、数字信号处理、电子测量原理;数字信号处理、电子测量原理;第三层次第三层次(5-7(5-7学期学期) ): MATLAB与系统仿真与系统仿真、电子线路、电子线路CAD、DSP原理及应用原理及应用智能信息处理支持课程

3、智能信息处理支持课程1. 1. 高端软件设计支持高端软件设计支持(2-4(2-4学期学期) ) 程序设计基础程序设计基础C C; C+C+程序设计;程序设计; 可视化编程与应用。可视化编程与应用。 2. 2. 芯片级设计支持芯片级设计支持(5-7(5-7学期学期) ) 微机原理与应用;微机原理与应用; 单片机原理与应用;单片机原理与应用; 嵌入式系统;嵌入式系统; 专业课程设计。专业课程设计。工业信号检测系统工业信号检测系统与智能电子产品研发与智能电子产品研发(5-7(5-7学期学期) ) 传感器原理与应用;传感器原理与应用; 检测技术基础;检测技术基础; 数据库开发与应用;数据库开发与应用;

4、 现代电气及现代电气及PLCPLC技术;技术; 楼宇智能化技术。楼宇智能化技术。 第一章第一章 概说概说C+本科程学习的高端目标:本科程学习的高端目标:1. 程序设计竞赛;程序设计竞赛;2. 初级程序员初级程序员(证书):第四五学期(证书):第四五学期 相当于实习工程师(本科毕业)相当于实习工程师(本科毕业)3. 中级程序员中级程序员(证书):第五六学期(证书):第五六学期 相当于助理工程师(本科毕业工作相当于助理工程师(本科毕业工作 1 年以上)年以上)4. 高级程序员高级程序员(证书):第六七学期(证书):第六七学期 相当于工程师(本科毕业工作相当于工程师(本科毕业工作 5 年以上)年以上

5、)5. 软件设计师软件设计师(证书):第七八学期(证书):第七八学期 相当于高级工程师(本科毕业工作相当于高级工程师(本科毕业工作 9 年以上)年以上)第一章第一章 概说概说C+ C+到底难不难学?它从开始诞生以来,到底难不难学?它从开始诞生以来,发展势发展势头 一 直 旺 到 现 在头 一 直 旺 到 现 在 , 背 后 一 定 也 有 它 的 道 理 。, 背 后 一 定 也 有 它 的 道 理 。 C+综合了各家之长,功能多综合了各家之长,功能多,操作起来简单。有人,操作起来简单。有人说它难学,这是正常的说它难学,这是正常的,否则,否则,一学就会的东西,还一学就会的东西,还用得着努力教和

6、学吗?用得着努力教和学吗?至于学习的结果,就因人而异,至于学习的结果,就因人而异,甚至大相径庭了。难怪有的人趣味盎然,有的人大叹甚至大相径庭了。难怪有的人趣味盎然,有的人大叹苦经。苦经。 中国古代有名画家王冕就是因为信奉了这样一句中国古代有名画家王冕就是因为信奉了这样一句话而成才的:话而成才的:没有学不会的事情!没有学不会的事情! 第一章第一章 概说概说C+1.1 程序设计语言程序设计语言(Programming Language)(Programming Language) 人们用程序设计语言描述需要解决的问题,用人们用程序设计语言描述需要解决的问题,用“语语言翻译言翻译/编译器编译器”加工

7、以使计算机理解其描述,尔后就加工以使计算机理解其描述,尔后就能使计算机代替人们工作了。虽然编程语言最终目的能使计算机代替人们工作了。虽然编程语言最终目的是促使计算机为人们工作,但人们用编程语言对问题是促使计算机为人们工作,但人们用编程语言对问题的描述方式与内容,随着使用群体的扩大,越来越多的描述方式与内容,随着使用群体的扩大,越来越多地成为人们之间相互地成为人们之间相互交流过程描述与信息表达的工具交流过程描述与信息表达的工具。 计算机上的机器指令也称为机器代码,它是机器语计算机上的机器指令也称为机器代码,它是机器语言的程序。机器语言是低级语言,汇编语言是机器语言的程序。机器语言是低级语言,汇编

8、语言是机器语言的直接符号表示,所以基本上也是低级语言。而言的直接符号表示,所以基本上也是低级语言。而C+则是高级语言则是高级语言 。第一章第一章 概说概说C+ mov eax, DWORD PTR a $ebp 8b 45 fc lea eax, DWORD PTR eax+eax*2 8d 04 40 mov ecx, DWORD PTR b $ebp 8b 4d f8 add ecx, ecx 03 c9 sub eax, ecx 2b c1 inc eax 40 mov DWORD PTR a $ebp, eax 89 45 fc汇编语言和某个特定的机器语言:汇编语言和某个特定的机器语言

9、:第一章第一章 概说概说C+ 程序语言越低级,则必须对过程描写越具体,指令程序语言越低级,则必须对过程描写越具体,指令也就越接近机器的硬件逻辑。程序语言越高级,就越接也就越接近机器的硬件逻辑。程序语言越高级,就越接近对问题的描述与表达,因而更直观,容易被人们所理近对问题的描述与表达,因而更直观,容易被人们所理解。解。 程序语言从低级到高级的发展,也就是从具体描述程序语言从低级到高级的发展,也就是从具体描述(编程)到抽象描述(编程),高级语言的抽象描述最(编程)到抽象描述(编程),高级语言的抽象描述最后都需用后都需用“语言编译器语言编译器”自动转化成机器的具体实现。自动转化成机器的具体实现。 语

10、言编译器语言编译器的发展,则是从简单到复杂的过程。语的发展,则是从简单到复杂的过程。语言越是高级,描述越是抽象,则用于自动化转换的言越是高级,描述越是抽象,则用于自动化转换的语言语言编译器编译器越复杂,以便人们对问题只需有个相对简单的描越复杂,以便人们对问题只需有个相对简单的描述(编程),就能够被机器所理解。述(编程),就能够被机器所理解。 第一章第一章 概说概说C+1.2 C+前史(Pre-C+ history) 1953年年12月,月,IBM公司的公司的John Backus写了一份备忘录,写了一份备忘录,建议为建议为IBM704设计一种全新的编程语言。设计一种全新的编程语言。Backus

11、多年工作在多年工作在计算机上,深切体会到编程困难,他的目标是设计一种用于科计算机上,深切体会到编程困难,他的目标是设计一种用于科学计算的学计算的“公式翻译语言公式翻译语言”。 他带领的一个团队,终于在他带领的一个团队,终于在1954年完成了年完成了FORTRAN语言语言的设计和实现的设计和实现。在那以后,不同版本的。在那以后,不同版本的FORTRAN语言纷纷面语言纷纷面世。世。1966年,美国统一了它的标准年,美国统一了它的标准,称为,称为FORTRAN66语言,语言,此后,又被更新为此后,又被更新为FORTRAN77和和FORTRAN90。FORTRAN语言的后继版本要兼容以前大量的语言的后

12、继版本要兼容以前大量的FORTRAN老程序,这一负老程序,这一负担阻碍了它,无法革新成现代编程语言特征。但不管怎样,担阻碍了它,无法革新成现代编程语言特征。但不管怎样,FORTRAN语言一直活跃了语言一直活跃了40多年多年,Backus为此摘取了为此摘取了1977年年度的度的“图灵奖图灵奖”。 第一章第一章 概说概说C+代数语言代数语言ALGOL 1958年,一个国际商业和学术计算机科学家组成年,一个国际商业和学术计算机科学家组成的委员会在瑞士开会,探讨改进的委员会在瑞士开会,探讨改进FORTRAN问题,并问题,并尝试设计一种标准化的计算机语言。尝试设计一种标准化的计算机语言。1960年,该委

13、员年,该委员会在会在1958年讨论的基础上,定义了一种新的语言年讨论的基础上,定义了一种新的语言国际代数语言国际代数语言ALGOL60,首次引入了局部变量和递首次引入了局部变量和递归概念归概念,在数学表达和算法描述上比,在数学表达和算法描述上比FORTRAN更出更出色,而且它不是解释执行,而是色,而且它不是解释执行,而是编译后运行编译后运行,比,比FORTRAN程序效率更高。但由于程序效率更高。但由于ALGOL语言的设语言的设计要求是计要求是独立于机器独立于机器的,所以就面临许多语言实现方的,所以就面临许多语言实现方面的技术问题,致使面的技术问题,致使ALGOL语言无法流行。但它却语言无法流行

14、。但它却演变为其他编程语言设计的概念基础。演变为其他编程语言设计的概念基础。第一章第一章 概说概说C+ 科学计算借助于科学计算借助于FORTRAN获得快速进展的时候,获得快速进展的时候,还没有一种适用于商业计算的语言。美国国防部注意还没有一种适用于商业计算的语言。美国国防部注意到了这种情况,到了这种情况,1959年年5月月,五角大楼委托,五角大楼委托Grace Murray Hopper博士领导一个委员会,开始设计博士领导一个委员会,开始设计面向面向商业的通用语言商业的通用语言COBOL。COBOL最重要的特征是语最重要的特征是语法与英文很接近,可以让不懂计算机的人也能看懂程法与英文很接近,可

15、以让不懂计算机的人也能看懂程序。序。1968年,年,COBOL语言进行了标准化语言进行了标准化。后又在。后又在1974年和年和1984年进行了标准化更新。年进行了标准化更新。COBOL语言曾经风靡语言曾经风靡一时。一时。 商用语言商用语言COBOL第一章第一章 概说概说C+BASIC语言语言 60年代中期,美国年代中期,美国Dartmouth学院的学院的John G.Kemeney和和Thomas E.Kurtz认为,像认为,像FORTRAN这样的编程语言,都是为这样的编程语言,都是为专业人员设计的,而他们希望能为无经验的人提供一种简单的专业人员设计的,而他们希望能为无经验的人提供一种简单的编

16、程语言,特别希望那些非计算机专业的学生也能通过这种语编程语言,特别希望那些非计算机专业的学生也能通过这种语言学会使用计算机。于是,他们在简化言学会使用计算机。于是,他们在简化FORTRAN的基础上,的基础上,研究出了研究出了BASIC语言。由于语言。由于BASIC语言易学易用语言易学易用,很快就成为,很快就成为最流行的计算机语言之一,几乎所有小型和个人计算机都使用最流行的计算机语言之一,几乎所有小型和个人计算机都使用它。它。BASIC语言发展到后来,出现了许多改版,典型的有语言发展到后来,出现了许多改版,典型的有1983年推出的年推出的TrueBASIC,1985年推出的年推出的QBASIC,

17、以及,以及1991年推年推出的出的Visual BASIC(简称(简称VB)。)。VB一直风靡至今长盛不衰。一直风靡至今长盛不衰。 第一章第一章 概说概说C+Lisp语言语言 同在同在60年代中期,美国年代中期,美国MIT的的John McCarthy等等人设计和实现了人设计和实现了用于人工智能研究用于人工智能研究的的Lisp语言。语言。Lisp语言是语言是基于表处理的函数语言基于表处理的函数语言,由于该语言更面向问,由于该语言更面向问题,因此较题,因此较容易编程,描述能力更强容易编程,描述能力更强,更易于进行程,更易于进行程序正确性验证和软件维护。但由于实现序正确性验证和软件维护。但由于实现

18、技术复杂,处技术复杂,处理文件等能力不强,运行效率低理文件等能力不强,运行效率低,该工具一直停留在,该工具一直停留在实验室阶段。实验室阶段。 第一章第一章 概说概说C+计算机教学语言计算机教学语言LOGO和结构化的编程语言和结构化的编程语言Pascal 1967年,美国麻省理工大学人工智能实验室年,美国麻省理工大学人工智能实验室S.Papert为儿童为儿童设计了一种设计了一种LOGO编程语言。他用编程语言。他用LOGO语言启发孩子们的学语言启发孩子们的学习与思考,一些孩子用习与思考,一些孩子用LOGO语言设计出了真正的程序,于是语言设计出了真正的程序,于是LOGO成为一种热门的计算机教学语言。

19、成为一种热门的计算机教学语言。 1971年,瑞士联邦技术学院年,瑞士联邦技术学院N.Wirth教授发明了教授发明了Pascal语语言。言。Pascal语言语法严谨,层次分明,程序易写,具有很强的语言语法严谨,层次分明,程序易写,具有很强的可读性,是第一个结构化的编程语言可读性,是第一个结构化的编程语言。它一出世就受到广泛欢。它一出世就受到广泛欢迎,为此,他获得迎,为此,他获得1984年度的年度的“图灵奖图灵奖”。 第一章第一章 概说概说C+Simula67语言语言 1967年,挪威奥斯陆的年,挪威奥斯陆的Johan Dahl和和Kristen Nygaard推出了推出了Simula67语言。该

20、语言语言。该语言第一次提出类第一次提出类的概念的概念,能够把应用中的概念直接用编程语言描述,能够把应用中的概念直接用编程语言描述,比其他语言编写的程序更具可读性,而且编译系统捕比其他语言编写的程序更具可读性,而且编译系统捕捉类型错误的能力十分强,保证了程序规模扩大之后,捉类型错误的能力十分强,保证了程序规模扩大之后,错误量不会非线性增长。该语言曾配置在好几个大型错误量不会非线性增长。该语言曾配置在好几个大型计算机上,但由于计算机上,但由于编译实现不完善编译实现不完善,导致运行效率低,导致运行效率低下,只能执行一些小型程序,所以像下,只能执行一些小型程序,所以像ALGOL语言一语言一样,没能流行

21、,但成为未来面世的样,没能流行,但成为未来面世的面向对象编程语言面向对象编程语言的概念基础的概念基础。 第一章第一章 概说概说C+C语言语言 1970年,年,AT&T的的Bell实验室实验室D.Ritchie和和K.Thompson共同发明了共同发明了C语言。研制语言。研制C语言的初衷是语言的初衷是用它编写用它编写UNIX系统程序,因此,它实际上是系统程序,因此,它实际上是UNIX的的“副产品副产品”。它充分。它充分结合了结合了和和的优的优点点,又,又,所以大受程序设计师,所以大受程序设计师的青睐,成为计算机产业界的宠儿。为此,他们两位的青睐,成为计算机产业界的宠儿。为此,他们两位获得

22、了获得了1983年度的年度的“图灵奖图灵奖”。 第一章第一章 概说概说C+C+语言语言 70年代中期,年代中期,Bjarne Stroustrup在剑桥大学计算机中心在剑桥大学计算机中心工作。他使用过工作。他使用过Simula和和ALGOL,实现过低级语言,实现过低级语言BCPL,接,接触过触过C。他。他对对Simula的类体系的类体系感受颇深,感受颇深,对对ALGOL的结构的结构也也颇有好感,他深知颇有好感,他深知运行效率运行效率的意义,所以,十分欣赏的意义,所以,十分欣赏C语言。语言。以以C为背景,以为背景,以Simula思想为基础,正好符合既要编程简单、思想为基础,正好符合既要编程简单、

23、正确可靠,又要运行高效、可移植的设想正确可靠,又要运行高效、可移植的设想。1979年,年,Bjarne Stroustrup到了到了Bell实验室,开始从事实验室,开始从事将将C改良为带类的改良为带类的C (C with classes)的工作。的工作。1983年将该语言年将该语言正式命名为正式命名为C+。90年代,年代,程序员开始慢慢从程序员开始慢慢从C中淡出,转入中淡出,转入C+。此后,。此后,C+稳步发展,稳步发展,1998年年ISO/ANSI C+标准正式制定,如今已是标准正式制定,如今已是如日中天如日中天。鉴。鉴于于C+对现代计算机产业的贡献对现代计算机产业的贡献,1995年年BYT

24、E杂志将杂志将Bjarne Stroustrup列入列入“计算机工业计算机工业20个最具影响力的人个最具影响力的人”。 第一章第一章 概说概说C+1.3 C+1.3 C+ C+是从是从C语言中继承而来的。语言中继承而来的。C+的发展壮大,主要是的发展壮大,主要是因为程序设计方法的发展。程序设计方法的发展,主要是计算因为程序设计方法的发展。程序设计方法的发展,主要是计算机应用范围的扩大和编程规模的扩大。机应用范围的扩大和编程规模的扩大。 C语言之所以风靡一时,在于当时需要计算机解决的问题语言之所以风靡一时,在于当时需要计算机解决的问题多半是小规模问题,一般通过单台计算机独立蛮算便可解决。多半是小

25、规模问题,一般通过单台计算机独立蛮算便可解决。随着计算机的发展,人们开始着手解决随着计算机的发展,人们开始着手解决大数据量大数据量的处理问题,的处理问题,需要处理大量需要处理大量复杂结构的数据复杂结构的数据。C程序员虽然经过程序员虽然经过艰苦的努力艰苦的努力,设计出许多设计出许多精巧的程序精巧的程序,但是在,但是在理解上却越来越困难,运行问理解上却越来越困难,运行问题也越来越多题也越来越多。程序需要。程序需要“保修(可维护性要求)保修(可维护性要求)”,需要,需要“扩充(可扩展性要求)扩充(可扩展性要求)”,需要,需要“加固(安全性要求)加固(安全性要求)”。而这些精巧的程序由于内在结构的弱点

26、而这些精巧的程序由于内在结构的弱点数据结构与算法盘数据结构与算法盘根错节,无法被可逆地拆解,很难分析根错节,无法被可逆地拆解,很难分析“险情险情”和重新使用。和重新使用。第一章第一章 概说概说C+ 设计计算机语言的专家要改革这一现状,提出程设计计算机语言的专家要改革这一现状,提出程序设计语言应该序设计语言应该具有数据类型的扩充能力具有数据类型的扩充能力。于是基于。于是基于数据类型和面向数据类型的编程语言不断浮出水面。数据类型和面向数据类型的编程语言不断浮出水面。这些方法,是以程序员自己定义或设计数据类型的方这些方法,是以程序员自己定义或设计数据类型的方式将复杂结构的数据进行系统的组织,统一的管

27、理,式将复杂结构的数据进行系统的组织,统一的管理,以使程序组织合理,算法设计简单和易懂,以使程序组织合理,算法设计简单和易懂,C+便是便是其中之一,从商业化角度看,其中之一,从商业化角度看,C+更是其中的跤跤者。更是其中的跤跤者。在在C的简捷、高效的简捷、高效的基础上,的基础上,C+添加了自定义数据类添加了自定义数据类型的整套设施型的整套设施,以适应大规模编程的需要。因此,进,以适应大规模编程的需要。因此,进入市场后,面向对象的编程方法也开始工业化了。入市场后,面向对象的编程方法也开始工业化了。 第一章第一章 概说概说C+C继承者继承者 C+对对C的继承是青出于蓝而胜于蓝,因为是对的继承是青出

28、于蓝而胜于蓝,因为是对C的继承,也就承诺了对的继承,也就承诺了对C的包容。的包容。C+对对C的包容,也的包容,也包括对程序设计方法的包括对程序设计方法的包容包容,这就决定了,这就决定了C+擅长擅长面面向对象程序设计向对象程序设计的同时,还可以进行的同时,还可以进行基于过程的程序基于过程的程序设计设计,因而,因而C+就适应的问题规模而论,大小由之。就适应的问题规模而论,大小由之。 C+是一种是一种混合型混合型程序设计语言,程序设计语言,“混合混合”体现体现在在可以采用不同的程序设计方法可以采用不同的程序设计方法,进行各种目的的编,进行各种目的的编程。程。 “混合混合”意味着绝不放弃计算机意味着绝

29、不放弃计算机高效运行高效运行的实用性特的实用性特征,而又致力于提高征,而又致力于提高大规模程序的编程大规模程序的编程质量,提高程质量,提高程序设计语言的问题描述能力。序设计语言的问题描述能力。 第一章第一章 概说概说C+标准标准C+ 有了有了C+标准,专家们在标准,专家们在开发开发C+编译器编译器时,可以时,可以避免大量避免大量的研究无序性和重复劳动的研究无序性和重复劳动,并且也为组织大规模的编译软件开,并且也为组织大规模的编译软件开发创造了前提条件;发创造了前提条件; 有了有了C+标准文档,语言设计者,程序员和用户三者就可以标准文档,语言设计者,程序员和用户三者就可以有一致的语言来互通,有一

30、致的语言来互通,在程序员社区可以畅通地交流在程序员社区可以畅通地交流,编写的,编写的程序变得更有效,更通用,更易懂。程序变得更有效,更通用,更易懂。 有了有了C+标准,程序员所开发的软件产品具有更高的系统标准,程序员所开发的软件产品具有更高的系统可可移植性移植性;C+标准还在标准还在防止技术封锁防止技术封锁,促进软件技术的交流促进软件技术的交流,提高软件竞争力等方面起到了很好的保护作用;提高软件竞争力等方面起到了很好的保护作用; 所以当所以当C+发展到一定规模的时候,无论是用户、程序员,发展到一定规模的时候,无论是用户、程序员,还是还是C+语言的设计者,都在竭力推动标准化的工作。语言的设计者,

31、都在竭力推动标准化的工作。第一章第一章 概说概说C+ 使用标准使用标准C+,也意味着程序员可以充分享用,也意味着程序员可以充分享用C+的资源的资源标准库。从而带来更多的快速和方便,提高标准库。从而带来更多的快速和方便,提高抽象编程的程度。所以,学习抽象编程的程度。所以,学习C+,理所当然地要学,理所当然地要学习标准习标准C+。 在我国,个人计算机配置的操作系统以在我国,个人计算机配置的操作系统以Windows居居多,比较容易获得的多,比较容易获得的标准标准C+就是就是Borland公司的公司的C+ Builder 6或者以上版本,或者或者以上版本,或者微软公司的微软公司的Visual C+、

32、.net或者以上版本。若在或者以上版本。若在linux系统上,比较容系统上,比较容易获得的标准易获得的标准C+工具就是工具就是Borland C+ Kylix 3.0以以上版本。另外,上版本。另外,通用的通用的C+编译器当数编译器当数C+3.0了,它了,它即有即有Windows版本,又有版本,又有Linux版本。版本。 第一章第一章 概说概说C+1.4 C+1.4 C+编程流程编程流程 程序设计语言发展到现在,无论程序设计语言发展到现在,无论编译型编译型还是还是解释型解释型,一般,一般都附带提供一个都附带提供一个集成开发环境集成开发环境(Integrated Development Envir

33、onment,IDE)。程序员可以在该环境中,编辑程序代)。程序员可以在该环境中,编辑程序代码,逐个编译源文件,装配和链接全部源文件及其资源文件,码,逐个编译源文件,装配和链接全部源文件及其资源文件,直至调试运行。甚至软件包装和做成软件产品都可以一体化。直至调试运行。甚至软件包装和做成软件产品都可以一体化。 解释型环境(如解释型环境(如VB)中,编辑代码后,没有编译和链接)中,编辑代码后,没有编译和链接的中间环节,可以直接运行,方便编程开发。但由于程序运行的中间环节,可以直接运行,方便编程开发。但由于程序运行不能离开解释器现场,所以不能离开解释器现场,所以效率上效率上便落了下风。对于规模化的便

34、落了下风。对于规模化的大程序,大程序,低性能低性能表现得更加明显,所以真正的计算任务和中大表现得更加明显,所以真正的计算任务和中大型软件开发一般都不用解释型环境开发。型软件开发一般都不用解释型环境开发。 第一章第一章 概说概说C+ C+语言的程序因为要体现高性能,所以都是编语言的程序因为要体现高性能,所以都是编译型的。译型的。C+的的IDE(集成开发环境)(集成开发环境)用解释型的逐用解释型的逐条语句执行方式以方便开发调试条语句执行方式以方便开发调试,用编译型的方式来用编译型的方式来生成最终能脱离开发环境的执行代码以提高运行效率生成最终能脱离开发环境的执行代码以提高运行效率。 IDE功能齐全,

35、调试功能很强,程序编好后,可功能齐全,调试功能很强,程序编好后,可以立刻在环境中调试以获得初步测试结果,然后,可以立刻在环境中调试以获得初步测试结果,然后,可以方便地做成以方便地做成beta版形式,拿到实际环境中进一步测版形式,拿到实际环境中进一步测试,最后做成软件发行版。试,最后做成软件发行版。 一般的编程操作流程为:编辑(一般的编程操作流程为:编辑(edit)编译编译(compile)链接(链接(link或或make或或build)调试调试(debug),该过程循环往复,直至完成。),该过程循环往复,直至完成。 第一章第一章 概说概说C+ C+源程序,或称源程序,或称源代码源代码(sour

36、ce code),简称代码,简称代码(code),以,以扩展名为扩展名为.cpp(在(在Windows环境中)的文本环境中)的文本形式存放。形式存放。 程序被编译程序被编译(compile)后,会生成后,会生成目标代码目标代码(object code),以以.obj为文件扩展名为文件扩展名存放。目标代码即机器代存放。目标代码即机器代码,是计算机能够识别的指令集合,但是,目标指令码,是计算机能够识别的指令集合,但是,目标指令(也称目标代码)还不能在具体的计算机上运行,因(也称目标代码)还不能在具体的计算机上运行,因为目标代码只是一个个独立的为目标代码只是一个个独立的程序段程序段,程序段之间还,程

37、序段之间还没有彼此呼应,程序段中用到的没有彼此呼应,程序段中用到的C+库代码和其他资库代码和其他资源还没有挂上。源还没有挂上。 第一章第一章 概说概说C+ 为了把成组的程序段转换为可执行程序,必须进为了把成组的程序段转换为可执行程序,必须进行链接行链接(link),链接的过程就是将目标代码整合(或称,链接的过程就是将目标代码整合(或称转换)成可执行文件,转换)成可执行文件,可执行文件通常以可执行文件通常以.exe为文件为文件扩展名扩展名。 C+程序在编译后,通过同时链接若干个目标文程序在编译后,通过同时链接若干个目标文件与若干个库文件而创建可执行程序。库文件是系统件与若干个库文件而创建可执行程

38、序。库文件是系统提供的程序链接资源,不同公司的提供的程序链接资源,不同公司的IDE产品有不同的产品有不同的后缀,例如,后缀,例如,Visual C+的库文件的后缀是的库文件的后缀是.lib。标准。标准C+提供提供C+标准库,用户库是由软件开发商或程序标准库,用户库是由软件开发商或程序员提供的。目标文件与库文件链接的结果,生成计算员提供的。目标文件与库文件链接的结果,生成计算机可执行程序。机可执行程序。 第一章第一章 概说概说C+1.5 最小样板程序最小样板程序(Minimum Sample Program) C+编译器能理解的有标准输出的最小程序为:编译器能理解的有标准输出的最小程序为:#in

39、cludeint main()std:cout”hello world.n”;为了让人能更好地理解,并让程序体现出其逻辑结构。为了让人能更好地理解,并让程序体现出其逻辑结构。上述程序最好写成如下所示的有结构形式:上述程序最好写成如下所示的有结构形式:#includeint main() std:cout”hello world.n”;第一章第一章 概说概说C+ 程序中程序中“iostream”iostream”是是C+C+为特定环境编制的标准输入输出为特定环境编制的标准输入输出流类的标准库头文件。流类的标准库头文件。 “cout”cout”是标准输出设备的名字,是标准输出设备的名字,“”是操作

40、命令,指示是操作命令,指示将后面的数据(字串将后面的数据(字串Hello world.nHello world.n),送到显示器设备上),送到显示器设备上去。去。 “std”std”是是“名空间名空间”。程序中有若干名字,程序规模大起。程序中有若干名字,程序规模大起来后,难免会有名字冲突,就好像学校中遇到同名学生:来后,难免会有名字冲突,就好像学校中遇到同名学生:A A班班中有张三,中有张三,B B班中也有张三,当班中也有张三,当A A、B B班在一起上课时,就有名班在一起上课时,就有名字冲突问题。解决的简单办法就是两个张三分别命名为:字冲突问题。解决的简单办法就是两个张三分别命名为:“A A

41、班的张三班的张三”,“B B班的张三班的张三”。C+C+也是这样来解决问题的。为也是这样来解决问题的。为了防止程序员自己又命名一个了防止程序员自己又命名一个“cout”cout”而造成冲突而造成冲突, ,就特地对就特地对语言专门提供的标准设备名语言专门提供的标准设备名“cout”cout”冠以前缀冠以前缀“std:”std:”,表,表示示“标准库中的标准库中的cout”cout”。 第一章第一章 概说概说C+编程风格编程风格(Programming Style) C+的程序语法是以空格和换行(回车)来区分词法单位,的程序语法是以空格和换行(回车)来区分词法单位,以特定的字符来辨认语法的,如,分

42、号以特定的字符来辨认语法的,如,分号“;”表示语句的结束。表示语句的结束。除此之外,其书写形式就比较随意。程序设计格式的随意性,除此之外,其书写形式就比较随意。程序设计格式的随意性,给程序设计风格带来了可朔性。给程序设计风格带来了可朔性。 程序设计风格应以程序设计风格应以可读性可读性为准则,合理的为准则,合理的紧凑性、模块整紧凑性、模块整体性、对齐、锯齿型嵌套、注释体性、对齐、锯齿型嵌套、注释都是形成特定风格的因素。都是形成特定风格的因素。为了让程序表现出为了让程序表现出美感美感,又不致于语句前后内容含混不清、结构,又不致于语句前后内容含混不清、结构混乱,语句书写讲究疏密得当。混乱,语句书写讲

43、究疏密得当。 高级程序员的程序风格,体现了极大的一贯性和艺术性。高级程序员的程序风格,体现了极大的一贯性和艺术性。每个初学者必须要模仿编程风格,随着编程量的增加,对程序每个初学者必须要模仿编程风格,随着编程量的增加,对程序的感受多多,会不知不觉地形成自己独特的风格。的感受多多,会不知不觉地形成自己独特的风格。第一章第一章 概说概说C+最小样本程序最小样本程序/=/ min_sample.cpp/ 带标准输出的最小样本程序带标准输出的最小样本程序/=#includeint main() std:cout”helloWorld.n”;/显示字符串显示字符串/=第一章第一章 概说概说C+1.6 1.

44、6 程序与算法程序与算法(Program & Algorithm)(Program & Algorithm) 计算机程序是用计算机语言所要求的规范描述出计算机程序是用计算机语言所要求的规范描述出来的一系列动作,它表达了程序员要求计算机执行的来的一系列动作,它表达了程序员要求计算机执行的操作。操作。 优秀的程序员尤其是优秀的程序员尤其是C+程序员,追求编程方法的程序员,追求编程方法的实效性实效性。这意味着所谓。这意味着所谓“学会计算机语言,看得懂语学会计算机语言,看得懂语法,了解了语言的描述方法法,了解了语言的描述方法”,还是不够的,它和熟,还是不够的,它和熟练运用计算机语言,练

45、运用计算机语言,能用语言高效、正确地描述问题、能用语言高效、正确地描述问题、解决问题解决问题是有天壤之别的。是有天壤之别的。 学习计算机语言在于让计算机准确地执行程序,和学习计算机语言在于让计算机准确地执行程序,和学习其他语言一样,都需要一个学习其他语言一样,都需要一个充分的实践充分的实践过程。过程。第一章第一章 概说概说C+算法算法(Algorithm)的定义的定义 1)目的性)目的性 算法是有求解目的的动作序列,算法必须有算法是有求解目的的动作序列,算法必须有运算结果,而程序只是强调过程性;运算结果,而程序只是强调过程性;2)抽象性)抽象性 算法离不开数据结构,而数据结构在具体的算法离不开

46、数据结构,而数据结构在具体的计算机上实现要受到表示范围的限制,算法比具体的计算机上实现要受到表示范围的限制,算法比具体的程序设计抽象层次要高一些,算法甚至不在乎用什么程序设计抽象层次要高一些,算法甚至不在乎用什么编程语言来描述;编程语言来描述;3)研究性)研究性 算法许多时候用于理论研究,描述算法的目算法许多时候用于理论研究,描述算法的目的是沟通人们的思想,而不是实现,所以,算法可以的是沟通人们的思想,而不是实现,所以,算法可以用伪编程语言来描述。用伪编程语言来描述。第一章第一章 概说概说C+编程与结构编程与结构(Programming & Structure) 编程是为了解决计算问题

47、,计算问题强调算法,编程是为了解决计算问题,计算问题强调算法,程序设计程序设计也就是在一定抽象层次上的算法设计也就是在一定抽象层次上的算法设计。这里的抽象层次应理解。这里的抽象层次应理解为数据的描述方式。当许多编程问题含有大量纵横交错的数据为数据的描述方式。当许多编程问题含有大量纵横交错的数据时,人们便逐渐意识到数据组织与数据结构的重要,意识到数时,人们便逐渐意识到数据组织与数据结构的重要,意识到数据存在的形式必须脱离程序。据存在的形式必须脱离程序。1976年,计算机专家年,计算机专家N.Wirth提提出这样的经典公式:出这样的经典公式: 程序程序 算法算法 数据结构数据结构 强调编程中强调编

48、程中数据结构的描述应相对算法而独立数据结构的描述应相对算法而独立。程序不再是单。程序不再是单纯的过程体(操作序列)了,不再是单纯的算法了,而是算法纯的过程体(操作序列)了,不再是单纯的算法了,而是算法和数据结构的有机组织。和数据结构的有机组织。 第一章第一章 概说概说C+1.7 1.7 过程化程序设计过程化程序设计(Procedural Programming)(Procedural Programming) 过程化程序设计主要体现在算法上,编程就是解决算法如过程化程序设计主要体现在算法上,编程就是解决算法如何设计问题。当算法很大时,就考虑将它按功能划分。程序组何设计问题。当算法很大时,就考虑

49、将它按功能划分。程序组织围绕算法的切分而展开。这一类问题一般都是小规模的问题,织围绕算法的切分而展开。这一类问题一般都是小规模的问题,一般的程序设计语言都可以胜任。一般的程序设计语言都可以胜任。 过程程序设计按照问题来设计算法。它所使用的是语言中过程程序设计按照问题来设计算法。它所使用的是语言中现成的基本数据类型。问题模型反映为过程结构模型,实际上现成的基本数据类型。问题模型反映为过程结构模型,实际上就是功能模型。但由于过程模块与数据的复杂关系没有清晰地就是功能模型。但由于过程模块与数据的复杂关系没有清晰地分离出来,所以它一般都是分离出来,所以它一般都是“具体问题具体解决具体问题具体解决”,无

50、法重复无法重复使用其中的使用其中的“零部件零部件”,而且,问题庞大以后,其复杂性会无,而且,问题庞大以后,其复杂性会无法收场。法收场。 第一章第一章 概说概说C+结构化程序设计结构化程序设计(Structured Programming) 结构化程序设计方法主要体现在过程的功能划分结构化程序设计方法主要体现在过程的功能划分与过程内部的编写规则上,因此它是一种与过程内部的编写规则上,因此它是一种规范的过程规范的过程化化程序设计思想程序设计思想 。 结构化程序描述任何实体的操作序列只需用结构化程序描述任何实体的操作序列只需用“顺顺序,选择(分支),重复(循环)序,选择(分支),重复(循环)”三种基

51、本控制结三种基本控制结构。构。 结构化程序设计中的各个结构化程序设计中的各个过程体过程体和各个组成部分和各个组成部分以以模块模块来表示。每个模块,其内聚性来表示。每个模块,其内聚性(agregation)越强,越强,外联性外联性(association)越少,则模块独立性越好。越少,则模块独立性越好。 第一章第一章 概说概说C+ 内聚性内聚性,即模块内部所涉及的功能越单一越好。这,即模块内部所涉及的功能越单一越好。这样一旦修改起来,就职责明确,不会因为这个原因那样一旦修改起来,就职责明确,不会因为这个原因那个原因都来找这个模块算帐。个原因都来找这个模块算帐。 外联性外联性,即模块之间的联系越少

52、越好,联系意味着,即模块之间的联系越少越好,联系意味着依赖性,外联性少,模块的独立性就好,独立性意味依赖性,外联性少,模块的独立性就好,独立性意味着自说自话地修改本模块与外界无关。因此就容易编着自说自话地修改本模块与外界无关。因此就容易编程和修改。程和修改。 减少外联性还涉及到对数据的分离与归类。将过程减少外联性还涉及到对数据的分离与归类。将过程体中的数据分离出来,独立地用数据结构去描述其数体中的数据分离出来,独立地用数据结构去描述其数据和处理,这都是模块划分的原则。据和处理,这都是模块划分的原则。 第一章第一章 概说概说C+1.8 1.8 对象化程序设计对象化程序设计(Objectified

53、 Programming)(Objectified Programming) 伴随着人类对计算机的依赖性日益增强,程序规伴随着人类对计算机的依赖性日益增强,程序规模不断扩大,模不断扩大,模块数呈指数级递增模块数呈指数级递增,模块间的,模块间的数据传数据传递五花八门递五花八门,同一程序中,同一程序中模块之间的关系错综复杂模块之间的关系错综复杂,结构化程序设计的规范已经不能保证程序的正确性,结构化程序设计的规范已经不能保证程序的正确性,可维护性和重用性了。人们开始意识到不可能在语言可维护性和重用性了。人们开始意识到不可能在语言中内置所有的待解决问题的数据结构,必须让语言具中内置所有的待解决问题的数

54、据结构,必须让语言具有有自建数据结构自建数据结构的能力。的能力。 数据结构对于算法,对于程序是如此的重要,但数据结构对于算法,对于程序是如此的重要,但当时大多数语言都没有专门支持对数据结构的直接描当时大多数语言都没有专门支持对数据结构的直接描述。述。 第一章第一章 概说概说C+ 在在C语言中有一种结构语言中有一种结构(struct)类型,可以在单纯空间上复类型,可以在单纯空间上复合其他数据类型,描述数据的组织,但还是不能避免其数据操合其他数据类型,描述数据的组织,但还是不能避免其数据操作的安全问题。在大规模程序设计中,问题尤其突出。软件发作的安全问题。在大规模程序设计中,问题尤其突出。软件发展

55、似有一个不可逾越的极限,因此,在软件产业界曾一度有展似有一个不可逾越的极限,因此,在软件产业界曾一度有软软件危机件危机之说。之说。 其实其实浩瀚的编程大军浩瀚的编程大军并非每个人都必须要精通问题的每并非每个人都必须要精通问题的每个细节,这就像使用电视机的人并非都要精通其内部的每个细个细节,这就像使用电视机的人并非都要精通其内部的每个细节!我们可用电视机的外壳,把电视机的内部电路和外部使用节!我们可用电视机的外壳,把电视机的内部电路和外部使用一分为二。外部使用只需要了解电视机的基本操作方法,内部一分为二。外部使用只需要了解电视机的基本操作方法,内部电路提供电视机的各项功能,两者都需要一个共同的规

56、范电路提供电视机的各项功能,两者都需要一个共同的规范电视机的按钮操作功能。电视机的按钮操作功能。第一章第一章 概说概说C+ 抽象数据类型抽象数据类型就是想要描述这一共同的规范,它就是想要描述这一共同的规范,它描述数据描述数据的组织和相关的操作的组织和相关的操作。如果语言能够自由定义数据类型,那么,。如果语言能够自由定义数据类型,那么,问题就能化成以抽象数据类型为媒介的使用与实现独立的两部问题就能化成以抽象数据类型为媒介的使用与实现独立的两部分,因而该语言的解决问题的能力一定就强。分,因而该语言的解决问题的能力一定就强。衡量一个语言的衡量一个语言的优劣,能否自定义或者说扩充数据类型是其重要指标优

57、劣,能否自定义或者说扩充数据类型是其重要指标。 C+有一个有一个类类(class)机制机制,这正是,这正是C语言欠缺的地方。语言欠缺的地方。数据数据类型的本质是数据组织类型的本质是数据组织(实现)(实现)和其操作(和其操作(使用)使用)的捆绑性的捆绑性。当对应到具体编程时,用抽象数据类型来界定,就能把编程大当对应到具体编程时,用抽象数据类型来界定,就能把编程大军分为两个阵营,一个是专业性极强的,专门军分为两个阵营,一个是专业性极强的,专门实现实现抽象数据类抽象数据类型的编程,好比生产电视机者;另一个是专门型的编程,好比生产电视机者;另一个是专门使用使用抽象数据类抽象数据类型的编程,好比使用电视

58、机者。型的编程,好比使用电视机者。 第一章第一章 概说概说C+ 要能使抽象数据类型能够维护要能使抽象数据类型能够维护两大程序员阵营两大程序员阵营的编程利益,的编程利益,必须要在语言的设计中加入一些语言机制,这些语言机制采用必须要在语言的设计中加入一些语言机制,这些语言机制采用了许多难以想象的技术,实现了了许多难以想象的技术,实现了数据封装数据封装,类型安全类型安全等,而且等,而且还必然要使代码更容易阅读和维护,否则没有人愿意用。还必然要使代码更容易阅读和维护,否则没有人愿意用。 抽象数据类型的使用,最终像使用基本数据类型那样简单,抽象数据类型的使用,最终像使用基本数据类型那样简单,对应的对应的

59、实体就称之为对象实体就称之为对象。因此,编程的意义就是算法在。因此,编程的意义就是算法在对象对象之间穿梭之间穿梭,或曰,或曰针对对象的算法设计针对对象的算法设计。所以其相应的编程就是。所以其相应的编程就是对象化的编程了。对象化的编程了。 无论是无论是实现抽象数据类型的程序员群体实现抽象数据类型的程序员群体,还是使,还是使用抽象数用抽象数据类型的程序员群体据类型的程序员群体,他们都以同样的参照在工作,都在做算,他们都以同样的参照在工作,都在做算法设计的工作,所以更加直截了当而又具体的编程模式变成了法设计的工作,所以更加直截了当而又具体的编程模式变成了:程序程序 算法算法 抽象数据类型抽象数据类型第一章第一章 概说概说C+面向对象的程序设计面向对象的程序设计(Object-Oriented Pro

温馨提示

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

评论

0/150

提交评论