好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

程序阅读的艺术.docx

6页
  • 卖家[上传人]:大米
  • 文档编号:495702671
  • 上传时间:2022-11-13
  • 文档格式:DOCX
  • 文档大小:29.43KB
  • / 6 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 程序的阅读1 几个问题1. 程序设计这门课很难吗?难在什么地方?2. 进入大学,要学会什么?学会做人;学会思维;学会知识3. 作为一个计算机科学的人材,应该具有什么样的能力?对于计算机科学与技术学科的人才来说,发展几个方面的专业能力是非常重 要的:⑴ 计算思维能力 抽象思维能力、逻辑思维能力⑵ 算法设计与分析能力⑶ 程序设计能力⑷ 计算系统的认知、分析、设计和应用能力2 程序的非物理特性按照唯物论的观点,人们认识事物是从感性认识再到理性认识,是先有感性认识 ,后 有理性认识然而,对于计算机程序设计来说,要获得感性认识是很难的所谓程序的非 物理特性就是没有直观性,或者 说直观性的程度极低计算机科学与技术学科的人都有这样的体会,当我们第一次学 习用一种(高 级程序设计)语言编写第一个程序时,我们会感到莫大的困难当一个老师教 学生学写每一个程序时,也感到困难重重而且这种困难要比我们去做一个基 本的物理、化学实验,去学习安装一台收音机要大得多另一个突出的例子是, 在本科学习阶段,操作系统原理和高级语言编译原理是两门最重要的专业课, 应该说受到了老师和学生广泛的高度重视因为这两门课程不仅对学习掌握基 本的系统很重要,更为学生真正开始建立系统的概念,形成计算机软件系统的 运行模型,掌握本学科的一些基本方法都有具有重要的意义。

      但是,实际情况 告诉我们,对大多数学生来说,当他们学过这两门课后,并不能马上真正掌握 这两类系统其根本原因是程序的非物理特性,这便使得计算机的初学者很难 建立起计算机系统的有效模型,而这种模型没有建立起来之前,进行程序设计 是很困难的这里的程序包括微程序在内的硬件系统的一些执行程序这种现 象在其它学科是不存在的例如,轮子、火箭是看得见、摸得到的,其发动机 的运转、动力的传递也是清晰的直观性给了人们获得感性认识的基础,这是 符合人类认识的第一阶段的基本要求的而计算系统的运行却是看不见的由 于很难获得感性认识,所以理性认识就很难建立起来如何克服程序 的非物理特性给我们学习程序设 计带来的困难?或者说 ,如何跨越 程序的非物理 特性在我们获得程序设计的理性 认识过程中所造成的障碍?所以,克 服了初期困难的人都有这样的经验,要想 构造一个计算机(软件、 硬件)系统,设计者首先需要在自己的头脑中形成这个系统,并让这个系统在 自己的头脑中运行起来而且系统的复杂性还在于要求我们让这个系统在不同 的抽象级别上运行,同时还需要让它的子系统分别运行由于这些运行是在头 脑中运行的,所以,高度的抽象思维和严密的逻辑思维是本学科特别强调的思 维能力。

      3 程序阅 读的 意义对于计算机程序的阅读,克努特曾说过: 通过阅读他人的计算机程序获 得技 巧,是极其重要,但在 许许多多的计算机课程中这样的训练却可悲地被忽视了,因 此 导 致了 计 算机 极其 糟 糕地 低 效的 使用 学习一种计算机程序 设计语言,不 管是汇编语 言还是高级语 言,一个重要 而 又常用的方法就 是阅读: 阅读书 中的例题,阅读别人写的程序,更多的是阅读自已 写的程序就程序本身的意义来 说:一个程序是“被阅读”的首先是 被计算机阅读, 这是毫无疑义的,但更多是被人阅读的 这时人充当了机器的角色,也 就是说, 人要和机器阅读程序一样,给出每个语句(每条指令)执行的结果让人 去完成机器 的工作,这对于人来说是十分艰苦的事 情但是,只有通过阅读,才能 加深对各 种语句的语法和语义的理解,才能在后 续的学习中,正确、灵活地运用 语句,编 写出高质量的程 序因此, 阅读是学习 一种高级语 言的重要方 法程序阅读的过程,其 实就是在我们的头脑中形成计算系统并 让这个系统运行 起来的过程很显然,这是一件很艰苦 的工作因为这项工作,需要严 密的逻辑 思维能力和高度 抽象的思维 能力——计 算思维能力 。

      特 别是对于初学者) 因此,这也 是培养和发 展我们的计算 思维能力的一个过程4 阅读的 方法阅读的目的是为 了分析程序中的语句是如何实现算法 的对于一些较为复杂 的程序,如果一开始就 去分析每一 个语句的功 能,就很容易掉进"迷宫",因此,在 分析一个程序时,应该先分析程序的结 构,然后再对每个结构中的语句 逐一进行 跟踪阅读,具体 来说如下:1. 程序结构 的分析程序结构的分析应符合结构化程序设计的原则我们知道,C语言是一种结 构化程序设计语言,它只包含三种基本结构: 顺序、选择、循环,每种结构只有一 个 入 口和 一 个出 口而各 个 结构 之间 的 连接 方式 有 两种 : 积 木式 的 连接 和嵌 套 式的 连接积木式的连接是: 一个结构的出口与另一个结构的入口的连接; 嵌套式的连 接是: 在一个结构的内部嵌套另一个结构一般来说,我们应先分析出程序中积木 式连接的各个结 构,然后再 找出这些结 构中的嵌套 式连接的结 构分析程序结 构时可以借 用一些工具, 如 N_S 图、伪代码等 , 即根据源程序 画出能反映程序结构的N_S图,或写出等效的伪代码这是一个与编程过程刚 好 相 反的 过 程。

      2. 语句的跟 踪阅读对于顺序结构的语句, 阅读是不成问题的而对于选择结构的语句, 由于与 我们平时所用的自然语言比较一致,也不是太大的困难,关键在于,当有两个选 择结构连接时, 采用积木式的连接与采用嵌套式连接的差别是很大,有时甚至使 得程序运行的结果截然相反, 关于这一点,可阅读第 2章循环结构是三种结构中最为复杂的一种,对这种结构的跟踪阅读可以用列表 的方法, 将循环过程中各语句执行的结果一一列出例 1.1 求两个 正整 数的最 大公约 数我们还是从有名的欧几里德算法说起欧几里德 算法】El.[求余数]以n除m并令r为所得余数(0<=m,0>m>>n;while (n!=0){ r=m%n;m=n;n=r;}cout<< “gcd=”<

      因此程序的积木式结构如图 1.11. 输入m, n的值2. 循环结构计算n的值当n=0 ,循环结束3. 输出计算结果m图 1.1这个程序只有积木式的结构, 关键是分析循环结构的执行过程, 即对循环体 内的语句逐一进行跟踪阅读,直至循环条件不成立例如: 当输入20, 12时(即 m=20,n=12) , 分析程序执行的过程如下:初始状态 : r=?,m=20,n=12执行过程循环条件n!=0TTTF循r=m%n840环m=n1284 (结果)体n=r840例 1.2 分析 下面程序的积木 式结构和嵌套式结 构 main(){int i , n, sum; cout<<"input a digtal: "; cin>>n;sum=0;i=1;while ( sum<=n){if (i%2!=0) sum=sum+i; i++;} cout>>"sum=">> sum>>endl;}程序的积木式结构如图 1.21.输入n的值2.循环结构:计算sum3.输出计算结果sum图 1.2再来分析程序的嵌套式结构第2个"积木"是一个循环结构,其中嵌套了一个选择结构,嵌套式的连接如下:2.1 初始状态2,3 循环体2.2 循环条件图 1.3读者可仿照例1.1 方法,自行分析上述的循环结构, 看看程序执行的过程是 怎样的, 实现什么样的功能。

      阅读的过程是艰苦的, 初学者对此可能不十分习惯 但是这是学习一种计算 机程序设计语言所必须掌握的方法,这是必须经历的过程, 企图绕开这个过程, 寻找别的捷径是不可能的5 几位计 算科 学大师 的话1. 王选数学基础好、逻辑思维严密的人,一旦掌握了软件设计和编程的基本方法和技巧后, 就能制造出结构清晰、高效率和可靠的软件系统;而一个思维不严密和推理能力差的程序 员,即使有多年的编程实践,往往仍不能很好地完成任务2. 狄克斯特拉(Edsgar Wybe Dijstra)1972年获奖的Edsger W.Dijkstra,在祖国荷兰获数学和物理学学士,理论物理博士 学位在他2000 年退休前一直是美国 Taxas 大学的计算机科学和数学教授发现了以他名 字命名的图论中的最短路径算法但他获得图灵奖的主要原因却是发明了 ALGOL 这一第二 代编程语言一个高水平的程序员应该一开始就避免故障的引入,而不应该把大量的时间放在程 序调试上 Dijkstra 一贯主张把科学的思维引入系统设计和程序设计中,这也是他鼓吹 的结构程序设计的目的之一《程序设计的教学就是思维方法的教学》 ( The Teaching of Programming i.e.theTeaching of Thinking)Dijkstra 的主要贡献是在 20 世纪50 年代末到70 年代初,也就是他20 多岁到40 岁出 头这段时间成的。

      回忆这些过去时的成就是想强调:洞察力对于一个科学家是何等的重要! Dijkstra 获图灵奖以后,软件领域又涌现出图形用户界面、面向对象技术等一系列新的里 程碑,因特网更是带来一个全新的时代但是 30 年前 Dijkstra 关于程序可靠性的一些名 言至今仍有意义:“有效的程序员不应该浪费很多时间用于调试程序,他们应该一开始就不要把故障引 入程序测试是表明存在故障的非常有效的方法,但对于证明没有故障,测试是很无能 为力的Dijkstra 大力鼓吹程序正确性证明,但这一方法离实用还有相当距离,因为一段源程 序的正确性证明的文字往往比源代码还要长,所以充分的软件测试今天仍不可或缺但是 程序员的科学训练是十分重要的有人曾做过一个实验:一个题目由一批印度程序员编程, 其结果惊人地相似;而由一批中国程序员来做,编出程序五花八门中国的软件人员有时 把创造性放在不恰当的地方只有规范的科学的编程,一个大项目才能得到有诳的管理, 其质量才能保证3. 克努特(D.Knuth)1968年,美国的一位年青的计算机科学家克努特(D.Knuth)写下了他那部有名 的长篇巨著一一《计算机程序设计的艺术》他因此获得了 1974年的图灵奖。

      在 这部厚厚的、被人们称之为“计算机的圣经”的著作中, 他说的第一句话是:为一台数字计算机编制程序的过程是饶有趣味的,因为它不但具有 经济和科学价值,而且也是犹如赋诗或作曲那样的美学实践。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.