ImageVerifierCode 换一换
格式:DOC , 页数:296 ,大小:1.59MB ,
资源ID:7656319      下载积分:10 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/7656319.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(pascal语言word版.doc)为本站上传会员【xrp****65】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

pascal语言word版.doc

1、 高 等 学 校 教 材 PASCAL程序设计语言 (一九九九年七月修订) 郝立中 张成现 高晓娟 陈向荣 张淑珍 宋安军 编 主编: 郝立中 内容简介 本书全面地介绍了PASCAL语言的有关概念及规则,介绍了用PASCAL语言设计计算机程序的一般方法。 本书适应于没有学过其它计算机语言的读者,编写尽量

2、深入浅出,兼顾了不同基础和能力的读者的需要。鉴于历史的经验,本书在介绍PASCAL语言的同时,特别注意培养科学的程序设计思想方法。 本书可以作为大专院校非计算机专业和计算机应用专业的教材,也可以供初学者作为自学的读物。同时,本书的内容尽量做到了一定程度的严格性和完整性,所以,在实际工作中还可作为备查的资料。 前 言 PASCAL语言是第一个体现结构化程序设计概念的计算机语言,因此它在60年代末70年代初的出现是程序设计语言发展史上的一个里程碑。 N. Wirth教授研制PASCAL时提出的目标中有两条: 一、提供一种可用的表示法,以便按照

3、系统化程序设计方法的新见解,以结构化的、精确的方式表达程序设计的基本概念和结构。 二、适用于课堂教学的特点,使程序设计的某些基本概念和技能得到系统的训练。 这些目标的实现,成了PASCAL语言的鲜明特色和突出的优点。因为这些原因,几十年来PASCAL一直被公认为一种理想的教学语言。尽管后来新的语言又出现了许多种,但人们普遍认为,PASCAL中包含着一般程序设计语言的基本概念。有了PASCAL的基础,必要时再学其它语言也是不难的。所以,多年来PASCAL语言一直是计算机专业的一门重要基础课。 近年来,随着计算机日新月异地普及,学习计算机语言的需要已不限于计算机专业,

4、而是扩大到了几乎所有专业的学生。这样一来,对教材就有了新的要求。 首先,教材必须适应不同基础和能力的读者的需要。为达到这一点,本书并没有在基本概念和基本方法上减少内容,而是注意从另外的方面降低难度。我们知道,实际的程序设计工作难以避免其复杂和繁琐,但是教材中的例题和练习假如都使读者陷入繁琐的枝节之中疲于奔命的话,他们就难以集中精力理解掌握基本概念和要领。因此,本书的例题编写力求其精,避免节外生枝的东西。同时为了在不增加负担的条件下拓宽思路,本书对某些有实际意义的问题给出同一问题的不同做法,并进行对比分析。 其次,几十年的历史表明,比起掌握一种语言的语法规则来说,更加重要的是

5、掌握科学的程序设计思想方法。然而计算机语言课的教材只能以主要篇幅讲述语言本身的规则,难以深入灌输科学的思想方法。因为这些思想的道理只有在掌握了语言并且接触过较大型的复杂程序后才容易讲清楚。这是一个矛盾。这个矛盾,对计算机专业的读者来说问题不大,因为他们在学了语言课之后,还可以在其它计算机课程中接受科学方法的训练。但非计算机专业的读者可能就没有这种机会了。如果在学习计算机语言课的过程中,自发地养成了一种不科学的思想方法和坏的程序设计习惯,那就不是我们的希望了。因此本书在这方面作了努力。我们觉得,除了应在课文中说明科学方法的意义以外,在这方面更重要的是,应特别注意在课文和例题里杜绝可能出现的反映不

6、科学的方法和不良习惯的毛病,以免无意中给读者树立坏的样板。在科学的思想方法中,我们首推抽象的方法。我们认为,抽象的能力是从事程序设计工作所需要的最重要的一项能力。 本书在上述两个方面照顾了非计算机专业读者的需要。同时,本书对PASCAL的概念、规则和程序设计原理的讲述并没有降低标准,而是尽量精确和完整。其目的有二: 一是希望本书不仅适用于非计算机专业,同时也适应计算机专业的要求。 二是本书不仅在初学时可用作教材,在实际工作中还可作为备查的资料。 按照后一目的,内容要求一定程度的严格性和完整性。当然,有些细节在初学时是不必注意的,在教学和阅读中可适当掌握,不作重点。

