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