资源描述
第1章 RAPTOR程序设计基础 PART B,可视化计算,控制结构,程序员合理利用控制结构和控制语句,可以确定程序语句的执行顺序 这些控制结构可以做三件事: 1. 按照顺序执行某些语句; 2. 根据条件判断结果,跳过某些语句而执行其他语句; 3. 条件为真时重复执行一条或多条语句 主要介绍选择(Selection)和循环(Loop)命令,2,顺序控制,顺序逻辑是最简单的程序构造 本质上,就是把每个语句按顺序排列,程序执行时,从开始(Start)语句顺序执行到结束(End)语句,3,顺序控制,程序员为解决问题,必须首先确定问题的解决方案,该方案需要哪些语句,以及语句的执行顺序 因此,编写正确的语句以及确定语句在程序的何处放置是同样重要的 例如:当要获取和处理来自用户的数据时,必须先取得数据,然后才可以使用 如果交换一下这些语句的顺序,则程序根本无法执行 顺序控制在英语环境中被称为“and-then”结构,4,选择控制,当程序执行时,如果决策的结果是“Yes”(True),则执行左侧分支 如果结果是“No”(False),则执行右侧分支,5,选择控制,注意选择控制语句的两个路径之一可能是空的,或包含多条语句 选择控制结构在英语环境中被称为“if-then”结构,6,决策表达式,决策表达式(Decision Expressions)是一组值(常量或变量)和关系运算符的结合, 期望得到YES/NO这样的结果 关系运算符(=、 / =、 、 =),必须针对两个相同的数据类型值比较 例如,3 = 4或“Wayne“ = “Sam“是有效的比较,但3 = “Mike“则是无效的,7,关系运算,8,级联选择控制,9,循环控制,循环(loop)控制语句允许重复执行一个或多个语句,直到某些条件变为真值(True) 菱形符号中的表达式结果为“No”,则执行“No”的分支,这将导致循环语句和重复 要重复执行的语句可以放在菱形符号上方或下方 循环控制结构在英语环境中被称为“While-do”结构,10,循环测试,在循环语句中,究竟是先计算后测试,还是先测试后计算,或者在计算的过程中间进行测试? 前序测试(Pre-test) 后续测试(Post-test) 中序测试(Intermediate-test),11,删除图的Statement 2 Statement1为前置条件 Statement 3是主循环体 如果进入了Statement3,测试条件也必须由这一部分进行修改;,前序测试,12,中序测试,删除图中的Statement 1 Statement2是主循环体之一 而测试条件也是在Statement 2中产生 Statement3是主循环体之二,13,后续测试,删除图中的Statement 1和Statement3 Statement2是主循环体 而测试条件也是在Statement 2中产生;,14,输入验证循环之一,15,输入验证循环之二,16,计数循环,循环按特定的次数,来执行某个代码块 一个著名的缩写 I.T.E.M (Initialize, Test, Execute, Modify,初始化,测试,执行,和修改)表示可以用来检查一个循环计数器变量使用是否正确的基本过程,17,典型的循环错误,18,输入控制循环之一,19,输入控制循环之二,20,RAPTOR数组变量,数组是有序数据的集合。 一般数组中的每一个元素都属于同一个数据类型(数值、字符、字符串)。 数组最大的好处在于用一个统一的数组名和下标(index)来唯一地确定某个数组变量中的元素 由于下标值可以参与计算,这为动态进行数组元素的遍历访问创造了条件,21,RAPTOR一维数组的元素表示,形式一 形式二,22,一维数组的创建,数组变量必须在使用之前创建 所创建的数组大小由赋值语句中给定的最大元素下标来决定 第一次给values数组赋值: values7 - 3 结果如下图:,23,一维数组的扩展,第二次再给该数组赋值: values9 - 6 则将数组进行了扩展,得到的结果如下图:,24,二维数组的创建,创建二维数组时,数组的两个维度的大小由最大的下标确定 例如: numbers3,4 - 13 得到:,25,RAPTOR数组特性,RAPTOR并不强制每个数组的元素必须具备相同的数据类型 例如程序员可以将二维数组,设计成为类似像数据库那样的一种记录式结构,26,数组变量的应用,数组变量的好处来自数组符号允许RAPTOR在方括号内执行数学计算,27,什么是平行数组?,计算某个班级学员的一个学期4门课程的平均成绩。 应该如何保存参与计算的课程成绩 可以分别使用:computer,math,physica,history,而每个同学的编号,可以用做数组的下标,28,数组应用注意事项,在RAPTOR中,一旦某个变量名被用做数组变量,就不允许存在一个同名的非数组变量 RAPTOR数组可以在算法运行过程中动态增加数组元素;但不可以将一个一维数组在算法运行中扩展成二维数组,29,RAPTOR子程序与子图定义与调用,在计算机科学中,将实际问题抽象化是解决问题的关键要素之一 一项研究成果表明,人类的大脑平均只能同时积极关注约4件事情,大大少于以往研究所得的7件事情的结论 为了解决复杂的问题,必须能够研究问题的“主要方面(big issues)”,30,计算一个英文文章中,使用了“a”开头的单词的次数,一个英文单词的以特定字母开头,那么它的前面一定有空格 所以,判断一个空格后面是否跟了一个字母“a”,就可以找出一段英文中所有以a开头单词的使用次数,31,32,统计 “az” 字母开头单词数,解这个问题程序似乎只要把上个例子部分程序再复制、粘贴25次,做一点修改就可以解决问题 但是,为了使得设计的程序更加简练、具有更长久的生命力和更广泛的用途,可以将上一例中的程序改造成一个子程序,或者是一种抽象: 其功能就是“统计一个特定字母开头的单词,在一段文字中出现了多少次”,33,创建RAPTOR子程序,子程序如同一个加工厂,输入原材料,然后按设计要求处理原材料,输出产成品 子程序的原材料就是一些变量,例如(in:char),为统计子程序输入测试样本 子程序的产成品也是变量,例如(out: count),向调用它的程序返回统计结果 其中,in, out表示子程序的输入输出参数,34,子程序定义,子程序定义界面上的接口参数称为“形式参数” RAPTOR的子程序参数不得超过6个 子程序参数可以是单个变量,也可以是数组,35,一个设计完成的子程序,36,子程序的调用,如要调用子程序,可以通过调用语句并给子程序的接口赋予“实际参数”进行 实际参数的名与形式参数的可以不同 实际参数的数据类型则必须与形式参数的相同,37,38,自顶向下 vs 自底向上,先规划子程序,然后逐个实现,为自顶向下的设计方法 先实现各个子程序的功能,然后进行综合,为自底向上的设计方法,39,计算问题求解的一般过程,理解问题 制定计划 执行计划 回顾与总结,40,使用计算机进行问题求解,程序开发周期 分析问题 设计程序以解决问题 程序编码 程序测试,41,小结与回顾,本章的内容主要涉及程序设计的一般性概念,包括变量、常量、数据类性、表达式、赋值语句、输入、输出,分支、循环与决策,子程序定义与调用以及形式参数和实际参数等 由于RAPTOR是一种基本功能完备而又十分简洁的算法描述性程序设计环境,对于程序设计的入门学习,极为有利,42,小结与回顾,一般问题的求解过程属于常识范畴,本章之所以将其作为重要内容重新提出,完全是为了读者将这种感性的常识认识上升到理性 如果能够自觉地加以应用,并将其与程序设计与算法问题求解结合,将形成一种强大的问题求解技能,43,
展开阅读全文