7、 我们力争做到,不论基础及能力较高或较低的读者,学习了本书之后都能有所提高。 本书的编写工作由张成现负责组织。各章的初稿编写者是:第一、二章,郝立中;第三、四、五章,高晓娟;第六、七、九章,陈向荣;第八章,张淑珍;第十、十一章,宋安军。最后由郝立中对全书进行了修改。 本版在一九九七年十月初版基础上作了部分修订。由于水平的限制,缺点错误在所难免,欢迎读者批评指正。 郝立中 于西北纺织工学院

8、 一九九九年七月 目 录 第一章 程序设计常识介绍 1 1.1 引言 1 1.2 计算机语言 2 1.2.1 机器语言 2 1.2.2 汇编语言 2 1.2.3 高级语言 3 1.2.4 “更高级”的语言 3 1.3 算法的描述和程序结构 4 1.3.1 自然语言 4 1.3.2 流程图 5 1.3.3 基本结构 5 1.3.4 结构框图 7 1.3.5 伪代码 8 1.4 程序开发的步骤 9 1.5 结构化程序设计方法简介 10 1.6 语法的形式化描述 12 1.6.1 语法和语义 12 1.6.2 语法图 13 1.6.3 Ba

9、ckus-Naur范式 14 第二章 PASCAL语言的基本常识 16 2.1 PASCAL语言的由来及其特点 16 2.2 程序的基本组成 17 2.3 词法记号及分隔符 19 2.3.1 基本字符 19 2.3.2 词法记号综述 20 2.3.3 特定符号──字符号及其它符号 20 2.3.4 标识符 20 2.3.5 预定义标识符 21 2.3.6 分隔符 22 2.4 数据类型的概念及预定义的数据类型 23 2.4.1 概述 23 2.4.2 实数类型real 24 2.4.3 整数类型integer 25 2.4.4 实数类型与整数类型的联系及比较

10、 27 2.4.5 字符类型char 28 2.4.6 布尔类型boolean 29 2.4.7 顺序类型综述 30 2.5 常量、变量和表达式 31 2.5.1 常量 31 2.5.2 变量 33 2.5.3 表达式 34 第三章 简单程序设计 38 3.1 PASCAL语句的分类 38 3.2 赋值语句 39 3.3 输出语句──写语句 42 3.3.1 输出语句(写语句) 42 3.3.2 write语句和writeln语句的区别和联系 44 3.3.3 输出格式 45 3.4 输入语句──读语句 49 3.4.1 输入语句(读语句) 49

11、3.4.2 read语句和readln语句的区别和联系 51 3.4.3 输入语句的内部实际实现过程 53 3.4.4 输入语句和输出语句的连用 54 第四章 逻辑判断及选择结构程序设计 55 4.1 复合语句 55 4.2 逻辑判断和逻辑运算 56 4.2.1 布尔类型的数据 56 4.2.2 关系运算和简单布尔函数 57 4.2.3 逻辑运算 57 4.2.4 带有逻辑运算的一般表达式 59 4.3 如果语句(IF语句) 60 4.3.1 如果语句的基本概念 60 4.3.2 IF语句内包含复合语句 62 4.3.3 IF语句的嵌套 63 4.3.4 综

12、合实例 69 4.4 情况语句(CASE语句) 74 第五章 循环结构的程序设计 79 5.1 WHILE语句 79 5.2 REPEAT语句 81 5.3 FOR语句 85 5.3.1 计数循环的概念 85 5.3.2 FOR语句的语法规定 85 5.3.3 例题 87 5.4 适用于循环程序的某些实际算法 91 5.4.1 递推 91 5.4.2 迭代法 96 5.4.3 尝试法 98 5.4.4 其它例题 100 5.5 多重循环 101 5.6 转向语句(GOTO语句) 109 5.6.1 标号和带标号语句 110 5.6.2 GOTO

