PASCAL语言 吉林大学计算机科学与技术学院
第五章 流程控制
一、 程序结构 顺序结构 分支结构 循环结构
二、 顺序结构 BEGIN write('pleace input x:'); readln(x); 二、 顺序结构 BEGIN write('pleace input x:'); readln(x); f:=sin(x+x)/ln(x*0.3); p1:=(f+sin(x))/exp(x); END. 复合语句从语法意义上可以相当于一条语句
三、 IF语句 三、 IF语句 IF <布尔表达式> THEN <语句> 单分支IF PROGRAM examp(input,output); var letter:char; Begin writeln(‘请输入字母:’); readln(letter); writeln(‘输入字母:’,letter); if letter<>‘z’ then letter:=succ(letter); writeln(‘输入字母的后继:’,letter); End. 读入小写字母,打印之;并打印其后继字母,当z时打印z本身。
三、 IF语句 三、 IF语句 IF <布尔表达式> THEN <语句> ELSE <语句> 双分支IF PROGRAM examp(input,output); var letter:char; Begin readln(letter); writeln(‘输入字母:’,letter); if letter>‘m’ then letter:=succ(letter) else letter:=pred(letter); writeln(letter); End. 读入小写字母,打印之;字母表前一半的打印后继,字母表后半部分打印前驱
例子的另外一种形式 PROGRAM examp(input,output); var letter:char; Begin readln(letter); writeln(‘输入字母:’,letter); if letter>‘m’ then writeln(succ(letter)) else writeln(pred(letter)); End. 读入小写字母,打印之;字母表前一半的打印后继,字母表后半部分打印前驱
四、 IF语句注意事项 1、布尔表达式 2、关于‘;’ 3、双分支和单分支的关系 4、复合语句的利用
单分支和双分支的关系 PROGRAM examp(input,output); var letter:char; Begin readln(letter); writeln(‘输入字母:’,letter); if letter>‘m’ then writeln(succ(letter)); if letter<=‘m’ then writeln(pred(letter)); End. 读入小写字母,打印之;字母表前一半的打印后继,字母表后半部分打印前驱
复合语句的应用 PROGRAM examp(input,output); var letter:char; Begin readln(letter); writeln(‘输入字母:’,letter); if letter>‘m’ then begin writeln(‘后继字母是:’); writeln(succ(letter)); end; End.
五、 IF语句嵌套 三、 IF语句 如果a<b而且c=d则把y赋给x,如果a<b而且c<>d则把w赋给x如果a>=d则将z赋给x If a<b then if c=d then x:=y else x:=w Else x:=z
五、 IF语句嵌套 三、 IF语句 If b1 Then s1 Else if b2 then s2 If b1 Then s1 else s3 If b1 Then if b2 then s1 If b1 Then if b2 then s1 else s2 If b1 Then if b2 then s1 else s2 Else s3
Else和向上最近的if匹配 五、 IF语句嵌套 三、 IF语句 If b1 Then begin if b2 then s1 end Else s2
六、 CASE语句 三、 IF语句 一般格式 CASE 表达式 OF 常量表1 : 语句1; 常量表2 : 语句2; 。 常量表1 : 语句1; 常量表2 : 语句2; 。 常量表n : 语句n; END
CASE语句举例 计算分段函数:
CASE语句举例 PROGRAM examp(input,output); var a,b,c,x,y:real;; Begin readln(a,b,c,x); case round(x) of 1:y:=a+b*x+c*sqr(x); 2:y:=sqr(a*sin(b*x)); 3:y:=a-b*c/x; 4:y:=a*ln(abs(b+c/x)); end; writeln(y:12:3); End.
2、情况常量不必排序,也可以在同行并列,但不允许重复 5、CASE扩展:ortherwise或者else 3、情况语句只能一条,但可以是复合语句 4、CASE可以嵌套,也可以和IF嵌套等 5、CASE扩展:ortherwise或者else
三、 IF语句 CASE语句和IF语句的关系
七、 重复结构的三要素 循环体 循环条件 循环控制的方式
八、 重复结构的三种形式 WHILE-DO循环 REPEAT-UNTIL循环 FOR-DO循环
九、 WHILE 循环(当语句) 三、 IF语句 WHILE 布尔表达式 DO 语句 WHIILE和DO是关键字 语句可以是简单语句或复合语句
WHILE循环举例 PROGRAM exam(input,output); var i,j,k:integer; Begin readln(i); j:=1; k:=0; while j<=I do begin k:=k+j; j:=j+2; end writeln(k); End.
十、 REPEAT 循环 三、 IF语句 REPEAT 语句组 UNTIL 布尔表达式 REPEAT和UNTIL是关键字 语句组不需要BEGIN。。END
例子 PROGRAM exam(input,output); var i,j,k:integer; Begin readln(i); repeat k:=k+j; j:=j+2; until j>i writeln(k); End.
三、 IF语句 WHILE循环和REPEAT循环的关系
WHILE先发制人;REPEAT后发制人 WHILE亲复合语句;REPEAT排斥之 三、 IF语句 都是用条件控制重复次数 控制条件在循环体内得到修改 布尔表达式的TRUE和FALSE WHILE先发制人;REPEAT后发制人 WHILE亲复合语句;REPEAT排斥之
FOR 变量:=表达式1 DOWNTO 表达式2 DO 语句 三、 IF语句 FOR 变量:=表达式1 TO 表达式2 DO 语句 FOR 变量:=表达式1 DOWNTO 表达式2 DO 语句 变量必须事先定义;复合语句 变量必须是顺序类型,不许修改其值 表达式1和表达式2与变量必须相容
FOR循环举例(TO) PROGRAM exam(input,output); var i,j,k:integer; Begin readln(i); k:=0; for j:=1 to i do if odd(j) then k:=k+j; writeln(k); End.
FOR循环举例(DOWNTO) PROGRAM exam(input,output); var i,j,k:integer; Begin readln(i); k:=0; for j:=i downto 1 do if odd(j) then k:=k+j; writeln(k); End.
FOR循环再举例(TO) PROGRAM exam(input,output); var c:char; Begin for c:=‘a’ to ’z’ do if (ord(‘z’)-ord(c)) mod 2=0 then writeln(c) End.
FOR 循环之注意事项 变量的值不允许直接或间接改变 初值和终值不能形成区间 循环结束后循环变量无确切定义
十二、三种循环的关系 1、WHILE循环与REPEAT循环相似 区别在于先判断和后判断。 2、它们与FOR循环相比更擅长 处理不太规则、不确定次数 的循环。 3、FOR循环运行次数明显,适合 规律性强的循环。
认识和重视死循环的使用
枚举和子界类型
一、 枚举类型 三、 IF语句 一般格式 (标示符表) (red,yellow,blue) 一、 枚举类型 三、 IF语句 一般格式 (标示符表) (red,yellow,blue) (Spring,Summer,Autumn,Winter) (Sun,Mon,Tue,Wed,Thu,Fri,Sat) 穷举所有值的方法来定义的。 值称为枚举元素或者枚举常量。 值是有序的,从0开始自左到右递增。 类型定义 TYPE Color=(red,yellow,blue); Season=(Spring,Summer,Autumn,Winter); Week=(Sun,Mon,Tue,Wed,Thu,Fri,Sat);
三、 IF语句 一、 枚举类型 变量定义 VAR col:color; ss:season; wd:week; 合并形式 VAR 一、 枚举类型 三、 IF语句 变量定义 VAR col:color; ss:season; wd:week; 合并形式 VAR Col:(red,yellow,blue); Ss:(Spring,Summer,Autumn,Winter); Wd:(Sun,Mon,Tue,Wed,Thu,Fri,Sat); (不提倡使用)
三、 IF语句 例、 program exam(output); var wd: (Sun,Mon,Tue,Wed,Thu,Fri,Sat); begin for wd:=Sun to Sat do case wd of Sun:writeln(‘星期日’); Mon:writeln(‘星期一’); Tue:writeln(‘星期二’); Wed:writeln(‘星期三’); Thu:writeln(‘星期四’); Fri:writeln(‘星期五’); Sat:writeln(‘星期六’); end; end.
枚举类型的注意事项 3、变量说明中,同一类型不能以新类型出现两次 4、属于顺序类型,相应的操作都可以进行 1、值只能是标识符,数值和字符常量不可以(布尔可以) 2、同层类型定义中,一个值不允许出现在两个枚举类型中 3、变量说明中,同一类型不能以新类型出现两次 4、属于顺序类型,相应的操作都可以进行 5、不支持算术和逻辑运算 6、不能用read和write直接读写枚举类型的值 7、可以用做循环控制变量
错误举例 2、type p=(red,green,blue); q=(black,red,white); 3、var col: (red,yellow,blue); cou: (red,yellow,blue); 4、赋值相容 关系运算 前驱后继 (注意例外情况) 6、用if或者case语句来判断
二、子界类型 三、 IF语句 一般格式 常量一。。常量二 (又称子域类型) 1900。。2000 常量一。。常量二 (又称子域类型) 1900。。2000 上界是2000,下界是1900,基类型是整型,值域为1900-2000。 不能为实型。 下界不能大于上界。 下界和上界也可以用常量表达式。 类型定义 TYPE Week=(Sun,Mon,Tue,Wed,Thu,Fri,Sat); Month=1..12; Letter=‘a’..’z’; WorkDay=Mon..Fri;
三、 IF语句 二、枚举类型 变量定义 VAR m:month; l:letter; w:workday; 合并形式 VAR l:’a’..’z’; w:Mon..Fri; (不提倡使用)
三、 IF语句 将一个十进制数转换为8进制数,精确到10位小数点。 0.27 × 8 ------- 2.16 × 8 1.28 × 8 × 8 ------- 2.16 × 8 1.28 × 8 2.24 1.92
三、 IF语句 program exam(input,output); const max=10; type len=1..max;int=0..8;digit=‘0’..’8’; var num:real;l:len;i:int;d:digit; begin readln(num); write(‘0.’); for l:=1 to max do i:=trunc(num*8); d:=chr(ord(‘0’)+i); write(d); num:=num*8-I; end; end.
子界类型的特点 3、函数的使用同1,但值域可以突破自变量范围 4、read和write的使用依赖基类型 1、适用于基类型的运算也适用该类型的子界 2、赋值越界则程序出错。 3、函数的使用同1,但值域可以突破自变量范围 4、read和write的使用依赖基类型 5、基类型不允许是子界方式 Var max:900..1000;min:10..20; data:min..max; 6、子界类型可以节省空间,可以自动核查值域
三、类型相容 三、 IF语句 1、类型相同 var a,b:1..10; type data=1..100; var d1:data;d2:data; type data=1..100; ran=data; var d1:data;d2:ran; 2、变量的类型是另一个变量类型的子界 3、两个变量类型都是同一类型的子界
四、类型相容 三、 IF语句 1、类型相同 2、子界类型之间,不越界 3、实型与整型
谢谢大家!