《第1章程序设计概述.ppt》由会员分享,可在线阅读,更多相关《第1章程序设计概述.ppt(57页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第1 1章章 程序设计概述程序设计概述西安科技大学 计算机学院C C/C C+语言程序设计案例教程语言程序设计案例教程教学目标教学目标了解计算机语言的基本概念了解计算机语言的基本概念掌握程序设计的特点及其一般方法掌握程序设计的特点及其一般方法了解了解C/C+语言的发展及其特点语言的发展及其特点学习与掌握学习与掌握VC+集成环境集成环境21.1 计算机语言及其发展计算机语言及其发展 1.计算机语言计算机语言 是人与计算机进行交流的工具是人与计算机进行交流的工具是人与计算机进行交流的工具是人与计算机进行交流的工具 计算机语言分为:计算机语言分为:计算机语言分为:计算机语言分为:机器语言机器语言机
2、器语言机器语言机器指令(由机器指令(由机器指令(由机器指令(由0 0 和和和和 1 1组成),组成),组成),组成),可直接执行可直接执行可直接执行可直接执行 难学、难记难学、难记难学、难记难学、难记依赖机器的类型依赖机器的类型依赖机器的类型依赖机器的类型汇编语言汇编语言汇编语言汇编语言用助记符代替机器指用助记符代替机器指用助记符代替机器指用助记符代替机器指令,用变量代替各类令,用变量代替各类令,用变量代替各类令,用变量代替各类地址。地址。地址。地址。克服记忆的难点克服记忆的难点克服记忆的难点克服记忆的难点其他与机器语言类其他与机器语言类其他与机器语言类其他与机器语言类似似似似高级语言高级语言
3、高级语言高级语言类似数学语言、接近自然语言、具有通用类似数学语言、接近自然语言、具有通用类似数学语言、接近自然语言、具有通用类似数学语言、接近自然语言、具有通用性和可移植性,不依赖具体的计算机类型。性和可移植性,不依赖具体的计算机类型。性和可移植性,不依赖具体的计算机类型。性和可移植性,不依赖具体的计算机类型。3例如:例如:10000000 加加10010000 减减机器语言程序机器语言程序MOV AX,MOV AX,300H300HADD BX,AXADD BX,AX汇编语言源程序汇编语言源程序main()int a,b,c;a=300;b=18;c=a+b;printf(“a+b=%dn”
4、,c);高级语言高级语言源程序源程序(C)源程序需要源程序需要翻译翻译4高级语言的翻译:高级语言的翻译:编译方法编译方法图图1.2 编译过程编译过程(.CPP或或.PAS等等)编译程序编译程序连接程序连接程序编编译译连连接接高级语言高级语言源程序源程序机器语言机器语言目标程序目标程序可执行可执行程序程序(.OBJ)(.EXE)运运行行运行运行结果结果解释程序解释程序高级语言高级语言源程序源程序解释解释执行执行运行运行结果结果图图1.3 解释过程解释过程(.BAS)l l解释方法解释方法51.1.2C语言及其特点语言及其特点1.C1.C语言的诞生语言的诞生19731973年,美国贝尔实验室的丹尼
5、斯年,美国贝尔实验室的丹尼斯年,美国贝尔实验室的丹尼斯年,美国贝尔实验室的丹尼斯 里奇里奇里奇里奇(DennisM.(DennisM.Ritchie)Ritchie)在在在在B B语言的基础上设计出了一种新的语言,即语言的基础上设计出了一种新的语言,即语言的基础上设计出了一种新的语言,即语言的基础上设计出了一种新的语言,即C C语言。语言。语言。语言。19781978年,布赖恩年,布赖恩年,布赖恩年,布赖恩 凯尼汉凯尼汉凯尼汉凯尼汉(BrianW.Kernighan)(BrianW.Kernighan)和丹尼斯和丹尼斯和丹尼斯和丹尼斯 里奇出版了第一版里奇出版了第一版里奇出版了第一版里奇出版了
6、第一版TheCProgrammingTheCProgrammingLanguageLanguage,从而使,从而使,从而使,从而使C C语言成为目前世界上流传最广泛语言成为目前世界上流传最广泛语言成为目前世界上流传最广泛语言成为目前世界上流传最广泛的高级程序设计语言。的高级程序设计语言。的高级程序设计语言。的高级程序设计语言。2.C2.C语言标准语言标准随着微型计算机的普及,许多随着微型计算机的普及,许多随着微型计算机的普及,许多随着微型计算机的普及,许多C C语言版本相继出现。由于语言版本相继出现。由于语言版本相继出现。由于语言版本相继出现。由于一些新的特性不断被各种编译器实现并添加,这些一
7、些新的特性不断被各种编译器实现并添加,这些一些新的特性不断被各种编译器实现并添加,这些一些新的特性不断被各种编译器实现并添加,这些C C语语语语言之间出现了一些不一致的地方。言之间出现了一些不一致的地方。言之间出现了一些不一致的地方。言之间出现了一些不一致的地方。为了建立一个为了建立一个为了建立一个为了建立一个“无歧无歧无歧无歧义,与具体平台无关义,与具体平台无关义,与具体平台无关义,与具体平台无关”的的的的C C语言体系,美国国家标准学语言体系,美国国家标准学语言体系,美国国家标准学语言体系,美国国家标准学会会会会(ANSI)(ANSI)为为为为C C语言制定了一套标准,即语言制定了一套标准
8、,即语言制定了一套标准,即语言制定了一套标准,即ANAN标准。标准。标准。标准。619891989年美国国家标准学会年美国国家标准学会年美国国家标准学会年美国国家标准学会(ANSI)(ANSI)通过的通过的通过的通过的C C语言标准语言标准语言标准语言标准ANSIANSIX3.1591989X3.1591989,被称为,被称为,被称为,被称为C89C89。之后。之后。之后。之后TheCTheCProgrammingLanguageProgrammingLanguage第二版开始出版发行,书中第二版开始出版发行,书中第二版开始出版发行,书中第二版开始出版发行,书中根据根据根据根据C89C89进行
9、了更新。进行了更新。进行了更新。进行了更新。19901990年,国际标准化组织年,国际标准化组织年,国际标准化组织年,国际标准化组织(ISO)(ISO)批批批批准准准准ANSICANSIC成为国际标准,于是成为国际标准,于是成为国际标准,于是成为国际标准,于是ISOCISOC诞生了,该标准被诞生了,该标准被诞生了,该标准被诞生了,该标准被称为称为称为称为C90C90。这两个标准只有细微的差别,因此,通常认。这两个标准只有细微的差别,因此,通常认。这两个标准只有细微的差别,因此,通常认。这两个标准只有细微的差别,因此,通常认为为为为C89C89和和和和C90C90指的是同一个版本。指的是同一个版
10、本。指的是同一个版本。指的是同一个版本。之后,之后,之后,之后,ISOISO于于于于19941994年、年、年、年、19961996年分别出版了年分别出版了年分别出版了年分别出版了C90C90的技术勘误的技术勘误的技术勘误的技术勘误文档,更正了一些印刷错误,并在文档,更正了一些印刷错误,并在文档,更正了一些印刷错误,并在文档,更正了一些印刷错误,并在19951995年通过了一份年通过了一份年通过了一份年通过了一份C90C90的技术补充,对的技术补充,对的技术补充,对的技术补充,对C90C90进行了微小的扩充,经扩充后进行了微小的扩充,经扩充后进行了微小的扩充,经扩充后进行了微小的扩充,经扩充后
11、的的的的ISOCISOC被称为被称为被称为被称为C95C95。19991999年,年,年,年,ANSIANSI和和和和ISOISO又通过了又通过了又通过了又通过了C99C99标准。标准。标准。标准。C99C99标准相对标准相对标准相对标准相对C89C89做了很多修改,例如变量声明可以不放在函数开头,做了很多修改,例如变量声明可以不放在函数开头,做了很多修改,例如变量声明可以不放在函数开头,做了很多修改,例如变量声明可以不放在函数开头,支持变长数组等。但由于很多编译器仍然没有对支持变长数组等。但由于很多编译器仍然没有对支持变长数组等。但由于很多编译器仍然没有对支持变长数组等。但由于很多编译器仍然
12、没有对C99C99提提提提供完整的支持,因此本书依然按照供完整的支持,因此本书依然按照供完整的支持,因此本书依然按照供完整的支持,因此本书依然按照C89C89标准来进行讲解。标准来进行讲解。标准来进行讲解。标准来进行讲解。73.C3.C语言的特点语言的特点C C语言是一种通用的、面向过程的程序语言,语言简洁、丰富的运算符、语言是一种通用的、面向过程的程序语言,语言简洁、丰富的运算符、语言是一种通用的、面向过程的程序语言,语言简洁、丰富的运算符、语言是一种通用的、面向过程的程序语言,语言简洁、丰富的运算符、直接访问物理地址、结构化、可移植性好等诸多特点使它得到了广直接访问物理地址、结构化、可移植
13、性好等诸多特点使它得到了广直接访问物理地址、结构化、可移植性好等诸多特点使它得到了广直接访问物理地址、结构化、可移植性好等诸多特点使它得到了广泛应用。泛应用。泛应用。泛应用。(1)C(1)C语言简洁、紧凑,使用方便、灵活,具有丰富的运算符和数据结语言简洁、紧凑,使用方便、灵活,具有丰富的运算符和数据结语言简洁、紧凑,使用方便、灵活,具有丰富的运算符和数据结语言简洁、紧凑,使用方便、灵活,具有丰富的运算符和数据结构。构。构。构。C C语言一共有语言一共有语言一共有语言一共有3232个关键字、个关键字、个关键字、个关键字、9 9种控制语句、种控制语句、种控制语句、种控制语句、3434种运算符。种运
14、算符。种运算符。种运算符。C C语言语言语言语言把括号、赋值、强制类型转换等都作为运算符处理,其运算类型更把括号、赋值、强制类型转换等都作为运算符处理,其运算类型更把括号、赋值、强制类型转换等都作为运算符处理,其运算类型更把括号、赋值、强制类型转换等都作为运算符处理,其运算类型更为丰富,表达式类型更加多样化。为丰富,表达式类型更加多样化。为丰富,表达式类型更加多样化。为丰富,表达式类型更加多样化。C C语言的数据类型有基本类型和语言的数据类型有基本类型和语言的数据类型有基本类型和语言的数据类型有基本类型和自定义等,能用来实现各种复杂的数据结构运算。自定义等,能用来实现各种复杂的数据结构运算。自
15、定义等,能用来实现各种复杂的数据结构运算。自定义等,能用来实现各种复杂的数据结构运算。(2)C(2)C语言允许直接访问物理地址,进行位操作,可以直接对硬件进行语言允许直接访问物理地址,进行位操作,可以直接对硬件进行语言允许直接访问物理地址,进行位操作,可以直接对硬件进行语言允许直接访问物理地址,进行位操作,可以直接对硬件进行操作,兼具高级语言和低级语言的特点,能实现汇编语言的大部分操作,兼具高级语言和低级语言的特点,能实现汇编语言的大部分操作,兼具高级语言和低级语言的特点,能实现汇编语言的大部分操作,兼具高级语言和低级语言的特点,能实现汇编语言的大部分功能。功能。功能。功能。C C语言既是成功
16、的系统描述语言,又是通用的程序设计语言,语言既是成功的系统描述语言,又是通用的程序设计语言,语言既是成功的系统描述语言,又是通用的程序设计语言,语言既是成功的系统描述语言,又是通用的程序设计语言,能开发基于网络和单机的各种形式的程序,在目前高级语言的市场能开发基于网络和单机的各种形式的程序,在目前高级语言的市场能开发基于网络和单机的各种形式的程序,在目前高级语言的市场能开发基于网络和单机的各种形式的程序,在目前高级语言的市场占有率方面名列前茅。占有率方面名列前茅。占有率方面名列前茅。占有率方面名列前茅。(3)C(3)C语言具有结构化的控制语句语言具有结构化的控制语句语言具有结构化的控制语句语言
17、具有结构化的控制语句(如如如如ifelseifelse语句、语句、语句、语句、whilewhile语句、语句、语句、语句、dowhiledowhile语句、语句、语句、语句、switchswitch语句、语句、语句、语句、forfor语句等语句等语句等语句等),它用函数作为程序模,它用函数作为程序模,它用函数作为程序模,它用函数作为程序模块以实现程序的模块化,是结构化的理想语言,符合现代编程风格块以实现程序的模块化,是结构化的理想语言,符合现代编程风格块以实现程序的模块化,是结构化的理想语言,符合现代编程风格块以实现程序的模块化,是结构化的理想语言,符合现代编程风格的要求。的要求。的要求。的要
18、求。8(4)C(4)C语言语法限制不严格,程序设计自由度大。例如对变量的类型使语言语法限制不严格,程序设计自由度大。例如对变量的类型使语言语法限制不严格,程序设计自由度大。例如对变量的类型使语言语法限制不严格,程序设计自由度大。例如对变量的类型使用比较灵活,整型数据与字符型数据以及逻辑型数据可以通用。一用比较灵活,整型数据与字符型数据以及逻辑型数据可以通用。一用比较灵活,整型数据与字符型数据以及逻辑型数据可以通用。一用比较灵活,整型数据与字符型数据以及逻辑型数据可以通用。一般的高级语言语法检查比较严,能检查出几乎所有的语法错误;而般的高级语言语法检查比较严,能检查出几乎所有的语法错误;而般的高
19、级语言语法检查比较严,能检查出几乎所有的语法错误;而般的高级语言语法检查比较严,能检查出几乎所有的语法错误;而C C语言允许程序编写者有较大的自由度,因此放宽了语法的检查。语言允许程序编写者有较大的自由度,因此放宽了语法的检查。语言允许程序编写者有较大的自由度,因此放宽了语法的检查。语言允许程序编写者有较大的自由度,因此放宽了语法的检查。程序员要自己保证所写程序的正确性,不能过分依赖程序员要自己保证所写程序的正确性,不能过分依赖程序员要自己保证所写程序的正确性,不能过分依赖程序员要自己保证所写程序的正确性,不能过分依赖C C编译程序去编译程序去编译程序去编译程序去检查错误。检查错误。检查错误。
20、检查错误。(5)C(5)C语言编写的程序可移植性好语言编写的程序可移植性好语言编写的程序可移植性好语言编写的程序可移植性好(与汇编语言相比与汇编语言相比与汇编语言相比与汇编语言相比)。在某一系统下编。在某一系统下编。在某一系统下编。在某一系统下编写的程序,基本上不做修改就能在其他类型的计算机和操作系统上写的程序,基本上不做修改就能在其他类型的计算机和操作系统上写的程序,基本上不做修改就能在其他类型的计算机和操作系统上写的程序,基本上不做修改就能在其他类型的计算机和操作系统上运行。运行。运行。运行。(6)C(6)C语言生成目标代码质量高,程序执行效率高,一般只比汇编程序语言生成目标代码质量高,程
21、序执行效率高,一般只比汇编程序语言生成目标代码质量高,程序执行效率高,一般只比汇编程序语言生成目标代码质量高,程序执行效率高,一般只比汇编程序生成的目标代码效率低生成的目标代码效率低生成的目标代码效率低生成的目标代码效率低10%10%20%20%。尽管尽管尽管尽管C C语言具有很多的优点,但和其他任何一种程序设计语言一样,它语言具有很多的优点,但和其他任何一种程序设计语言一样,它语言具有很多的优点,但和其他任何一种程序设计语言一样,它语言具有很多的优点,但和其他任何一种程序设计语言一样,它也有其自身的缺点,如代码实现周期长;也有其自身的缺点,如代码实现周期长;也有其自身的缺点,如代码实现周期长
22、;也有其自身的缺点,如代码实现周期长;C C语言程序设计过于自由,语言程序设计过于自由,语言程序设计过于自由,语言程序设计过于自由,经验不足的程序员易出错;对平台依赖较多等。但总的来说,经验不足的程序员易出错;对平台依赖较多等。但总的来说,经验不足的程序员易出错;对平台依赖较多等。但总的来说,经验不足的程序员易出错;对平台依赖较多等。但总的来说,C C语语语语言的优点远远超过了它的缺点。言的优点远远超过了它的缺点。言的优点远远超过了它的缺点。言的优点远远超过了它的缺点。91.1.3从从C到到C+C C语言是结构化和模块化的语言,它是面向过程的。在处理较小规模的语言是结构化和模块化的语言,它是面
23、向过程的。在处理较小规模的语言是结构化和模块化的语言,它是面向过程的。在处理较小规模的语言是结构化和模块化的语言,它是面向过程的。在处理较小规模的程序时,程序员用程序时,程序员用程序时,程序员用程序时,程序员用C C语言较为得心应手。但是当问题比较复杂、程语言较为得心应手。但是当问题比较复杂、程语言较为得心应手。但是当问题比较复杂、程语言较为得心应手。但是当问题比较复杂、程序的规模比较大时,结构化程序设计方法就显出它的不足。序的规模比较大时,结构化程序设计方法就显出它的不足。序的规模比较大时,结构化程序设计方法就显出它的不足。序的规模比较大时,结构化程序设计方法就显出它的不足。C C程序程序程
24、序程序的设计者必须细致地设计程序中的每一个细节,准确地考虑到程序的设计者必须细致地设计程序中的每一个细节,准确地考虑到程序的设计者必须细致地设计程序中的每一个细节,准确地考虑到程序的设计者必须细致地设计程序中的每一个细节,准确地考虑到程序运行时每一时刻发生的事情,例如各个变量的值是如何变化的,什运行时每一时刻发生的事情,例如各个变量的值是如何变化的,什运行时每一时刻发生的事情,例如各个变量的值是如何变化的,什运行时每一时刻发生的事情,例如各个变量的值是如何变化的,什么时候应该进行哪些输入,在屏幕上应该输出什么等。这对程序员么时候应该进行哪些输入,在屏幕上应该输出什么等。这对程序员么时候应该进行
25、哪些输入,在屏幕上应该输出什么等。这对程序员么时候应该进行哪些输入,在屏幕上应该输出什么等。这对程序员的要求是比较高的,如果面对的是一个复杂问题,程序员往往感到的要求是比较高的,如果面对的是一个复杂问题,程序员往往感到的要求是比较高的,如果面对的是一个复杂问题,程序员往往感到的要求是比较高的,如果面对的是一个复杂问题,程序员往往感到力不从心。当初提出结构化程序设计方法的目的是解决软件设计危力不从心。当初提出结构化程序设计方法的目的是解决软件设计危力不从心。当初提出结构化程序设计方法的目的是解决软件设计危力不从心。当初提出结构化程序设计方法的目的是解决软件设计危机,但是这个目标并未完全实现。为了
26、解决软件设计危机,机,但是这个目标并未完全实现。为了解决软件设计危机,机,但是这个目标并未完全实现。为了解决软件设计危机,机,但是这个目标并未完全实现。为了解决软件设计危机,2020世纪世纪世纪世纪8080年代人们提出了面向对象的程序设计年代人们提出了面向对象的程序设计年代人们提出了面向对象的程序设计年代人们提出了面向对象的程序设计(ObjectOriented(ObjectOrientedProgrammingProgramming,OOP)OOP)思想,需要设计出能支持面向对象的程序设思想,需要设计出能支持面向对象的程序设思想,需要设计出能支持面向对象的程序设思想,需要设计出能支持面向对象
27、的程序设计方法的新语言。在这种情况下计方法的新语言。在这种情况下计方法的新语言。在这种情况下计方法的新语言。在这种情况下SmalltalkSmalltalk等面向对象的语言纷纷涌等面向对象的语言纷纷涌等面向对象的语言纷纷涌等面向对象的语言纷纷涌现。不过在实践中人们发现由于现。不过在实践中人们发现由于现。不过在实践中人们发现由于现。不过在实践中人们发现由于C C语言是如此深入人心,使用如此语言是如此深入人心,使用如此语言是如此深入人心,使用如此语言是如此深入人心,使用如此广泛,面对程序设计方法的革命,最好的办法不是另外发明一种新广泛,面对程序设计方法的革命,最好的办法不是另外发明一种新广泛,面对
28、程序设计方法的革命,最好的办法不是另外发明一种新广泛,面对程序设计方法的革命,最好的办法不是另外发明一种新的语言去代替它,而是在它原有的基础上加以发展。在这种形势下,的语言去代替它,而是在它原有的基础上加以发展。在这种形势下,的语言去代替它,而是在它原有的基础上加以发展。在这种形势下,的语言去代替它,而是在它原有的基础上加以发展。在这种形势下,C+C+语言应运而生。语言应运而生。语言应运而生。语言应运而生。C+C+语言是由语言是由语言是由语言是由AT&TBell(AT&TBell(贝尔实验室贝尔实验室贝尔实验室贝尔实验室)的的的的BjarneBjarne StroustrupStroustru
29、p 博士及其同事于博士及其同事于博士及其同事于博士及其同事于2020世纪世纪世纪世纪8080年代初在年代初在年代初在年代初在C C语言的基语言的基语言的基语言的基础上成功开发的。础上成功开发的。础上成功开发的。础上成功开发的。C+C+语言保留了语言保留了语言保留了语言保留了C C语言原有的所有优点,并增加语言原有的所有优点,并增加语言原有的所有优点,并增加语言原有的所有优点,并增加了面向对象的机制。由于了面向对象的机制。由于了面向对象的机制。由于了面向对象的机制。由于C+C+语言对语言对语言对语言对C C语言的改进主要体现在增加语言的改进主要体现在增加语言的改进主要体现在增加语言的改进主要体现
30、在增加了适用于面向对象程序设计的类了适用于面向对象程序设计的类了适用于面向对象程序设计的类了适用于面向对象程序设计的类(class)(class)。后来为了强调它是。后来为了强调它是。后来为了强调它是。后来为了强调它是C C语言语言语言语言的增强版,用了的增强版,用了的增强版,用了的增强版,用了C C语言中的自加运算符语言中的自加运算符语言中的自加运算符语言中的自加运算符“+”+”,改称为,改称为,改称为,改称为C+C+。10C+C+是由是由是由是由C C发展而来的,与发展而来的,与发展而来的,与发展而来的,与C C兼容。用兼容。用兼容。用兼容。用C C语言编写的程序基语言编写的程序基语言编写
31、的程序基语言编写的程序基本上可以不加修改地用于本上可以不加修改地用于本上可以不加修改地用于本上可以不加修改地用于C+C+。C+C+可以看作是可以看作是可以看作是可以看作是C C的超的超的超的超集,集,集,集,C+C+既可用于面向过程的结构化程序设计,又可用既可用于面向过程的结构化程序设计,又可用既可用于面向过程的结构化程序设计,又可用既可用于面向过程的结构化程序设计,又可用于面向对象的程序设计。于面向对象的程序设计。于面向对象的程序设计。于面向对象的程序设计。C+C+增添了类的概念,有人又增添了类的概念,有人又增添了类的概念,有人又增添了类的概念,有人又称称称称C+C+语言是带类的语言是带类的
32、语言是带类的语言是带类的C C语言,是一个功能强大的混合型语言,是一个功能强大的混合型语言,是一个功能强大的混合型语言,是一个功能强大的混合型的程序设计语言。的程序设计语言。的程序设计语言。的程序设计语言。C+C+对对对对C C的增强,的增强,的增强,的增强,表现在两个方面:表现在两个方面:表现在两个方面:表现在两个方面:(1)(1)在原来面向过程的机制基础上,对在原来面向过程的机制基础上,对在原来面向过程的机制基础上,对在原来面向过程的机制基础上,对C C语言的功能做了不语言的功能做了不语言的功能做了不语言的功能做了不少扩充。少扩充。少扩充。少扩充。(2)(2)增加了面向对象的机制。增加了面
33、向对象的机制。增加了面向对象的机制。增加了面向对象的机制。面向对象程序设计是针对开发较大规模的程序而提出来的,面向对象程序设计是针对开发较大规模的程序而提出来的,面向对象程序设计是针对开发较大规模的程序而提出来的,面向对象程序设计是针对开发较大规模的程序而提出来的,目的是提高软件开发的效率。只有编写过大型程序的人目的是提高软件开发的效率。只有编写过大型程序的人目的是提高软件开发的效率。只有编写过大型程序的人目的是提高软件开发的效率。只有编写过大型程序的人才会真正体会到才会真正体会到才会真正体会到才会真正体会到C C的不足和的不足和的不足和的不足和C+C+的优点。的优点。的优点。的优点。11程序
34、设计程序设计 解决一个实际应用问题时,用计算机语解决一个实际应用问题时,用计算机语言编写计算机程序的过程,称为程序设计。言编写计算机程序的过程,称为程序设计。1.2程序设计方法程序设计方法目前,有两种重要的程序设计方法:目前,有两种重要的程序设计方法:l l结构化的程序设计结构化的程序设计l l面向对象的程序设计面向对象的程序设计121.结构化程序设计的基本概念结构化程序设计的基本概念程序的三种基本结构程序的三种基本结构程序的三种基本结构程序的三种基本结构顺序结构程序:顺序结构程序:顺序结构程序:顺序结构程序:按照书写顺序依次执行语句按照书写顺序依次执行语句按照书写顺序依次执行语句按照书写顺序
35、依次执行语句选择结构程序:选择结构程序:选择结构程序:选择结构程序:按照条件判断选择执行语句按照条件判断选择执行语句按照条件判断选择执行语句按照条件判断选择执行语句循环结构程序:循环结构程序:循环结构程序:循环结构程序:通过条件控制循环执行语句通过条件控制循环执行语句通过条件控制循环执行语句通过条件控制循环执行语句(基本结构流程图见下页)(基本结构流程图见下页)(基本结构流程图见下页)(基本结构流程图见下页)1.2.1结构化的程序设计方法结构化的程序设计方法13程序的三种基本结构程序的三种基本结构 顺序结构顺序结构N-S结结构构图图流流程程图图ABAB选择结构选择结构YNABP成成 立立?P
36、T F A B14程序的三种基本结构程序的三种基本结构循环结构循环结构NYP成立成立?A当当P成立时成立时 A直到型循环直到型循环直到型循环直到型循环 A当当P成立时成立时YNAP成立成立?当型循环当型循环当型循环当型循环N-S结结构构图图流流程程图图15一个结构化程序应该符合以下标准:一个结构化程序应该符合以下标准:程序仅由三种基本结构组成程序仅由三种基本结构组成每种基本结构都是每种基本结构都是只有一个入口只有一个入口和和一个一个出口出口程序中程序中没有死循环没有死循环和和死语句死语句162.结构化程序设计方法遵循的原则结构化程序设计方法遵循的原则l l如果一个程序仅包含这三种基本结构(由这
37、些基如果一个程序仅包含这三种基本结构(由这些基如果一个程序仅包含这三种基本结构(由这些基如果一个程序仅包含这三种基本结构(由这些基 本结构组成),则称为结构化程序。本结构组成),则称为结构化程序。本结构组成),则称为结构化程序。本结构组成),则称为结构化程序。l l结构化程序设计的基本原则:结构化程序设计的基本原则:结构化程序设计的基本原则:结构化程序设计的基本原则:采用采用自顶向下、逐步细化自顶向下、逐步细化自顶向下、逐步细化自顶向下、逐步细化的方法进行设计;的方法进行设计;采用采用模块化原则和方法模块化原则和方法模块化原则和方法模块化原则和方法进行设计。即将大型任务从上向进行设计。即将大型
38、任务从上向下划分为多个功能模块,每个模块又可以划分为若干子模下划分为多个功能模块,每个模块又可以划分为若干子模块,然后分别进行模块程序的编写;块,然后分别进行模块程序的编写;每个模块都是用结构化程序实现每个模块都是用结构化程序实现每个模块都是用结构化程序实现每个模块都是用结构化程序实现,即都只能由三种基,即都只能由三种基本结构组成,并通过计算机语言的结构化语句实现。本结构组成,并通过计算机语言的结构化语句实现。173.结构化程序设计过程结构化程序设计过程 程序设计过程分为三个基本步骤:分析问题程序设计过程分为三个基本步骤:分析问题程序设计过程分为三个基本步骤:分析问题程序设计过程分为三个基本步
39、骤:分析问题(QuestionQuestion)、设计算法()、设计算法()、设计算法()、设计算法(AlgorithmAlgorithm)、编写程)、编写程)、编写程)、编写程序(序(序(序(ProgramProgram),简称),简称),简称),简称QAPQAP方法。方法。方法。方法。第一步:分析问题。第一步:分析问题。第一步:分析问题。第一步:分析问题。对问题进行定义与分析对问题进行定义与分析对问题进行定义与分析对问题进行定义与分析。第二步:设计算法。第二步:设计算法。第二步:设计算法。第二步:设计算法。设置程序的轮廓(结构)并设置程序的轮廓(结构)并设置程序的轮廓(结构)并设置程序的轮
40、廓(结构)并画出程序的流程图画出程序的流程图画出程序的流程图画出程序的流程图。第三步:编写程序。第三步:编写程序。第三步:编写程序。第三步:编写程序。采用一种计算机语言(例采用一种计算机语言(例采用一种计算机语言(例采用一种计算机语言(例如使用如使用如使用如使用C C语言)实现算法编程语言)实现算法编程语言)实现算法编程语言)实现算法编程。(编写编写编写编写,编译连接编译连接编译连接编译连接,查看结果查看结果查看结果查看结果)18结构化的程序设计仍然是广泛使用的一种程序设计方法,结构化的程序设计仍然是广泛使用的一种程序设计方法,结构化的程序设计仍然是广泛使用的一种程序设计方法,结构化的程序设计
41、仍然是广泛使用的一种程序设计方法,但是它也有一些缺点:但是它也有一些缺点:但是它也有一些缺点:但是它也有一些缺点:首先,恰当的功能分解是结构化程序设计的前提。然而对首先,恰当的功能分解是结构化程序设计的前提。然而对首先,恰当的功能分解是结构化程序设计的前提。然而对首先,恰当的功能分解是结构化程序设计的前提。然而对于用户需求来讲,变化最大的部分往往就是功能的改进、于用户需求来讲,变化最大的部分往往就是功能的改进、于用户需求来讲,变化最大的部分往往就是功能的改进、于用户需求来讲,变化最大的部分往往就是功能的改进、添加和删除。结构化程序要实现这种功能变化并不容易,添加和删除。结构化程序要实现这种功能
42、变化并不容易,添加和删除。结构化程序要实现这种功能变化并不容易,添加和删除。结构化程序要实现这种功能变化并不容易,有时甚至要重新设计整个程序的结构。有时甚至要重新设计整个程序的结构。有时甚至要重新设计整个程序的结构。有时甚至要重新设计整个程序的结构。其次,在结构化程序设计中,数据和对数据的操作其次,在结构化程序设计中,数据和对数据的操作其次,在结构化程序设计中,数据和对数据的操作其次,在结构化程序设计中,数据和对数据的操作(即函数即函数即函数即函数)分离,函数依赖于数据类型的表示。数据的表示一旦发分离,函数依赖于数据类型的表示。数据的表示一旦发分离,函数依赖于数据类型的表示。数据的表示一旦发分
43、离,函数依赖于数据类型的表示。数据的表示一旦发生变化,与之相关的所有函数就均要修改,使得程序维生变化,与之相关的所有函数就均要修改,使得程序维生变化,与之相关的所有函数就均要修改,使得程序维生变化,与之相关的所有函数就均要修改,使得程序维护量增大。护量增大。护量增大。护量增大。另外,结构化的程序代码复用性较差,通常也就是调用一另外,结构化的程序代码复用性较差,通常也就是调用一另外,结构化的程序代码复用性较差,通常也就是调用一另外,结构化的程序代码复用性较差,通常也就是调用一个函数或使用一个公共的用户定义的数据类型而已。由个函数或使用一个公共的用户定义的数据类型而已。由个函数或使用一个公共的用户
44、定义的数据类型而已。由个函数或使用一个公共的用户定义的数据类型而已。由于数据结构和函数密切相关,使得函数并不具有一般特于数据结构和函数密切相关,使得函数并不具有一般特于数据结构和函数密切相关,使得函数并不具有一般特于数据结构和函数密切相关,使得函数并不具有一般特性。例如,一个求方程实数根的函数不能应用于求解复性。例如,一个求方程实数根的函数不能应用于求解复性。例如,一个求方程实数根的函数不能应用于求解复性。例如,一个求方程实数根的函数不能应用于求解复数的情形。数的情形。数的情形。数的情形。19面向对象的程序设计是另一种重要的程序面向对象的程序设计是另一种重要的程序设计方法,它能够有效地改进结构
45、化程序设设计方法,它能够有效地改进结构化程序设计中存在的问题。计中存在的问题。面向对象的程序与结构化的程序不同,由面向对象的程序与结构化的程序不同,由C+编写的结构化的程序是由一个个的编写的结构化的程序是由一个个的函数函数组成的;而由组成的;而由C+编写的面向对象的程序是编写的面向对象的程序是由一个个的由一个个的对象对象组成的,对象之间通过消息组成的,对象之间通过消息可以相互作用。可以相互作用。1.2.2面向对象的程序设计方法面向对象的程序设计方法 在面向对象的方法中,在面向对象的方法中,“对象对象”是是现实世界的实体或概念在计算机逻辑现实世界的实体或概念在计算机逻辑中的抽象表示。对象是具有唯
46、一对象中的抽象表示。对象是具有唯一对象名和固定对外接口的一组属性和操作名和固定对外接口的一组属性和操作的集合,用来模拟组成或影响现实世的集合,用来模拟组成或影响现实世界问题的一个或一组因素。界问题的一个或一组因素。20面向对象的程序设计有三个主要特征,它们面向对象的程序设计有三个主要特征,它们是:封装、继承和多态,下面对这几个特是:封装、继承和多态,下面对这几个特征仅作一个简单的介绍,具体内容将在后征仅作一个简单的介绍,具体内容将在后续章节中详细叙述。续章节中详细叙述。211.1.封装封装在现实世界中,常常有许多相同类型的对象。例如,张三的汽车只是在现实世界中,常常有许多相同类型的对象。例如,
47、张三的汽车只是在现实世界中,常常有许多相同类型的对象。例如,张三的汽车只是在现实世界中,常常有许多相同类型的对象。例如,张三的汽车只是世界上许多汽车中的一个。如果我们把汽车看作一个大类,那么张世界上许多汽车中的一个。如果我们把汽车看作一个大类,那么张世界上许多汽车中的一个。如果我们把汽车看作一个大类,那么张世界上许多汽车中的一个。如果我们把汽车看作一个大类,那么张三的汽车只是汽车对象类中的一个实例。汽车对象都有同类型的数三的汽车只是汽车对象类中的一个实例。汽车对象都有同类型的数三的汽车只是汽车对象类中的一个实例。汽车对象都有同类型的数三的汽车只是汽车对象类中的一个实例。汽车对象都有同类型的数据
48、和对数据的操作行为,但是,每一辆汽车的数据又是独立的。根据和对数据的操作行为,但是,每一辆汽车的数据又是独立的。根据和对数据的操作行为,但是,每一辆汽车的数据又是独立的。根据和对数据的操作行为,但是,每一辆汽车的数据又是独立的。根据这个事实,制造商建造汽车时,用相同的蓝图建造许多汽车。在据这个事实,制造商建造汽车时,用相同的蓝图建造许多汽车。在据这个事实,制造商建造汽车时,用相同的蓝图建造许多汽车。在据这个事实,制造商建造汽车时,用相同的蓝图建造许多汽车。在面向对象的程序设计中,我们把这个蓝图称之为类。也就是说,类面向对象的程序设计中,我们把这个蓝图称之为类。也就是说,类面向对象的程序设计中,
49、我们把这个蓝图称之为类。也就是说,类面向对象的程序设计中,我们把这个蓝图称之为类。也就是说,类是定义某种对象共同的数据和操作的蓝图或原型。在是定义某种对象共同的数据和操作的蓝图或原型。在是定义某种对象共同的数据和操作的蓝图或原型。在是定义某种对象共同的数据和操作的蓝图或原型。在C+C+中,封装中,封装中,封装中,封装是通过类来实现的。数据成员和成员函数可以是公有的或私有的。是通过类来实现的。数据成员和成员函数可以是公有的或私有的。是通过类来实现的。数据成员和成员函数可以是公有的或私有的。是通过类来实现的。数据成员和成员函数可以是公有的或私有的。公有的成员函数和数据成员能够被其他的类访问。如果一
50、个成员函公有的成员函数和数据成员能够被其他的类访问。如果一个成员函公有的成员函数和数据成员能够被其他的类访问。如果一个成员函公有的成员函数和数据成员能够被其他的类访问。如果一个成员函数是私有的,它仅能被该类的其他成员函数访问,私有的数据成员数是私有的,它仅能被该类的其他成员函数访问,私有的数据成员数是私有的,它仅能被该类的其他成员函数访问,私有的数据成员数是私有的,它仅能被该类的其他成员函数访问,私有的数据成员仅能被该类的成员函数访问。因而,它们被封装在类的作用域内。仅能被该类的成员函数访问。因而,它们被封装在类的作用域内。仅能被该类的成员函数访问。因而,它们被封装在类的作用域内。仅能被该类的