13、语句 110 第六章 枚举类型和子域类型 114 6.1 定义新类型的一般方法 114 6.2 枚举类型 115 6.2.1 枚举类型的引入 115 6.2.2 枚举类型的定义和使用 116 6.2.3 枚举类型应用举例 119 6.3 子域类型 123 6.3.1 子域类型的概念和意义 123 6.3.2 子域类型的定义 124 6.3.3 子域类型的运算 125 6.4 类型间的相容关系 126 6.4.1 类型同一 126 6.4.2 类型相容 127 6.4.3 赋值相容 128 第七章 数组 131 7.1 数组概念的引入 131 7.

14、2 数组的定义及使用 131 7.2.1 数组的定义 131 7.2.2 数组变量的整体引用 133 7.2.3 数组成分的引用 133 7.2.4 应用举例 134 7.3 多维数组 148 7.3.1 多维数组的概念 148 7.3.2 多维数组的引用 149 7.3.3 应用举例 152 7.4 紧缩数组及其它紧缩构造类型 155 7.4.1 非紧缩存储与紧缩存储 155 7.4.2 紧缩数组 156 7.4.3 其它紧缩构造类型 157 7.5 字符串常量及字符串类型 157 7.5.1 字符串 157 7.5.2 串类型 157 7.5.3 实

15、例 159 第八章 子程序──过程和函数 163 8.1 PASCAL中的子程序概述 163 8.2 过程 165 8.2.1 过程的说明 165 8.2.2 过程的调用 166 8.3 函数 167 8.3.1 函数的说明 167 8.3.2 函数的调用 168 8.3.3 实例 168 8.4 值参数和变量参数 171 8.4.1 值形参和变量形参的语法格式 171 8.4.2 值参数和变量参数的作用 172 8.4.3 实参和形参的类型匹配 176 8.4.4 预定义过程和预定义函数的参数 177 8.5 标识符的作用域及变量的生存期 178

16、8.5.1 标识符的作用域 178 8.5.2 变量实体的建立和撤销 181 8.6 递归调用 183 8.6.1 递归子程序的概念及应用 183 8.6.2 递归子程序的运行 188 8.7 子程序的超前引用 194 8.8 子程序名作为参数 196 8.9 可调节数组参数介绍 200 8.10 函数和过程应用举例 201 8.11 小结 204 8.11.1 子程序的意义及抽象思想方法 204 8.11.2 子程序数据的传递 206 8.11.3 本章的学习方法 206 第九章 集合和记录 209 9.1 集合 209 9.1.1 什么是集合

17、209 9.1.2 集合类型的定义及其变量说明 210 9.1.3 集合构造符 210 9.1.4 集合的运算 211 9.1.5 集合的输入输出 213 9.1.6 应用举例 214 9.2 记录 217 9.2.1 普通记录的定义 217 9.2.2 记录的引用 219 9.2.3 开域语句 222 9.2.4 带变体的记录 225 第十章 指针和动态数据结构 230 10.1 指针和动态存储 230 10.1.1 指针的概念 230 10.1.2 指针类型及指针类型的变量 231 10.1.3 动态变量的创建和撤消 232 10.1.4 动态变量的引

18、用 232 10.1.5 指针变量的操作 233 10.1.6 程序举例 235 10.2 简单链表 238 10.2.1 简单链表的构成 238 10.2.2 简单链表的基本操作 239 10.3 其它结构的线性链表 250 10.3.1 循环链表 250 10.3.2 双向链表 252 10.3.3 双向循环链表 253 10.4 返回指针值的函数 254 第十一章 文件 257 11.1 文件的概念 257 11.2 一般二进制文件 259 11.2.1 一般文件类型及文件类型的变量 259 11.2.2 文件操作的一般步骤 259 11.2.

19、3 和文件操作有关的预定义过程和函数 260 11.2.4 程序实例 261 11.3 正文文件 263 11.3.1 什么是正文文件 263 11.3.2 正文文件的行结构及行结束函数eoln 264 11.3.3 正文文件的读写 266 11.3.4 预定义文件input和output 269 11.3.5 正文文件存放数值性数据应注意的某些问题 271 11.4 缓冲区变量及put和get过程 273 11.4.1 缓冲区变量 273 11.4.2 put(f)过程 273 11.4.3 get(f)过程 274 11.4.4 实例 274 11.5 综合

