第二章 顺序结构PPT讲稿.ppt
第二章 顺序结构第1页,共32页,编辑于2022年,星期二第二讲 顺序结构第2页,共32页,编辑于2022年,星期二2.1.1 赋值语句 变量代表的是一个存储单元,其值是可变的,那么其中的值是怎么提供的,又是怎么改变的呢?可以通过赋值语句来进行。1、赋值语句的格式 变量名:=表达式;其中“:=”称为赋值号。2、执行过程 计算机先计算赋值号右边表达式,然后将表达式的值赋给左边的变量。如:a:=(9*8)-(2-1);a:=b;a:=a+1;第3页,共32页,编辑于2022年,星期二2.1.2 算术表达式算术表达式的定义算术表达式的定义pascal语言中的算术表达式是由符合pascal语法规定的运算对象(包括常量、变量、函数)、算术运算符、圆括号组成的有意义的式子,如:a+3.14159*5/8.4-Abs(-1123)。算术运算符算术运算符常用的算术运算符有以下六个:(加)(减)(乘)(实数除)得到结果为实型.如5/2=2.5,4/2=2.0而不等于2。DIV(整除)DIV它要求除数和被除数均为整型,结果也为整型。如10 DIV 2=5,10 DIV 3=3,5 DIV 10=0.-15 DIV 4=-3。DIV运算只取商的整数部分,参与DIV运算的两个对象不能为实型。mod(求余),也只能用于整数运算,结果为整数。例如:10 mod 4=2,-17 mod 4=-1,-4 mod 3=-1,即 a mod b=a-(a div b)*b。第4页,共32页,编辑于2022年,星期二(3)运算优先顺序运算优先顺序如果一个表达式里出现两个或两个以上的运算符,则必须规定它们的运算次序。pascal规定的运算优先级别为(与数学中规定的一样):表达式中相同优先级的运算符,按从左到右顺序计算;表达式中不同优先级的运算符,按从高到低顺序计算;括号优先级最高,从内到外逐层降低;在算术运算中运算符的优先顺序与数学上的四则运算一致,即“先乘除后加减”(注:“MOD”、“DIV”运算的优先级与“”、“/”相同)。例:教材P13 表2-1 序号1、5、8第5页,共32页,编辑于2022年,星期二(4)Pascal的常用数学函数的常用数学函数 abs(取绝对值),(取绝对值),sqr(平方),(平方),sin(正弦),(正弦),con(余弦),(余弦),arctan(反正切),(反正切),exp(以(以e为底的指数),为底的指数),ln(自然对数),(自然对数),trunc(取整),(取整),round(四舍五入)。(四舍五入)。(5)运算、标准函数表运算、标准函数表括号括号 函数函数 not */div mod and +-or =,=,=,第6页,共32页,编辑于2022年,星期二2.2.1 输入语句一、一、输入语句输入语句 在程序中变量获得一个确定的值,固然可以用赋值语句,但是如果需要赋值的变量较多,或变量的值经常变化,则使用本节介绍的输入语句读语句,将更为方便。读语句是在程序运行时由用户给变量提供数据的一种很灵活的输入动作,它有两种格式:1.输入语句的格式:输入语句的格式:read(变量变量1、变量、变量2、);readln(变量变量1、变量、变量2、);功能:从标准输入文件(默认对应着键盘)中输入数据,并依次赋给相应的变量。说明:执行到输入语句时,系统处于等待状态,等待从键盘上输入数据,系统根据变量的数据类型判断输入内容是否合法,如果不合法则提示106格式错误。在输入数值型(整型或实型)数据时,数据间用空格或回车分隔开。read语句是一个接一个地输入数据,在执行完本条read语句(读完本语句中变量所需的数据)后,下一个输入语句接着从该行中的下一个数据继续读取数据,也就是说光标不换行。readln语句是read+line的缩写,意思是为括号中的变量赋完值后立即换行,如果有下一条输入语句,只能从下一行开始读取。第7页,共32页,编辑于2022年,星期二例:设a,b,c为整型变量,将他们的值分别赋为10,20,30,写出对应下列语句的所有可能的输入格式。1、read(a,b,c);2、readln(a,b);read(c).(1)102030(2)1020 30(3)10 2030(4)10 20 30第8页,共32页,编辑于2022年,星期二2.2.2 输出语句 输出语句的作用是将程序运算的结果输出到标准输出文件(默认显示器屏幕)。一个程序可以没有输入,但肯定要有输出。1、write语句语句格式:Write(表达式1,表达式2,);输出语句中的输出项可以是变量、常量、表达式和字符串。如:write(1,2,3,4);write(1.2,3.4,5);write(My name is Liping);2、writeln语句语句格式:Writeln(表达式1,表达式2,)或writeln第9页,共32页,编辑于2022年,星期二2.2.3 输出语句的功能计算机执行到输出语句时,将括号中的输出项一个接一个地输出到屏幕上,如果输出项是表达式,那么先计算出表达式的值再输出其结果。Write语句与writeln语句格式上相似,但它们在功能上有所不同。两个语句的区别在于:write语句将其后括号中的表达式一个接一个输出后,没有换行。而writeln语句则在输出所有输出项后换行。例如:write(1,2,3,4);write(5,6);输出为:输出为:123456writeln(1,2,3,4);write(5,6);输出为:输出为:123456第10页,共32页,编辑于2022年,星期二2.2.4 带格式的输出语句 在pascal语言中输出数据时是可以按照设定的格式进行输出。整数的默认输出形式为十进制数形式;实数的默认输出形式是科学记数法形式(如果不想用科学记数法输出而用小数形式输出,要自己另行定义)。事实上,输出语句中的每个输出项中的表达式之后可以加上格式说明,若输出项后没有加格式说明,则数据按系统默认的格式输出。默认的输出格式默认的输出格式pascal语言为整型量、实型量、布尔型量和字符串(用一对单引号括起来的字符序列)规定了每种数据所占的宽度(即一个数据占几列),一个数据所占的宽度称为场宽或字段宽。系统给出的隐含场宽称为标准场宽。每一种pascal版本给定的标准场宽不尽相同。下表给出标准pascal和pc机上两种pascal版所规定的标准场宽。数据类型 标准pascal Turbo pascalinteger 10 实际长度real 22 25布尔型 10 4或5字符串 串长串长第11页,共32页,编辑于2022年,星期二 在Turbo Pascal系统中,对于整型字符串的输出都是按数据本身长度输出,对于布尔型数据(只有True和False两种值),TRUE为4列,FALSE为5列,一律采用大写输出。而real型数据的输出时,则按25列输出,其中第一列为符号位,正号不显示,后6列为“Ennnn”,中间的18列为尾数部分。如:writeln(sqrt(75);则输出8.6602540378443865E+0000。writeln(sqrt(81);则输出9.0000000000000000E+0000。有时,在程序中往往根据实际情况,需要自己定义场宽。第12页,共32页,编辑于2022年,星期二指定场宽指定场宽在输出语句中输出项含有格式符号时,就是为了指定输出项的场宽。指定场宽指定场宽.格式:write(表达式:n)或writeln(表达式:n),其中n为自然数,指定单场宽后,所有数据不再按标准场宽输出,而按指定场宽输出。若数据实际长度小于指定场宽时,则一律“向右靠齐,左补空格”。如write(1234:8,abcdef:12)输出结果:1234abcdef对于实型数据指定单场宽时,如果场宽大于标准场宽(25列)时,右靠齐按标准场宽格式输出25位,左边补空格;若指定场宽小于标准场宽时,第一位仍为符号位,最后六位仍为“Ennnn”,中间部分为尾数显示部分;如果指定场宽小于10位,则设置的场宽无效。第13页,共32页,编辑于2022年,星期二指定双场宽指定双场宽输出项是实数时,如果希望输出的实数不用科学记数法输出,而用小数形式输出,可以用指定双场宽方法输出,双场宽只适用于实数的输出。双场宽输出格式为:write(实型表达式:m:n),其中m和n都是自然数,m 用以指定整个数据所占的宽度,n指定输出实数的小数位数。如如:write(sqrt(75):9:4);输出:8.6602如果双场宽指定中m小于n+2,则m无效,按保留n位小数的最少位数输出。如如:write(sqrt(75):5:4);要使小数点后有4位数字,而总场宽为5,是不可能的(因为还有一个小数点,小数点前面还有一个数字)。它最低限度要有6列,即输出为:8.6602第14页,共32页,编辑于2022年,星期二例例1:某仓库5月1日有粮食100吨,5月2日又调进20吨,5月3日卖出库存的3分之二,5月4日又调进库存的3倍粮食,问该仓库从5月1日到5月4日期间每天的粮食分别是多少吨?(输出每天的库存量)分析:在这个问题中,主要要描述从5月1日到5月4日期间仓库的粮食库存量,且易知它是不断变化的。因此我们可以用一个变量A来描述仓库的粮食库存量。程序可写如下:Program ex1;Var A:integer;Begin A:=100;Writeln(5/1:,A);A:=A+20;Writeln(5/2:,A);A:=A div 3;writeln(5/3:,A);A:=A*4;writeln(5/4:,A);Readln;End.第15页,共32页,编辑于2022年,星期二第16页,共32页,编辑于2022年,星期二2.3.1 常量 常量是指在程序中使用的一些具体的数、字符、字符串和布尔值。在程序运行过程中,其值不能被更改。如123,145.88,my name is,true等。(1)整型数:如3,-5,0等。(2)实型数:如3.1,-6.1E+2(科学计数法)。(3)字符串:是用单引号括起来的一串字符,如Book,96.5,。在字符串内有单引号时要用两个连续单引号表示,如输出B,可表达成writeln(B)。第17页,共32页,编辑于2022年,星期二2.3.2 常量的定义 一个常量可以直接调用(如124,A),也可以给常量取个名字,用一个标示符代表它,这就是常量定义,例如:cost=60;name=Li Ping。代表常量的标识符又称为常量标示符。常量定义要放在以const开头的常量说明部分。常量说明部分的格式:const =;=;=;const是保留字,表示常量说明部分,其后可以有若干条常量定义语句,这些常量定义语句之间用分号“;”隔开。第18页,共32页,编辑于2022年,星期二例如:const cost=60;a=-cost+30;p=3.1415926;black=;name=My name is LiPing;由上例可见常量可以是数、字符或字符串,也可以是表达式。Free Pascal对常量定义有如下要求:(1)常量定义要放在程序说明部分;(2)必须遵守先定义后使用的原则 (3)常量一经定义,执行部分不得更改它的值,否则编译错误。Free Pascal中预定义了如下几个常量标识符,这些常量可以直接在程序中使用。pi=3.1415926535897932maxint=32767 maxlongint=2147483647false=布尔假,true=布尔真第19页,共32页,编辑于2022年,星期二例:已知半径r,求圆的周长及面积。program ex2_10;const r=3.6;var c,s:real;begin c:=2*pi*r;s:=pi*r*r;writeln(c=,c:10:2);writeln(s=,s:10:2);end.第20页,共32页,编辑于2022年,星期二2.3.3 变量说明 变量代表了一个存储单元,其中的值是可以变的,故称为变量。如游戏中玩家命的条数最初为3,当你死了一次命减少一条,这里命的条数就是一个变量(或者说命的个数存储在一个存储单元中)。变量有三个要素是:变量名、变量类型、变量值。变量有三个要素是:变量名、变量类型、变量值。一个程序中可能要使用到若干个变量,为了区别不同的变量,必须给每个变量(存储单元)取一个名(称为变量名),该变量(存储单元)存放的值称为变量的值,变量中能够存放值的类型为变量的类型。例如 游戏中用于存储“命”的变量,在游戏程序中的名字可取为life,它的类型为整型,游戏初始时这个变量的值为3。1变量名变量名用一个合法的标识符代表一个变量。如n,m,rot,total 等都是合法变量名。在程序中用到的变量必须在说明部分加以说明,变量名应遵循自定义标识符的命名规则,并注意“见名知义”的原则,即用一些有意义的单词作为变量名。“自定义标识符”的命名规则为:自定义标识符必须以字母(包含下划线“_”)开头,后面的字符可以是字母或数字。标识符长度不超过63个字符。第21页,共32页,编辑于2022年,星期二2变量的类型变量的类型常量是有类型的数据,变量在某一固定时刻用来存放一个常量,因此也应有相应的类型。如整型变量用来存放整数,实型变量用来存放实数。3变量说明变量说明在程序中若要使用变量、变量的名称及类型在程序的变量说明部分应加以定义,变量的值则在程序的执行部分中才能赋给。变量说明部分的一般形式:变量说明部分的一般形式:VAR ,:;(中括号内部分表示可省,下同)其中VAR是pascal保留字,表示开始一个变量说明段,每个变量标识符或由逗号隔开的多个变量标识,必须在它的冒号后面说明成同一类型。一个程序中,可以说明许多不同类型的变量,每种类型变量之间用分号隔开,共用一个VAR符号。第22页,共32页,编辑于2022年,星期二例如例如:var a,b:integer;x,y:real;ch:char;f:boolean;一旦定义了变量,就确定了它的类型,也就是说,就确定了该变量的取值范围和对该变量所能进行的运算。第23页,共32页,编辑于2022年,星期二2.4.1 整型(integer)一个整型数据用来存储整数,整数包括正整数、负整数和零。整型常量采用我们平常使用的十进制整数表示。如138,0,-512等都是整型常量,而18.或18.0都不是整型常量。pascal中有一个标准标识符Maxint,它代表Pascal系统中整型类数据的最大值,而最小的整型数即为Maxint-1。Free Pascal支持五种整型,每一种类型规定了相应的取值范围以及所使用的存储空间(字节数)。参加教材参加教材P24 表表2-6第24页,共32页,编辑于2022年,星期二2.4.2 实型(real)实型常量包括正实数、负实数和实数零。pascal中表示实型常量的形式有两种。十进制表示法十进制表示法这是人们日常使用的带小数点的表示方法。如3,0.0,+5.61,-8.0,-6.050等都是实型常量,而0.和.37都不是合法的实数。科学记数法科学记数法科学记数法是采用指数形式的表示方法,如1.25105可表示成1.25E+05。在科学记数法中,字母“E”表示10这个“底数”,而E之前为一个十进制表示的小数,称为尾数,E之后必须为一个整数,称为“指数”。如-1234.56E+26,+0.268E-5,1E5是合法形式,而.34E12,2.E5,E5,E,1.2E+0.5都不是合法形式的实数。和整数相比,实数能表示的范围大得多,但值得注意的是实数的运算整数的运算速度慢且无法像整数那样精确表示,只能近似表示。Free Pascal支持五种整型,每一种类型规定了相应的取值范围、所使用的存储空间(字节数)以及能达到的精度(有效位数)。参加教材参加教材P25 表表2-7第25页,共32页,编辑于2022年,星期二2.4.3 字符型(char)在Pascal语言中,字符常量是由单个字符组成,所有字符采用ASCII编码,共有128个字符(见表2-8)。在程序中,通常用一对单引号将单个字符括起来表示一个字符常量。如:a,A,0等。特殊地,对于单引号字符,则要表示成4个单引号。在ASCII字符集中,按每个字符在字符集中的位置,将每个字符编号为0127,编号称为对应字符的序号(也称作ASCII码)。Pascal提供的字符类操作函数有:(1)predator(前导),succ(后继)predator(b)=a,succ(b)=c (2)ord(取字符序号),chr(将序号转字符)ord(a)=97,chr(97)=a (3)upcase(小写转大写)第26页,共32页,编辑于2022年,星期二2.4.4 布尔型(boolen)布尔型常量仅有两个值,真和假,分别用标准常量名true和false表示。它们的序号分别为1和0。用于布尔量的运算有布尔运算符(或称逻辑运算符),他们是:and(与)、or(或)、not(非)和xor(异或)。第27页,共32页,编辑于2022年,星期二2.5 顺序结构程序设计实例例例1:有三个小朋友甲乙丙。甲有50粒糖果,乙有43粒糖果,两有13粒糖果。现在他们做一个游戏。从甲开始,将自己的糖分三份,自己留一份,其余两份分别给乙与丙,多余的糖果自己吃掉,然后乙与丙也依次这样做。问最后甲、乙、丙三人各有书多少粒糖果?分析:分析:这个问题中我们关心的是在游戏过程中每个小朋友的糖果个数,且他们所拥有的的糖果数是在变化的。因此可用a,b,c三个变量分别存放甲乙丙三个小朋友在某一时刻所拥有的糖果数。对于每人,分糖后,他的糖果数一定为原来的糖果数 div 3(因为分糖过程糖果的数目不一定都刚好分完,用整除恰恰可以表示多余的糖自己吃掉)。而其他两人则增加与这个小朋友现在拥有的一样的糖果。第28页,共32页,编辑于2022年,星期二程序可写如下:程序可写如下:program ex2;var A,B,C:integer;beginA:=50;B:=43;C:=13;初始时每个小朋友所拥有的糖果数A:=A div 3;B:=B+A;C:=C+A;甲小朋友分糖果后,每个人拥有的糖果数变化情况B:=B div 3;A:=A+B;C:=C+B;乙小朋友分糖果后,每个人拥有的糖果数变化情况C:=C div 3;A:=A+C;B:=B+C;丙小朋友分糖果后,每个人拥有的糖果数变化情况writeln(A=,A,B=,B,C=,C);输出结果readln;end.注:注:上程序中倒数第三行中A=表示一个字符串(即用一对单引号括起来的一串字符),对于字符串,输出字符串的内容(引号不输出)。以上程序的运行结果为:A=51B=35C=16第29页,共32页,编辑于2022年,星期二例2:分钱游戏分钱游戏 甲、乙、丙三人共有24元钱,先由甲分钱给乙、丙两人,所分给的数与各人已有数相同;接着由乙分给甲、丙,分法同前;再由丙分钱给甲、乙,分法亦同前。经上述三次分钱之后,每个人的钱数恰好一样多。求原先各人的钱数分别是多少?分析分析设甲、乙、丙三人的钱数分别为A,B,C。用倒推(逆序)算法,从最后结果入手,按反相顺序,分步骤推算出每次各人当时的钱数:(在每个步骤中,各人钱数分别存在A、B、C中)步骤:A=8 B=8 C=8 这是最后结果的钱数,三人都一样多 步骤:A=A/2(=4)B=B/2(=4)C=A+B+C(=16)A,B未得到丙分给的钱时,只有结果数的一半;C应包含给A,B及本身数三者之和 步骤:A=A/2(=2)C=C/2(=8)B=A+B+C(=14)A,C未得到乙分给的钱时,只有巳有数的一半;B应包含给A,C及本身数三者之和 步骤:B=B/2(=7)C=C/2(=4)A=A+B+C(=13)C未得到甲分给的钱时,只有巳有数的一半;A应包含给B,C及本身数三者之和 步骤:输出A(=13)B(=7)C(=4)此时的A,B,C 就是三人原先的钱数 第30页,共32页,编辑于2022年,星期二程序可写如下:程序可写如下:Program Exam18;Var a,b,c:integer;Begin a:=8;b:=8;c:=8;对应于步骤 a:=a div 2;b:=b div 2;c:=a+b+c;对应于步骤 a:=a div 2;c:=c div 2;b:=a+b+c;对应于步骤 b:=b div 2;c:=c div 2;a:=a+b+c;对应于步骤 Writeln(a=,a,:4,b=,b,:4,c=,c);输出 ReadlnEnd.本程序语句的顺序很关键。此例用反推顺序(逆序),按步骤正确推算出各变量的值。当然,有的问题可按正序步骤编程,这类程序都称为顺序程序。Writeln语句的输出项含有(:4),这里的冒号用来指定该项显示所占宽度,此处是输出4个空格即(空格项占4格)。第31页,共32页,编辑于2022年,星期二常用命令的快捷方式 F3:打开文件 Alt+F3:关闭一个文件 F2:存储 F6:切换一个窗口 Ctrl+Insert:复制 Shift+Del:剪切 Shift+Insert:粘贴 Ctrl+Y:删除一行 Alt+Backspace:撤消 常用调试程序命令 F9:编译程序(按F9,程序有错误时光标会停在错误的地方)Ctrl+F9:运行程序 Alt+F5:查看程序运行结果 F7:单步执行 Ctrl+F7:加入程序运行时要查看的变量名 Ctrl+Break:中断程序运行 Ctrl+F2:重新执行程序第32页,共32页,编辑于2022年,星期二