1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,RAPTOR,程序设计基础,1,为什么要学习程序设计?,由于计算思维的核心之一是算法思维,同时算法思维也是计算机科学的精髓,而算法思维的实现离不开程序设计,所以对于计算思维的学习和认识,必须从程序设计开始,2,计算思维的根本内容,计算思维最根本的内容,即其本质(,Essence,)是,抽象(,Abstraction,),和,自动化(,Automation,),计算思维中的抽象完全超越物理的时空观,并完全用符号来表示,抽
2、象和自动化 行为将贯彻课程的始终,3,什么是可视化程序设计,?,可视化,(Visual),程序设计是一种全新的程序设计方法,,一般,可视化程序主要是指编译环境的可视化,;,程序设计人员利用开发环境本身提供各种可视化的控件、方法和属性等,像搭积木一样构造出应用程序的各种界面,典型的可视化程序设计环境如,Visual Basic,4,Visual Basic 6.0,界面,5,为什么要使用,RAPTOR,?,RAPTOR,(,the Rapid Algorithmic Prototyping Tool for Ordered Reasoning,-,用于有序推理的快速算法原型工具),是一种,基于流
3、程图的,可视化程序设计环境,为程序和算法设计的基础课程教学提供实验环境,使用,RAPTOR,设计的程序和算法可以直接转换成为,C+,、,C#,、,Java,等高级程序语言,这就为程序和算法的初学者铺就了一条平缓、自然的学习阶梯,6,使用,RAPTOR,的理由,可以在最大限度地减少语法要求的情形下,帮助用户编写正确的程序指令,程序,就是流程图,,可以,逐个,执行图形符号,以便帮助用户跟踪指令流执行过程,容易掌握,用,RAPTOR,可以,进行算法设计和验证,,从而使初学者有可能理解和真正掌握“计算思维”,7,RAPTOR,基本程序环境,基本界面,F5,:运行流程图,F10,:单步执行,显示执行结果
4、8,四种基本符号,/,语句,目的,符号,名称,说明,输入,输入语句,输入数据给,一个,变量,处理,赋值语句,使用,某些,运算,来,更改,变量,的,值,处理,过程调用,执行一组在命名过程中定义的,指令,输出,输出语句,显示,变量,的,值。,9,变量,变量(,variable,)表示的是计算机内存中的位置,用于保存数据值,在任何时候,一个变量只能容纳一个值,变量的初始值决定了变量的数据类型,在流程执行过程中变量的数据类型不能更改,但,变量的值可以改变,10,变量赋值过程,说明,X,的值,程序,当程序开始时,没有任何变量,存在,未定义,第一个赋值语句,,X,32,,分配数据值,32,给变量,X,
5、32,下一个赋值语句,,X,X+1,,检索到当前,X,的值为,32,,给它加,1,,并把结果,33,给变量,X,33,下一个赋值语句,,X,X*2,,检索到,X,当前值为,33,,乘以,2,,并把结果,66,给变量,X,66,11,RAPTOR,变量值的设置,基本原则:,任何变量在被引用前,必须,存在并被赋初值,变量的类型,由最初的赋值语句所给的数据决定,设置方法,通过输入语句赋值,通过赋值语句的中的公式运算后赋值,通过调用过程的返回值赋值,12,RAPTOR,数据类型,数值(,Number,):,如,12,,,567,,,-4,,,3.1415,,,0.000371,字符串(,String,
6、如“,Hello,,,how are you?,”,“,James Bond,”,“,The value of x is,:,”,字符(,Character,):,如,A,,,8,,,!,。,13,变量报错的原因,未定义引用,14,变量报错的原因,拼写错,15,不同类型的数据不可比较,16,字符串:用双引号括起来,字 符:用单引号括起来,RAPTOR,常量,RAPTOR,定义了四个常量(,Constant,),pi,(圆周率)定义为,3.1416,e,(自然对数的底)定义为,2.7183,true/yes(,布尔值,:,真,),定义为,1,false/no(,布尔值:假,),定义为,0,
7、17,输入,(Input),语句,输入语句的编辑(,Edit,)对话框,在提示文本框中说明所需的输入,在变量文本框中输入变量名,18,输入,(Input),语句,输入语句在流程图中显示的状态,运行时对话框,19,赋值语句(编辑),Set,文本框中输入 需要赋值的变量名。,To,文本框中输入需要执行的表达式,表达式可以是一个值或,一个公式。,20,赋值语句(显示),流程图中的赋值语句,21,表达式,可以是单个值,可以是常量或变量和运算符的组合。,例如:(,1,),x (3+9)/3,(,2,),x 3+(9/3),22,表达式计算的“优先顺序”,1.,计算所有函数的值,,2.,计算括号中表达式,
8、3.,计算乘幂,(,,*,),,,4.,从左到右,计算乘法和除法,最后,5.,从左到右,计算加法和减法。,23,运算符,逻辑运算,是一组值(常量或变量)和,关系,运算符,的结合,期望得到,YES/NO,这样的结果,关系运算符(,=,、,/=,、,、,、,=,),必须针对两个,相同的数据类型值,比较,例如,,3=4,或,Wayne=Sam,是有效的比较,但,3=Mike,则是无效的,24,关系运算,运算,说明,例,=,等于,3=4,结果为,No(false),!=,/=,不等于,3!=4,结果为,Yes(true),3/=4,结果为,Yes(true),小于,3 4,结果为,Yes(true)
9、小于或等于,3,大于,3 4,结果为,No(false),=,大于或等于,3=4,结果为,No(false),25,内置运算符和函数,数学运算,:,+,,,-,,*,,/,,,,*,(加、减、乘、除、乘方),rem,,,mod,,,sqrt,(求余,开平方),log,,,abs,,,(对数,绝对值),ceiling,,,floor,(向下取整,向上取整),26,内置运算符和函数,三角函数,:,sin,,,cos,,,tan,;,正弦,,,余弦,,,正切,cot,,,arcsin,,,ar,c,cos,;,余切,,,反正弦,,,反余弦,arctan,,,arccot,;,反正切,,,反余切
10、27,内置运算符和函数,random,,,伪随机数,Length_of,求数组元素个数,求字符串长度,28,过程调用语句,(,编辑,),编辑对话框,注意已有过程提示,29,过程调用语句(显示),过程调用分内置过程,子图,子程序;,内置过程、子图、子程序的调用使用同样的语句,但子图没有参数,内置过程或子程序需要参数,30,输出语句,执行输出语句将在主控(,Master Console,)窗口显示输出结果,必须用双引号,以便与变量区分,是否换行输出结果选中表示换行,31,输出语句的设计技巧,32,注释,注释本身对计算机毫无意义,并不会被执行。注释的目的是增强程序的可读性,帮助他人理解你所设计的程
11、序或算法,33,一个带注释的算法,注释的四种类型:,1.,编程标题,2.,分节描述,3.,逻辑描述,4.,变量说明,34,控制结构,程序员合理利用控制结构和控制语句,可以确定程序语句的执行顺序,这些控制结构可以做三件事:,1.,按照顺序执行某些语句;,2.,根据条件判断结果,跳过某些语句而执行其他语句;,3.,条件为真时重复执行一条或多条语句,主要介绍选择(,Selection,)和循环,(Loop),命令,35,顺序控制,顺序逻辑是最简单的程序构造,本质上,就是把每个语句按顺序排列,程序执行时,从开始(,Start,)语句顺序执行到结束,(End),语句,36,顺序控制,程序员为解决问题,必
12、须首先确定问题的解决方案,该方案需要哪些语句,以及语句的执行顺序,因此,编写正确的语句以及确定语句在程序的何处放置是同样重要的,例如,:,当要获取和处理来自用户的数据时,必须先取得数据,然后才可以使用,如果交换一下这些语句的顺序,则程序根本无法执行,顺序控制在英语环境中被称为“,and-then,”结构,37,选择控制,可能性,1,可能性,2,Statement 1,Statement,Statement 3,Statement 1,Statement 2b,Statement 3,当程序执行时,如果决策的结果是,“,Yes,”,(,True,),则执行左侧分支,如果结果是,“,No,”,(,
13、False,),则执行右侧分支,38,选择控制,注意选择控制语句的两个路径之一可能是空的,或包含多条语句,选择控制结构在英语环境中被称为“,if-then,”结构,39,级联选择控制,40,循环控制,循环(,loop,)控制语句允许重复执行一个或多个语句,直到某些条件变为真值(,True,),菱形符号中的表达式结果为“,No,”,则执行“,No,”的分支,这将导致循环语句和重复,要重复执行的语句可以放在菱形符号上方或下方,循环控制结构在英语环境中被称为“,While-do,”结构,41,循环测试,在循环语句中,究竟是先计算后测试,还是先测试后计算,或者在计算的过程中间进行测试,?,前序测试(,
14、Pre-test,),后续测试(,Post-test,),中序测试(,Intermediate-test,),42,删除图的,Statement 2,Statement1,为前置条件,Statement 3,是主循环体,如果进入了,Statement3,,测试条件也必须由这一部分进行修改;,前序测试,43,中序测试,删除图中的,Statement 1,Statement2,是主循环体之一,而测试条件也是在,Statement 2,中产生,Statement3,是主循环体之二,44,后续测试,删除图中的,Statement 1,和,Statement3,Statement2,是主循环体,而测试条
15、件也是在,Statement 2,中产生;,45,输入验证循环,46,输入验证循环,之二,47,(N=10),计数循环,循环按特定的次数,来执行某个代码块,一个著名的缩写,I.T.E.M(Initialize,,,Test,,,Execute,,,Modify,,初始化,测试,执行,和修改,),表示可以用来检查一个循环计数器变量使用是否正确的基本过程,48,典型的循环错误,49,输入,控制,循环,50,输入,控制,循环,之二,51,RAPTOR,数组变量,数组是有序数据的集合。,一般,分为一维数组和二维数组,数组最大的好处在于用一个统一的数组名和下标(,index,)来唯一地确定某个数组变量中
16、的元素,52,RAPTOR,一维数组的元素表示,形式一,形式二,53,数组的创建,数组变量必须在使用之前创建,所创建的,数组大小,由赋值语句中,给定的最大元素下标,来决定,,可以在算法运行过程中动态增加数组元素,扩展其大小。,第一次给,values,数组赋值:,values7 3,结果如下图:,54,一维数组的,扩展,第二次再给该数组赋值:,values9 6,则将数组进行了扩展,得到的结果如,下,图,:,但不能将一个一维数组扩展为一个二维数组。,55,二维数组的创建,创建二维数组时,数组的两个维度的大小由最大的下标确定,例如:,numbers3,,,4 13,得到:,56,RAPTOR,数组
17、特性,RAPTOR,并,不强制每个数组的元素必须具备相同的数据类型,例如,程序员可以将二维数组,设计成为类似像数据库那样的一种记录式结构,57,数组变量的应用,数组变量的好处来自数组符号允许,RAPTOR,在方括号内执行数学计算,58,什么是平行数组,?,计算某个班级学员的一个学期,4,门课程的平均成绩。,应该如何保存参与计算的课程成绩,可以分别使用:,computer,,,math,,,physics,,,history,,而每个同学的编号,可以用做数组的下标,59,数组应用注意事项,在,RAPTOR,中,一旦某个变量名被用做数组变量,就,不允许,存在一个同名的非数组变量,RAPTOR,数
18、组可以在算法运行过程中动态增加数组元素;但,不可以,将一个一维数组在算法运行中扩展成二维数组,60,RAPTOR,子程序与子图定义与调用,在计算机科学中,将实际问题抽象化是解决问题的关键要素之一,一项研究成果表明,人类的大脑平均只能同时积极关注约,4,件事情,大大少于以往研究所得的,7,件事情的结论,为了解决复杂的问题,必须能够研究问题的“主要方面(,big issues,)”,61,计算一个英文文章中,使用了“,a,”开头的单词的次数,一个英文单词的以特定字母开头,那么它的前面一定有空格,所以,判断一个空格后面是否跟了一个字母“,a,”,就可以找出一段英文中所有以,a,开头单词的使用次数,6
19、2,63,统计“,az,”字母开头单词数,解这个问题程序似乎只要把,上个例子,部分程序再复制、粘贴,25,次,做一点修改就可以解决问题,但是,为了使得设计的程序更加简练、具有更长久的生命力和更广泛的用途,可以将,上一例,中的程序改造成一个,子程序,,或者是一种抽象,:,其功能就是“统计一个特定字母开头的单词,在一段文字中出现了多少次”,64,创建,RAPTOR,子程序,子程序如同一个加工厂,,输入原材料,,然后按设计要求,处理原材料,,,输出产成品,子程序的原材料就是一些变量,例如(,in:char,),为统计子程序输入测试样本,子程序的产成品也是变量,例如(,out:count,),向调用它
20、的程序返回统计结果,其中,,in,out,表示子程序的输入输出参数,65,子程序定义,子程序定义界面上的接口参数称为“,形式参数,”,RAPTOR,的子程序参数不得超过,6,个,子程序参数可以是单个变量,,也可以,是数组,66,一个设计完成的子程序,67,子程序的调用,如要调用子程序,可以通过调用语句并给子程序的接口赋予“,实际参数,”进行,实际参数的名与形式参数的,可以不同,实际参数的数据类型则,必须,与形式参数的,相同,68,69,自顶向下,vs,自底向上,先规划子程序,然后逐个实现,为自顶向下的设计方法,先实现各个子程序的功能,然后进行综合,为自底向上的设计方法,70,计算问题求解的一般
21、过程,理解问题,制定计划,执行计划,回顾与总结,71,使用计算机进行问题求解,程序开发周期,分析问题,设计程序以解决问题,程序编码,程序测试,72,小结与回顾,本章的内容主要涉及程序设计的一般性概念,包括变量、常量、数据类性、表达式、赋值语句、输入、输出,分支、循环与决策,子程序定义与调用以及形式参数和实际参数等,由于,RAPTOR,是一种基本功能完备而又十分简洁的算法描述性程序设计环境,对于程序设计的入门学习,极为有利,73,小结与回顾,一般问题的求解过程属于常识范畴,本章之所以将其作为重要内容重新提出,完全是为了读者将这种感性的常识认识上升到理性,如果,能够自觉地加以应用,并将其与程序设计与算法问题求解结合,,将形成一种强大的问题求解技能,74,