20、实例 275 附录A ASCII代码表 280 附录B Turbo PASCAL文件系统的特点 281 附录C 标准PASCAL语法汇集 282 ( vii ) 第一章 程序设计常识介绍 1.1 引言   本章是在讲述PASCAL语言之前,先向读者介绍一些有关程序设计的必要的基本知识。   什么是程序设计?N. Wirth曾经提出过一个著名的公式:       数据结构+算法=程序 换句话说,程序设计就是设计数据结构和设计算法。要利用计算机解决实际问题,必须分析该问题的数学模型,设计出解决问题所需要的数据结构和算法,将设计用计算机可以接受的形式描述出来并送入计算机

21、才能让计算机按我们的规定去求出所需要的结果。这种用计算机可以接受的形式描述出来的数据结构和算法就是程序。   有人对这个公式作了扩充,加进了如“程序设计方法”、“语言工具和环境”等等。这里“语言工具”就是指计算机语言,一种计算机语言提供一种计算机可以接受的描述形式。本书要讲述的PASCAL语言也就是一种“语言工具”。但是我们认为,能反映程序的本质的仍是N. Wirth原来的公式。因为其它东西仅仅是设计数据结构和设计算法所用的工具而已。打个不太严格的比喻,若将程序设计比作文学创作,那么像PASCAL这样的语言可以比作汉字和汉语的语法。虽然用中文搞文学创作不能不懂汉语,但是汉语和文学创作毕竟是

22、两门学问,总不能说学了汉语就算学了文学创作。因此,从这个意义上说,如果仅仅学了有关计算机语言的知识,离全面掌握程序设计还是存在相当距离的。   但这只是问题的一个方面。而另一方面,程序设计是一门发展中的学科。程序设计这一项工作随着计算机的问世很早就出现了,但早期的很长一段时间中并不存在一门现代意义上的“程序设计”课程。符合N. Wirth的公式的专门讲述设计数据结构和设计算法的课程在国外是六十年代末才出现的。而在此之前所有名之为“程序设计”的课程无不以讲述具体的计算机指令系统或语言为主要内容,而关于数据结构和算法的设计技巧只是在它的例题中体现出一些。换句话说,当时的“程序设计”课程也就相当于

23、现在的计算机语言课程。直到今天,许多讲述某种计算机语言的书籍仍在书名上冠以“程序设计”,也是沿用了这个习惯。 现在的计算机语言课程中,同样要在大量的例题中介绍解决实际问题的常用算法。这些例题涉及的内容当然不能与专门讲计算机算法的课程相比,但也足以使学生建立程序设计的某些基本思想。一个有独立思考能力的学生,有了这些思想,就已经可以解决许多实际的问题了。   特别是,本书的读者对象中还包括非计算机专业的学生。而非计算机专业的学生除了语言课以外,许多人没有机会另修专门的程序设计课程。所以,本书例题中介绍的各种算法对他们的意义更大一些。而且正因为如此,本书要有较多的篇幅介绍一般的程序设计思

24、想。 本书第一章介绍的某些思想,是基于程序设计工作的复杂性而提出来的。对于没有接触过复杂程序的初学者来说,这些思想不容易全部领会。可以先建立一个初步印象,然后,在经过一段学习和实践,有了一些经验后再回过头来进一步理解。 1.2 计算机语言   1.2.1 机器语言   计算机不能直接理解和执行人们使用的自然语言,而只能接受特别规定的指令。这些指令是由计算机的设计者规定的,一般是二进制的编码。这种指令称作机器指令。每一种类型的计算机都有一套机器指令系统。要让计算机解决某一特定的问题,需要选用指令系统中的指令组成程序。这样编写的程序称作机器语言程序。   机器指令随不同的机器而

