第1章计算机与程序设计

上传人:沈*** 文档编号:69161643 上传时间:2022-04-05 格式:DOC 页数:13 大小:879KB
返回 下载 相关 举报
第1章计算机与程序设计_第1页
第1页 / 共13页
第1章计算机与程序设计_第2页
第2页 / 共13页
第1章计算机与程序设计_第3页
第3页 / 共13页
点击查看更多>>
资源描述
13第1章 计算机与程序设计第1章 计算机与程序设计本章介绍计算机和程序设计的基本知识,主要内容包括计算机的基本结构、程序设计语言和面向过程程序设计等。通过对这些内容的学习,可使读者对计算机和程序设计有一个初步的了解,为后面各章的学习奠定必要的基础。1.1 计算机的基本结构1.1.1 计算机硬件的基本组成计算机是程序式电子数字计算机的简称。1946年世界上第一台计算机问世。最初,计算机只被当作一种现代化的计算工具,但随着技术的进步,现在,计算机已经远不只是一种计算工具,它的应用已经遍及国民经济和人类生活的各个领域,并带动着各行各业向现代化迈进。计算机是作为一种计算工具出现的,它的工作过程和人使用算盘或计算器等简单计算工具解题的过程很相似。为了了解计算机的组成和工作过程,下面先讲述使用算盘解题的步骤和所需要的设备。1用算盘解题的设备和步骤假设需要计算半径为15的圆面积与边长为12的正方形面积之差,即计算下式的值:3.141615151212首先,需要有一个算盘作为计算工具,其次需要一张纸,以便记录原始数据、运算的中间结果和最后结果。把这些原始数据和运算结果记录到纸上是由人用笔来完成的,整个运算过程也是在人的控制下进行的。运算步骤概括如下:(1)人把要计算的表达式(其中包含了原始数据)用笔记录在纸上。(2)人用算盘计算3.14161515,然后把中间结果706.86用笔记录在纸上。(3)人用算盘计算1212得到中间结果144,把这个中间结果也用笔记录在纸上。(4)最后,人用算盘从第一个中间结果706.86中减去第二个中间结果144,得到最后结果562.86,再用笔把它记录在纸上。2用计算机解题需要的设备用计算机来完成上述解题过程,首先需要一个能够代替算盘完成各种运算的部件,这个部件称为运算器。其次,需要一个能存放原始数据和运算结果的部件,这个部件称为存储器,有内存储器与外存储器之分。虽然计算机的工作过程和人用算盘解题的过程很相似,但是它们之间却有一个本质区别:计算机工作过程是脱离人的干预的,人只要事先把解题步骤按先后顺序排列起来,输入到计算机的内存储器中,然后启动计算机运转,计算机就会自动按预先安排好的解题步骤完成计算。这种事先编写好的解题步骤称为程序。通常,把程序及其相关文档资料称为软件。可见,存储器也是存放程序的部件。用来把原始数据和程序输入到计算机中的设备,称为输入设备。输出计算结果所用的设备称为输出设备。人在使用计算机时应完成的任务只是编写程序和操作计算机,计算机解题的全过程是在程序控制下依次发出各种控制命令,操纵计算过程一步一步地进行,完全取代了人在用算盘计算过程中所起的控制作用。把能够依次发出各种控制信息、代替人起控制作用的部件称为控制器。综上所述,计算机主要由内存储器、运算器、控制器、输入设备和输出设备等5个部件组成。此外,为了扩大存储容量和长期保存数据,通常还设有外存储器。各部件的关系如图1.1所示。3计算机的内部组成(1)中央处理器(CPU)CPU即中央处理器,如图1.2所示。它是计算机的大脑,计算机的运算、控制都是由它来处理的。它的发展非常迅速,就像不断在加速的列车一样。个人计算机从8088(XT)时代发展到现在的Pentium D时代,只经过了不到20年的时间。从生产技术来说,最初的8088集成了29000个晶体管,而高能奔腾的集成度超过了750万个晶体管。从而,CPU的运行速度也有了本质上的提高。 图1.1 计算机的基本结构 图1.2 中央处理器(CPU)(2)主板主板是计算机中最重要的部件之一,是整个计算机工作的基础,如图1.3所示。计算机技术已非常成熟,几乎都是模块化的设计。对10种或20种主板进行研究发现,它们差不多是相同的,它分为许多个功能块,每个功能块由一些芯片或元件组成。万变不离其宗,大致说来,主板由以下几个部分组成:CPU插槽(插座),内存插槽,高速缓存,局域总线和扩展总线,硬盘、软驱、串口、并口等外设接口,时钟和CMOS芯片,BIOS控制芯片。(3)内存内存一般指的是随机存取存储器,简称随机存储器(RAM),如图1.4所示。静态内存(SRAM)指静态随机存储器,用作系统的高速缓存,而平常所提到的计算机的内存指的是动态内存(DRAM)指动态随机存储器。除此之外,还有各种用途的内存,如显示卡使用的VRAM,存储系统设置信息的CMOS RAM等。 图1.3 主板 图1.4 内存每条内存上有一排黑色的芯片,称为内存颗粒,每个内存颗粒里,又有很多个内存单元,一个内存单元由一个电容和一个晶体管组成,为了让系统对内存准确无误,有秩序的管理,所以给每个内存单元分配了在它所在系统里的唯一的一个内存地址,而内存范围就是很多内存地址中的一段,比如0x5b0000050x5c0000010。本书第4章将介绍指针的使用,指针就是地址。可以将指针理解为它指向了内存中的某个内存单元(如地址为0x5b000005的单元),如果想获取此指针的值,这个指针值便是这个地址(0x5b000005)。也可以这样来理解,把对内存单元的访问管理和学生公寓的情况类比,如图1.5所示。图1.5 存储结构和学生公寓结构对比图假设每个学生住一间房,一个学生就相当于一个变量的内容,房间是内存单元,房号就是内存地址。如果知道了学生姓名,可以通过这个名字来访问该学生,这相当于使用普通变量名访问数据。如果知道了房号,同样也可以访问该学生,这相当于通过地址访问数据。比如,要从303(如同0x5b000005一样)房间中取出某样物品,有了地址以后,就可以从地址所指定的房间取出所要的物品(即数据的调用)。(4)硬盘硬盘的结构和软盘差不多,是由磁道(tracks)、扇区(sectors)、柱面(cylinders)和磁头(heads)组成的,如图1.6所示。拿一个盘片来讲,它和软盘类似,上面被分成若干个同心圆磁道,每个磁道被分成若干个扇区,每扇区通常是512B。硬盘的磁道数一般为3003000,每磁道的扇区数通常是63个,而早期的硬盘只有17个。图1.6 硬盘和软盘不同的是,硬盘由很多个盘片叠在一起,柱面指的就是多个磁片上具有相同编号的磁道,它的数目和磁道数是相同的。硬盘的容量按下式计算:硬盘容量=柱面数扇区数每扇区字节数磁头数标准IDE接口最多支持1024个柱面、63个扇区、16个磁头,其最大容量为102463 16512B= 528 482 304B,即528MB。增强型IDE(Integrated Drive Electronics)接口最多可支持256个逻辑磁头,容量最大可达到8.4GB。这里需要提到有关簇的概念,簇是文件存储的最小单位。软盘的簇只有一个扇区。在硬盘上,簇的大小和分区大小有关。比如,当分区容量介于64MB和128MB之间时,每簇有4个扇区;介于128MB和256MB之间时,每簇有8个扇区;而当分区容量大于1024MB时,每簇的扇区数目将超过64个,容量达到32KB以上。在此时,一个1B的文件在硬盘上也会占用32KB的空间。因此,要根据具体情况来进行合理分区,以免浪费很多的硬盘空间。如果用户使用的Windows 95 OSR2或者Windows 98的话,可以利用它们提供的FAT32分区,使硬盘的每一个簇小到4KB。如果使用的是Windows 2000或Windows XP,使用NTFS分区,每个簇的大小不要超过4KB。(5)其他部件一般来说,一台完整的功能强大的计算机还配备有软驱(floppy drive)、光驱(CD/DVD-ROM)、刻录机(CD/DVD-RW)、显示卡(video card)、声卡(audio card)、网卡(network card)及显示器(display)、音箱(sound box)、键盘(keyboard)、鼠标(mouse)、扫描仪(scanner)、打印机(printer)等,本书不做详细介绍,请有兴趣的同学自行查找相关资料。1.1.2 计算机的工作过程如图1.1所示,在计算机中有两类信息在流动。一类信息是数据,包括原始数据、中间结果、最后结果和程序指令等,数据流在图中用粗线表示,箭头表明流动方向。另一类信息是控制命令,在图中用细线表示,箭头同样表明流动方向。不论是数据还是控制命令,在计算机中都是仅用“0”和“1”表示的二进制信息。通过输入设备把程序和原始数据按指定地址输入存储器保存,图1.7是存储器存储程序和数据的示意图。然后启动计算机,则计算机按照存入的顺序依次取出存储器中的指令送入控制器分析,控制器根据分析结果发出相应的控制命令,从而按照人的意图自动完成全部运算,最后再通过输出设备输出计算结果。在运算过程中,数据从存储器取出并输入运算器进行运算,运算的中间结果和最后结果可存入存储器保存,也可由运算器经过输出设备输出。必要时,可将内存储器的成批数据送入外存储器保存,或将外存储器中的成批数据调入内存储器参加运算。前面概括地说明了计算机工作的大致过程,下面,仍以前面所举的计算3.141615151212为例,具体说明计算机的工作过程。图1.7 程序和数据在存储器中存储示意图第一步,用输入设备把事先编写好的解题步骤(即程序)和原始数据(3.1416,15,12)输入到存储器指定编号的地方存储起来。第二步,命令计算机从第一条指令开始执行程序,则计算机在程序控制下自动完成解题的全过程。具体说来,解题过程包括下列操作:(1)把第一个数据3.1416从存储器中取到运算器内。(2)把第二个数据15从存储器中取到运算器内,进行乘法运算3.141615,得到中间结果47.124。(3)用第二个数据15再次乘中间结果47.124,得到新的中间结果706.86。(4)把运算器中的中间结果706.86送到存储器中暂时保存。(5)把第三个数据12从存储器中取到运算器内。(6)进行乘法运算1212,得到中间结果144。(7)把运算器中的中间结果144送到存储器中暂时存放。(8)把暂存的中间结果706.86取到运算器内。(9)把暂存的中间结果144取到运算器内,进行减法运算706.86144,得到最后结果562.86。(10)把最后结果562.86通过输出设备输出给用户(例如,用打印机打印在纸上或显示在显示器的荧光屏上)。(11)停机。1.2 程序设计语言计算机本身并不知道如何解决一个问题,必须由人事先把解题步骤设计好,编写成程序输入到计算机中,计算机才能在程序控制下按照人的意图解决这个问题。因此,人们必须用计算机能够接受的语言和它通信,告诉它对什么数据进行什么运算,以及运算的次序。程序设计语言就是为了表达程序而由人设计出来的计算机能够接受的人工语言,它是用来表达用户意图指挥计算机工作的通信工具。目前,程序设计语言的发展已经经历了4代,第五代程序设计语言尚处于萌芽状态。下面简单介绍一下各代程序设计语言的基本特点。1第一代程序设计语言第一代程序设计语言是机器语言,它是计算机所特有的,也就是说,不同计算机有不同的机器语言。机器语言的基本组成成分是若干条机器指令,每条指令指明作什么运算及对哪个单元中的数据进行运算。这些指令是计算机硬件可以直接识别和执行的。计算机只能存储和识别二进制的数据和指令,因此,机器语言也称为二进制语言。用机器语言编写程序时,数据和指令必须分别存储在不同的单元中。例如,计算半径为15的圆面积:A=3.14161515用某种型号计算机计算时,内存中存储的数据及用机器语言编写的程序如表1.1和表1.2所示。表1.1 数据地 址数 值地 址数 值地 址数 值00103.14160011150012A表1.2 程序地 址指 令注 释操作码地址码01000210010取3.14160101012001115010201200111501030220012存A01040350012打印A01050070000停机计算机可以直接识别和执行用机器语言编写的程序,因此效率较高。但是,人工编写机器语言程序很繁琐,容易出错,而且不同计算机有不同的机器语言,通用性很差。2第二代程序设计语言为了克服机器语言的缺点,人们设计出第二代程序设计语言汇编语言,也称为符号语言。相对于第一代程序设计语言,第二代程序设计语言的主要进步是,用含义较鲜明的符号代替机器语言中的二进制编码,因此看起来较直观,不易出错。例如,上面的计算圆面积的例子,如果用汇编语言编程序,则源程序如下:LOAD 3.1416MUL 15MUL 15SAVE APRINT ASTOP计算机硬件并不能直接识别和执行汇编语言源程序,因此,必须用一个编译程序(一种系统软件)把汇编语言源程序转换(即翻译)成机器语言程序(称为目标程序)之后,才能执行。汇编语言仍然是依赖于计算机的,不同计算机有不同的汇编语言,彼此不能通用。此外,汇编语言指令与机器语言指令是一一对应的,一个复杂的程序需要包含大量汇编语言指令,编写起来仍然很繁琐。为了克服汇编语言的缺点,人们开发出第三代程序设计语言。3第三代程序设计语言前面曾经讲过,为了利用计算机解决一个特定问题,必须首先设计出解题步骤。通常,把为了在计算机上解决一个问题而采用的方法和步骤称为算法。更确切地说,算法是在有限步骤内解决某一问题所使用的有精确定义的一系列操作规则。第三代程序设计语言特别适合用来表达算法,因此也称为算法语言。算法语言的基本组成成分是各种语句。通常一个语句的功能相当于多条机器指令的功能,因此,用算法语言编写程序远比用机器语言或汇编语言编写程序更加方便、简单和直观,而且更不容易出错。此外,算法语言不依赖于机器,同一个算法语言程序可以在众多不同类型的计算机上运行,通用性很强。因此,第三代程序设计语言也称为高级语言。常用的高级语言有BASIC、FORTRAN、ALGOL、COBOL、C、Pascal、PL/1等。例如,计算前述圆面积的BASIC源程序如下(每行前数字为行号):10 A=3.1416*15*1520 PRINT A30 END显然,计算机硬件并不能直接识别和执行高级语言源程序,因此,必须首先使用编译程序(一种系统软件)把高级语言源程序编译(即翻译)成机器语言程序(称为目标程序),然后才能执行。4第四代程序设计语言虽然比起机器语言和汇编语言来,第三代程序设计语言有了很大进步,但是,为了能熟练地使用这种语言解决实际问题,仍然需要经过长期的专业训练。为了提高软件开发效率,增强软件的可维护性,人们研究出第四代程序设计语言。所谓第四代程序设计语言,实质上是可以快速开发应用软件的各种高生产率的软件工具的统称。5第五代程序设计语言多数人认为,第五代程序设计语言将是智能化的语言。到目前为止,还没有公认的第五代程序设计语言出现。PROLOG语言可能是第五代程序设计语言最著名的雏形。1.3 面向过程程序设计如前所述,使用传统程序设计语言进行程序设计时,不论所使用的语言是第一代程序设计语言或第二代程序设计语言,还是第三代程序设计语言,都必须详细准确地描述解题过程。也就是说,当人们用这类语言表达自己意图指挥计算机工作时,必须向计算机详细说明怎样完成预定的功能:第一步做什么、第二步做什么、第三步做什么哪些操作按程序编写顺序只做一遍,哪些操作重复做多遍,哪些操作在某个条件成立时做,等等。因为程序设计工作主要围绕设计解题过程来进行,这种传统的程序设计方法称为面向过程程序设计,传统的程序设计语言称为过程性语言。使用过程性语言编写的程序,其功能是隐含在程序代码中的。为了搞清楚程序的功能,必须反复阅读程序,仔细分析程序的每个语句,根据该程序设计语言的语法确定语句的执行顺序,并要综合每个语句的语义及执行顺序才能推断出程序的功能。因此,理解面向过程的程序相当困难。显然,当应用系统的功能比较复杂时,应用程序的规模必然十分庞大,包含的语句很多,程序元素(数据、语句)相互之间的关系十分复杂。因此,用面向过程程序设计方法开发应用系统时,需要耗费大量人力物力,只有经过严格训练的有经验的程序员才能胜任编程工作。这样的应用系统不仅不易开发,维护起来也十分困难。所谓维护,就是在软件交付给用户使用期间,出于种种原因,而对软件进行修改。人们在开发软件的长期实践过程中,总结出一些设计原理并研究出一些系统化的技术方法,把它们用于面向过程程序设计,能够提高开发效率,增加系统的可理解性、可阅读性和可维护性。这些原理和技术方法,在进行面向对象程序设计时也有借鉴意义。下面简要介绍主要设计原理和技术方法。1.3.1 模块化模块是数据说明、可执行的语句等程序元素的集合,它是单独命名的而且可以通过名字来访问,也就是说,可以用名字代表该模块。所谓模块化,就是把一个程序划分成若干个模块,每个模块完成一个子功能,把这些模块组装成一个整体,可以完成指定的功能。模块化是为了使一个复杂的大型程序能被人的智力所管理、程序应该具备的基本属性。如果一个大型程序仅由一个模块组成,例如,程序由几十万个语句一个语句接着一个语句堆积而成,那么它将很难被人所理解。下面根据人类解决问题的一般规律,论证上面的结论。设函数C(x)定义问题X的复杂程度,函数E(x)确定解决问题X需要的工作量(时间)。对于两个问题P1和P2,如果C(P1) C(P2)显然 E(P1) E(P2)根据人们解决一般问题的经验,另一个有趣的规律为:C (P1 + P2) C(P1) + C(P2)也就是说,如果一个问题由P1和P2两个问题组合而成,那么它的复杂程度大于分别考虑每个问题时的复杂程度之和。综上所述,得到下面的不等式:E(P1 + P2) E(P1) + E(P2)这个不等式导致“各个击破”的结论把复杂的问题分解成许多容易解决的小问题,原来的问题也就容易解决了。这就是模块化的根据。从上面的不等式并不能得出“如果无限地分割程序,最后为了开发程序而需要的工作量也就小得可以忽略了”的结论。事实上,还有另一个因素在起作用,从而使得上述结论不能成立。当模块数目增加时每个模块的规模将减小,开发单个模块的工作量确实减少了;但是,随着模块数目增加,设计和实现模块接口所需要的工作量也将增加。综合这两个因素,每个程序都有一个最适合的模块数目,使得开发该程序的总成本(开发模块的成本加上开发模块间接口的成本)最小。换句话说,在把程序划分成模块的时候,模块规模应该适当。模块太大则模块化带来的好处不明显,模块太小,则模块间接口的成本过大。采用模块化原理可以使程序结构清晰,不仅容易设计也容易阅读和理解。因为程序错误通常局限在有关的模块及它们之间的接口中,所以模块化使软件容易测试和调试,因而有助于提高软件的稳定性。因为变动往往只涉及少数几个模块,所以模块化能够提高软件的可修改性。模块化也有助于软件开发工程的组织管理,一个复杂的大型程序可以由许多程序员分工编写不同的模块,并且可以进一步分配技术熟练的程序员编写困难的模块。1.3.2 抽象人类在认识复杂现象的过程中使用的最强有力的思维工具是抽象。人们在实践中认识到,在现实世界中一定事物、状态或过程之间总存在着某些相似的方面(共性)。把这些相似的方面集中和概括起来,暂时忽略它们之间的差异,这就是抽象。在求解问题的过程中使用抽象原理,就是忽略该问题与当前目的无关的那些方面,以便集中精力考虑与当前目的有关的那些方面。由于人类思维能力的限制,如果每次面临的因素太多,是不可能做出精确的思维的。处理复杂系统的唯一有效的方法是用层次的方式构造和分析它。一个复杂的动态系统首先可以用一些高级的抽象概念构造和理解,这些高级概念又可以用一些较低级的概念构造和理解,如此进行下去,直至最低层次的具体元素。这种层次的思维和解题方式必须反映在定义动态系统的程序结构之中,每层的一个概念将以某种方式对应于程序的一组成分。考虑问题的模块化解法时,可以提出许多抽象的层次。在抽象的最高层次使用描述问题环境的语言,以概括的方式叙述问题的解法;在较低抽象层次采用更过程化的方法,把面向问题的术语和面向实现的术语结合起来叙述问题的解法;最后,在最低的抽象层次用可以直接实现的方式叙述问题的解法。逐步求精和模块化的概念,与抽象是密切相关的。随着程序开发工作的进展,在程序结构每一层次中的模块,表示了对程序抽象层次的一次精化。事实上处于程序结构顶层的模块,控制了程序的全部功能并且影响全局;在程序结构底层的模块,完成对数据的一个具体处理。用自顶向下由抽象到具体的方式分配控制,简化了程序的设计和实现,提高了程序的可理解性、可修改性和可测试性,使程序更容易维护。1.3.3 信息隐藏和局部化信息隐藏原理指出,在设计和确定模块时,应该使得一个模块内包含的信息(数据和操作)对于不需要这些信息的其他模块来说,是不能访问的。局部化的概念和信息隐藏概念是密切相关的。所谓局部化,是指把一些关系密切的程序元素物理地放得彼此靠近,处于同一局部区城内。在模块中使用局部数据元素是局部化的一个例子。显然,局部化有助于实现信息隐藏。“隐藏”意味着有效的模块化可以通过定义一组独立的模块来实现,这些独立的模块彼此间仅仅交换那些为了完成系统功能而必须交换的信息。如果在测试期间和以后的维护期间需要修改程序,那么用信息隐藏原理指导模块化系统设计就会带来极大好处。因为绝大多数数据和处理过程对于程序的其他部分而言是隐藏的(也就是“看不见”的),在修改期间由于疏忽而引入的错误传播到程序的其他部分的可能性就很小。1.3.4 模块独立模块独立原理是模块化、抽象、信息隐藏和局部化原理的直接结果和进一步发展。开发具有独立、完整功能而且和其他模块之间没有过多相互作用的模块,就可以做到模块独立。换句话说,应该这样设计程序结构,使得每个模块完成一个相对独立的特定子功能,并且和其他模块之间的关系尽可能简单。为什么模块的独立性很重要呢?主要有两条理由:第一,有效的模块化(即具有独立的模块)的软件比较容易开发出来。这是由于能够分割功能而且接口可以简化,当许多人分工合作开发同一个软件时,这一优点尤其重要。第二,独立的模块软件比较容易测试和维护。这是因为相对说来,修改设计和程序需要的工作量比较小,错误传播范围小,需要扩充功能时能够“插入”模块。总之,模块独立是好设计的关键,而设计又是决定软件质量的关键环节。模块的独立程度可以由两个定性标准量度,这两个标准分别称为耦合度和内聚度。耦合度衡量不同模块彼此间互相依赖(连接)的紧密程度;内聚度衡量一个模块内部各个元素彼此结合的紧密程度。在程序设计时应该追求尽可能松散耦合的系统。在这样的系统中可以研究、测试或维护任何一个模块,而不需要对系统的其他模块有很多了解。此外,由于模块间联系简单,发生在一处的错误传播到整个系统的可能性就很小。因此,模块间的耦合程度强烈影响系统的可理解性、可测试性、稳定性和可维护性。一般说来,如果两个模块彼此间通过参数交换信息,而且交换的信息基本上是数据,则这样的耦合是松耦合。内聚表示一个模块内部各个元素彼此结合的紧密程度,它是信息隐藏和局部化概念的自然扩展。简单地说,理想内聚的模块只做一件事情。设计时应该力求做到高内聚,通常中等程度的内聚也是可以采用的,而且效果和高内聚相差不多。但是,低内聚效果很差,不要使用。如果模块内所有元素属于一个整体,完成一个单一的功能,则称为功能内聚。这种内聚是最高程度的内聚。内聚和耦合是密切相关的,模块内的高内聚往往意味着模块间的松耦合。高内聚和松耦合都是进行模块化设计的重要标准,但是实践表明内聚更重要,应该把更多注意力集中到提高模块的内聚程度上。1.3.5 结构程序设计技术在把一个程序划分成若干个模块,并且确定了模块之间的关系之后,进一步的工作就是设计完成每个模块功能的处理过程。为了能开发出高质量的程序,必须充分注意下述事实:在软件的生存周期中,设计测试方案,诊断程序错误,修改和改进程序等都必须首先读懂程序。实际上对于长期使用的软件系统而言,读程序的时间可能比写程序的时间还要长得多。因此,衡量程序的质量不仅要看它的逻辑是否正确,性能是否满足要求,更主要的是看它是否容易阅读和理解。怎样才能设计出容易阅读、容易理解的程序呢?结构程序设计技术是实现这一目标的关键技术。结构程序设计的概念最早由E.W.Dijkstra提出。1965年他在一次会议上指出:“可以从高级语言中取消goto语句”,“程序的质量与程序中所包含的goto语句的数量成反比”。所谓goto语句就是转移语句。1966年C.Bohm和G.Jacopini证明,只用3种基本的控制结构就能实现任何单入口单出口的程序。这3种基本的控制结构是“顺序”、“选择”和“循环”,它们的流程图分别如图1.8(a)、图1.8(b)和图1.8(c)所示。流程图是描绘处理过程的一种常用图形,矩形框表示操作,菱形框表示条件,箭头线表明执行次序。 (a)顺序结构,先执行A再执行B (b)if-then-else型选择(分支)结构 (c)do-while型循环结构图1.8 3种基本的控制结构虽然从理论上说只用上述3种基本控制结构就可以实现任何单入口单出口的程序,但是为了实际使用方便起见,常常还使用do-until和do-case两种控制结构,它们的流程图分别如图1.9(a)和图1.9(b)所示。 (a)do-until型循环结构 (b)多分支结构图1.9 其他常用的控制结构如图1.8和图1.9所示可以看出,这几种控制结构有一个共同的特点,那就是每种结构都只有一个入口和一个出口,因此统称为单入口单出口的控制结构。那么,什么是结构程序设计呢?目前还没有一个被所有人普遍接受的定义,一个比较流行的定义为:结构程序设计是一种设计程序的技术,它采用自顶向下逐步求精的设计方法和单入口单出口的控制结构。关于逐步求精方法,N.Wirth曾做过如下说明:“我们对付复杂问题的最重要的办法是抽象,因此,对一个复杂的问题不应该立刻用计算机指令、数字和逻辑符号来表示,而应该用较自然的抽象语句来表示,从而得出抽象程序。抽象程序对抽象的数据进行某些特定的运算并用某些合适的记号(可能是自然语言)来表示。对抽象程序做进一步的分解,并进入下一个抽象层次,这样的精细化过程一直进行下去,直到程序能被计算机接受为止。这时的程序可能是用某种高级语言或机器指令书写的。”使用结构程序设计技术设计程序的主要好处如下:(1)自顶向下逐步求精的方法符合人类解决复杂问题的普遍规律,因此可以显著提高开发效率。(2)用先全局后局部、先整体后细节、先抽象后具体的逐步求精过程开发出的程序有清晰的层次结构,因此容易阅读和理解。(3)不使用goto语句仅使用单入口单出口的控制结构,使得程序的静态结构和它的动态执行情况比较一致。因此,程序容易阅读和理解,开发时也较容易保证程序的正确性,即使出现错误也比较容易诊断和纠正。(4)控制结构有确定的逻辑模式,编写程序代码只限于使用很少几种直截了当的方 式,因此源程序清晰流畅,易读易懂而且容易测试。1.4 小结本章讲述学习面向对象程序设计所需掌握的基础知识。程序是在计算机上运行的,计算机是用程序解决实际问题的物质基础。本章首先简要地介绍了计算机硬件的基本结构,讲述了计算机的工作过程。计算机硬件本身并不知道如何解决实际问题,它只能在人的指挥下按照人的意图工作。因此,为了利用计算机解决实际问题,人们必须用计算机能够接受的语言和它通信,告诉它解决问题的具体方法,也就是必须事先编写好程序。通常,把程序及其相关文档资料称为软件。程序设计语言就是为了表达程序而由人设计出来的计算机能够接受的语言,它是用来表达用户意图指挥计算机工作的通信工具。也就是说,程序设计语言是人们用来向计算机传递信息的表示方法、约定和规则的集合。传统的程序设计语言是过程性语言,使用这类语言编写程序的主要工作,是设计解题过程,因此称为面向过程程序设计。用模块化、抽象、信息隐藏、局部化和模块独立等原理及结构程序设计技术指导面向过程程序设计,能够提高软件开发效率,增加软件的可理解性和可维护性。习题1简述运算器、控制器、内存储器、外存储器、输入设备和输出设备的功能。2简述计算机的工作过程。3试用机器语言和汇编语言分别编写计算表达式b24ac的程序(设a、b、c值分别为10、20和30)。4用结构程序设计技术设计解决下述问题的算法,并用流程图描绘你的算法:通过输入设备读入一批数,遇到读入的数为0则停止。分别计算读入的正数之和与负数之和。输出正数之和与负数之和。注意,有可能读入的第一个数就是0。
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!