25、不同。而且机器指令是代表机器可以直接执行的操作,通常是些最基本的操作,实际应用中的许多不算复杂的操作也常常需要很多条机器指令的组合才能实现。再加上二进制代码不符合人的阅读习惯,所以编写机器语言程序是一项相当繁重的工作。   不仅如此,程序设计过程中还经常需要修改,机器语言程序的修改更是困难。这是因为,机器语言程序对存储器的访问是按地址进行的,每一条机器指令,只要它的操作要访问存储器,其指令的代码中就要有一部分是反映地址的编码。这样,在修改程序时,只要某个变量或子程序等安排的地址变动了,则整个程序中所有要引用这个地址的指令代码都得修改。在机器语言程序设计过程中,为增、删一条指令而不得不修改大量

26、指令的事情是常常遇到的。 1.2.2 汇编语言   为了减轻机器语言程序设计过程中人的工作量,在计算机出现后不久,就有人开始致力于“程序设计自动化”的研究。这方面的第一阶段成果是引入了汇编语言。汇编语言,又称符号语言,是将二进制代码的机器指令换用一些容易被人记忆的记号(助记符)代表,同时它又允许使用标号(符号)代表地址或数据。   这样编写的程序文本还需要经过翻译,翻成机器语言程序才能由机器执行。这个翻译工作称作“汇编”。人们研制出了专门用来自动进行这一翻译工作的工具程序───“汇编程序”。汇编程序将人们用汇编语言编写的程序文本(称作源程序)当作输入数据读入,处理后输出一组代码,

27、就是翻译成的机器语言程序(称作目标程序)。   汇编语言阅读起来比机器语言省力多了,而且用标号代表地址,不需要程序员去具体计算地址,这样程序地址移动后重新修改各指令的地址码的繁琐工作可由汇编程序去自动完成,节省了程序员的大量劳动。   但是,汇编语言的指令仍然是和机器语言指令一一对应的,所以从某种意义上说它和机器语言没有本质的区别。用汇编语言编写程序从某种意义上说就是用机器语言编写程序,只是换了个写法而已。汇编语言和机器语言一般统称为低级语言。   具有不同机器指令系统的计算机也需要有不同的汇编语言和不同的汇编程序。解决同样实际问题的算法,要在不同的计算机上运行也需要编写不同的汇编语言源

28、程序。与机器语言程序一样,实际应用中的许多简单操作仍然常常需要很多条指令的组合才能实现,所以低级语言编写程序的篇幅往往是很大的。   用低级语言编写程序,需要了解该计算机的机器指令系统,因而也需要了解该计算机的内部结构,而且还需要考虑怎样用该机器的指令组成我们实际应用中所要求的操作的细节算法。所以,用低级语言编写程序对程序员的要求是比较高的。 1.2.3 高级语言   程序设计自动化方面的第二阶段成果是引入了高级语言,又称算法语言。第一个成形的高级语言是在50年代中出现的FORTRAN语言。后来在又出现了COBOL,ALGOL 60,BASIC 等语言。本书介绍的PASCAL语言

29、也是一种高级语言。到现在为止的几十年间,出于不同的需要和不同的考虑,人们开发了许多种不同的高级语言,有人统计,仅在 60 年代提出的就超过了200种。但是其中只有少数得到了广泛的应用。   高级语言采用符合人们习惯的形式(如数学公式)来描述算法。 如 FORTRAN 就是Formula Translator(公式翻译)的缩写。但鉴于实际问题中算法的复杂性,远非仅用普通的数学公式可以包括的,所以每一种高级语言中还分别规定了许多特有的表达形式。这些形式中使用某些英文单词和符合人们习惯的符号,其意义接近人的自然语言,便于人去阅读理解。   用高级语言编写的程序文本一般也需要经过翻译,翻成机器

30、语言程序才能由机器执行。这个翻译工作称作“编译”。专门用来自动进行这一翻译工作的工具程序称作“编译程序”。相对于编译程序,我们将用高级语言编写的程序文本称作源程序,将翻译成的机器语言程序称作目标程序。   对于高级语言编写的程序的处理,除了上述的编译方式外,还有另一种处理方式,称作“解释”。这种方式是:由“解释程序”将人们用高级语言编写的程序文本读入处理,但并不输出目标程序代码,而是由“解释程序”直接执行高级语言程序中规定的操作。也就是说,这是边翻译边运行的处理方式。这样做,将翻译和运行两道手续合而为一,有时可以简化操作,但边翻译边运行,运行的速度显然比直接运行目标程序要慢得多。   某些

31、高级语言如BASIC等多采用解释方式,而包括PASCAL 在内的另一些高级语言多采用编译方式。   可以这样说,低级语言是面向机器的语言,而高级语言是面向过程的语言。程序中规定的操作具体由哪些机器指令的组合来实现,则由编译程序自动去决定,高级语言的程序员可以不必考虑。同一个高级语言程序要用在不同类型的计算机上,只要经不同的编译程序处理,就可以生成适用不同机型的目标程序,源程序基本上可以不必改动。现在每一种通用的计算机系统在出厂销售时,大都已配置了该型号计算机上使用的各种常用高级语言的编译程序,所以说,高级语言基本上可以达到与具体机器无关。   高级语言的出现大大地提高了程序设计的工作效率。

32、但是与低级语言相比,高级语言又有两个缺点:一是灵活性差,难以利用具体机器特有的性能去实现一些非通用的功能;二是目标程序的效率低,这是因为由机器硬性地翻译所得到的目标程序,不可能达到人工直接编写的精炼程度。所以在某些要求高灵活性或高效率的软件(如快速过程控制程序,以及操作系统等系统软件)设计中,常常不得不使用低级语言编写程序。为了一定程度上减少这个矛盾,又出现了几种保留一定低级特性的高级语言,如C语言,FORTH语言等。 1.2.4 “更高级”的语言   纵观上面由机器语言到高级语言的发展,实际上是人们逐步解决“做什么”和“如何做”矛盾的过程。人们希望做到:只要指出“做什么”而不必具

33、体指出“如何做”,由计算机自动去解决“如何做”的问题。但是“做什么”和“如何做”是相对的,低层次上的“做什么”同时又成为高层次上的“如何做”。从低层次上看,计算机一出现,这个矛盾就在一定意义上解决了。因为我们可以编写一条机器指令而不必考虑这条指令该怎样完成,比如用加法指令让机器作加法而不必指出每一位该如何加。但是从高一些的层次上看这又远远不够了。因为高层的一个操作需要许多条机器指令才能完成,要列出每一条指令,还应该算是在描述“如何做”。高级语言的出现已在较高层次上解决了这个问题,但实际应用中问题的复杂程度是没有界限的,用高级语言编写程序的工作量仍然嫌大,所以人们又希望能在更高层次上解决“做什么

34、和“如何做”的矛盾。这就出现了若干“更高级”的语言,如所谓的“非过程化语言”、“人工智能语言”等等。这些语言目前尚无统一的概念和术语,而且往往只适用于特定的应用领域(如数据库管理),这里不详细介绍。 因为所谓“更高级”的语言目前尚无统一的概念,所以现在一般仍然认为计算机语言包括三类:机器语言、汇编语言、高级语言。 1.3 算法的描述和程序结构   前面已介绍了计算机语言,计算机语言就是一种可用来描述算法的形式。但是因为它的主要目的是供计算机处理,显得“严格有余,形象不足”,供人阅读理解时不是最理想的形式。特别是它不易表达抽象的粗略的算法思路,如初步的“概要设计”中的算法等。所以

35、人们又采用了若干种便于人理解的形式来描述算法。   1.3.1 自然语言   简单的算法可以直接用自然语言描述。例如根据系数求解一元二次方程的算法可以如下描述:    (1)输入系数a,b,c。    (2)计算b2-4ac赋值给d。 (3)如果d<0则转去执行(8),否则继续。 (4)计算(-b+)/(2a)赋值给x1。 (5)计算(-b-)/(2a)赋值给x2。 (6)输出x1,x2。     (7)结束。 (8)计算(-b)/(2a)赋值给r。 (9)计算/(2a)赋值给p。

36、 (10)输出r+pi,r-pi。     (11)结束。 输入系数a,b,c b2-4ad→d 否 是 d<0 (-b)/(2a)→r (-b+)/(2a)→ x1 (-b-)/(2a)→ x2 /(2a)→p 输出r+pi, r-pi 输出x1, x2 图1。1 求解一元二次方程算法的流程图   自然语言灵活通俗,但它有以下缺点:   一、比较冗长,且有时不如用符号表示形象简洁;   

37、二、不够严格,容易出现歧义性;   三、不容易说清楚包含分支、循环等的复杂操作流程。 1.3.2 流程图   另一种常用的描述形式是流程图,又称框图。它是用图形来表示算法的流程。   流程图中有多种图形符号,我们这里不作全面介绍,只介绍最常用的部分。一般流程图是若干个框用带箭头的线连接起来,每个框代表一个操作或判断,而连线则代表流程顺序。   常用的框有两种:一种是操作框,又称作处理框,画作矩形,框内写上要执行的操作。操作框有一个入口和一个出口。另一种是判断框,画作菱形,框内写上要判断的条件。判断框有一个入口和两个出口,出口处要标上哪个分支是条件成立时的去向,哪个分支是条件不

38、成立时的去向。   上面举的根据系数求解一元二次方程的算法若用流程图描述可以如图1.1。 1.3.3 基本结构 从上面的例子可以看到,实际的算法常常不是简单的步骤罗列,可能出现条件判断的分支。如果任意使用分支的办法来设计算法,可能使程序的结构变得非常复杂。 操作1 操作2 图1。2 顺序结构   现在人们认识到(见下面将介绍的结构化程序设计的思想)复杂化是一种有害的倾向。为了限制程序的复杂性,有人证明了:只要三种控制结构就能等效表达用一个入口和一个出口的流程图所能表达的任何算法。如果我们只用这三种结构而避免任意的分支,可以在一定程度上减少

39、程序的复杂和混乱。这三种控制结构一般称作基本结构,是:顺序结构、选择结构、循环结构(又称重复结构)。每一种基本结构本身都是只有一个入口和一个出口。   顺序结构的流程如图1.2所示。   选择结构的流程如图1.3所示。 选择结构还有一种变形如图1.4所示。 是 否 条件 操作2 操作1 图1.3 选择结构   图中“条件”一框出口处的“是”和“否”若反过来,并不改变结构的类型。显然,“是”和“否”若反过来,只要把条件换成其否定条件,则功能就和原来相同了

40、这里图中画的“是”和“否”的方向是按PASCAL中相应功能的构造型语句中的规定。下面各图也同样。 否 条件 是 操作 图1。4 选择结构的另一种   图1.3中的两个操作只要有一个是空操作就变成了图1.4,所以图1.4可以看作图1.3的特例。但是图1.4的机器编码可以比图1.3更简单,所以大多数语言都对图1.4 提供了单独的表达格式。   循环结构的流程有几种,其中最基本的一种称作当型(WHILE型)循环,其流程见图1.5。   循环结构的另一种常用的流程称作直到型(UNTIL型)循环,见

41、图1.6。 操作 条件 否 是 图1.6 直到型(UNTIL型)循环 条件 否 操作 是 图1.5 当型(WHILE型)循环   上述循环结构中的“操作”一框一般称作“循环体”。这两种循环相比,当型循环中假如一开始条件就不成立,则循环体就一次也不执行;而直到型循环中无论如何循环体至少执行一次。一般认为当型循环的程序逻辑较简单些,但是直到型循环的机器编码

42、较简单。   上述各基本结构中只包括一个或两个操作框,假如一个框只能代表一条简单操作,显然一个结构是不足以表达一个实际的程序的。为了表达真实的复杂程序,可采用嵌套的办法。就是说一个操作框代表的可以不是一条简单操作,而是又一个完整的基本结构。我们知道,每一种基本结构本身都是只有一个入口和一个出口,所以用它取代更大结构里的一个操作框是够条件的。嵌套的层次没有限制。例如单是顺序结构的多重嵌套就可以表达任意长的操作序列。各种结构的嵌套可以构成无限复杂的程序。   如果一个循环结构的循环体本身或其更内层嵌套的操作又是一个循环结构,则一般习惯将其称作多重循环。   循环程序执行中假如一直不满足结束循

43、环的条件(即上述当型循环图中条件一直为“是”,或直到型循环图中条件一直为“否”),程序就会无限次地循环下去,永远达不到出口。我们称之为“陷入了死循环”。一般科学计算等应用程序中,出现死循环应算是错误。为避免死循环,循环体中的操作应能使条件在有限步中发生变化,使程序能够结束。 操作 令i←i+1 令i←0 i≤100? 图1.7 计数循环一例 是 否   实际应用中常用到一种控制循环的方式,是:利用一个变量充当计数器,循环开始前先使该变量等于某个初值,循环过程中每执行一次循环体就使该变量改变一个固定的增量,以该变量的值超过某个终值作为循环结束的条件。这样构成的循环称作计数循环。计

44、数循环是一种简单的不会陷入死循环的循环控制方式。计数循环可以按当型来构造,也可按直到型来构造。例如,选变量i充当控制变量(即上述计数器),初值为0,终值为100,增量为1,用当型来构造计数循环,则流程如图1.7。  计数循环虽然可以算作普通循环(当型或直到型)的特例,但因其常用,所以大多数高级语言都对它提供了单独的表达格式,如PASCAL中的FOR语句。 在表达计数循环的格式中,习惯上将上述“操作”一框中的操作(不包括循环变量增量)称作循环体。 1.3.4 结构框图 前面介绍的普通流程图的主要优点是很直观,便于初学者掌握。从四十年代末到七十年代中期,流程图一直是软件设

45、计的主要工具。直到现在,尽管不少学派反对流程图,它仍然被广泛使用着。但是流程图有若干个重要缺点:   流程图往往掩盖问题的结构,而诱使程序员去考虑程序的流程。流程图不是逐步求精的形式,不易表达算法的层次,容易使设计者在全局结构尚未筹划清楚时就去直接写出大量细节,不符合抽象方法的要求。而且,它对流程线不加限制,有些程序员主观上想按基本结构设计算法,但因对概念理解不够,可能不知不觉画出违反基本结构的流程图。 既然人们提倡只用基本结构来设计算法,就希望能有一种直接表示基本结构的图形。用这种图形来描述算法,可以迫使设计者不采用非结构化的流程。

46、  条件 当〈条件〉 操作1 是     否 操作 操作 操作2 操作1 操作2

47、 直到〈条件〉  (1)顺序结构    (2)选择结构    (3)当型循环     (4)直到型循环 图1.8 用结构框图表示的基本结构 七十年代中有人提出了一种新的框图,我们称之为结构框图(N-S图,Chapin图)。 这种图省去了流程线,一个结构画成一个矩形框,结构内的操作框是包含在大框内的小矩形框。结构框图中基本结构的画法见图1.8。    输入系数a,b,c   b2-4ac→d

48、        d<0  否             是 (-b+)/(2a)→x1 (-b)/(2a)→r (-b-)/(2a)→x2 /(2a)→p 输出x1,x2   输出r+pi,r-pi 图1.9 求解一元二次方程算法的结构框图   只要将内部的操作框代之以一个完整的结构框图,就可以表达结构的嵌套。   前面举的根据系数求解一元二次方程的算法若用结构框图描述可以如图1.9。 对于计数循环,也可以画成类似当型循环的形式,只是在写条件的位置按照FOR 语句中的习惯写法标出计数循环

49、的各个要素。详见第五章的例子。 结构框图改进了普通流程图的缺点,但同时又在一定程度上减低了直观形象性。因此它在国外使用并不普遍。国外较多使用下面介绍的伪代码,而国内由于语言的原因伪代码使用较少,相对来说使用框图多一些。   1.3.5 伪代码   我们知道,大多数高级语言中都提供了各种基本结构的表示形式。如果不太要求流程的直观形象性的话,完全可以直接采用高级语言中规定的记号来描述算法。鉴于高级语言不易表达抽象的粗略的算法思路,可以将它与自然语言和习惯符号结合起来。这种形式就是伪代码。当然,基于不同的高级语言,可以有多种伪代码,也有人使用独立于各种高级语言的“伪代码语言”,目前并不

50、统一。   前面举的根据系数求解一元二次方程的算法若用伪代码描述可以如下: 输入系数a,b,c ; b2-4ac→d; IF d<0 THEN BEGIN (-b)/(2a)→r; /(2a)→p; 输出r+pi,r-pi END ELSE

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服