PASCAL语言基础及基础训练 第 11 页 共 48页
值(BOOLEAN型),所有布尔运算也是表达式,可以赋给一个变量,也可以直接用输出语句输出。打印输出时,屏幕上就显示“false”或“true”。
第二节、条件语句
条件语句是用一个布尔表达式的值来决定程序的走向。即程序提供一个分支,由布尔表达式的值来决定程序究竞运行哪个分支。即程序已经不是顺序结构了,而是提供了一个分支结构。每次只可能运行其中的一个分支。如下图所示:
条件语句有两种格式:
1、if <布尔表达式> then <语句>;
2、if <布尔表达式> then <语句1> else <语句2>;
格式1的作用是:如果布尔表达式值为TRUE(即该条件满足),则运行语句,否则不运行任何语句。
格式2的作用是:如果布尔表达式值为TRUE(即该条件满足),由运行语句1,否则(即布尔值为FALSE,亦即条件不满足)就运行语句2。注意:只有条件语句结束时才有分号。
注意:如果条件语句中的分支语句不止一句,可用“begin……end;”来框住,加以区别。如:以下两个程序都为从键盘输入1个整数,打印出它的算术平方根。[例4、2]: Program q421; Var a:integer; Begin Readln(a); If (a<0) then Begin Writeln(?WRONG!?); End else Begin Writeln(a); Writeln(sqrt(a):8:2); End; End. Program q421; Var a:integer; Begin Readln(a); If (a<0) then Writeln(?WRONG!?) else Writeln(sqrt(a):8:2); End. FALSE 布尔表达式 TRUE 语句序列1 语句序列2 条件语句的嵌套:条件语句是可以嵌套的,例如: if a>0 then if a>1 then …… else …… else ….;
上述语句看起来无法理解,但如果我们把它改写为以下形式时,就一目了然了: if a>0 then begin if a>1 then begin …… end
else begin ……
11
PASCAL语言基础及基础训练 第 12 页 共 48页
end else begin …… end;
也就是说,第二个IF语句只是第一个IF语句中的一部分,即嵌入的一个IF语句。
例:输入一个年份,判断它是否闰年。我们知道,每四年中有一年是闰年,即有366天,而其余三年是平年,只有365天,而按照规定:1、如果哪一年的年份能被4整除,则该年一般为闰年;2、这样,每100年又会少一天,所以又规定如果该年能被4整除,又能被100整除,则认为该年不是闰年,而是平年;3、这样,每400年又会多出一天,所以又规定,如果哪一年能被400整除,则该年又是闰年。
由上可知:1980,1996,1984年均为闰年,1900年为平年,而2000年为闰年。 程序如下:[例4、3] Program q43; Var y:integer; Begin Readln(y); if (y mod 4=0) then begin if (y mod 100=0) then begin if (y mod 400=0) then begin writeln('run'); end else begin writeln('ping'); end; end else begin writeln('run'); end; end else begin writeln('ping'); end; end.
第三节、多分支语句
IF语句只能使程序有两个分支,当遇到需要有两个以上分支时,IF语句就很不适用了,这时我们可以用CASE语句,它能使程序有很多个分支。其效果如下图: 其格式为:
case 表达式 语句序列1 语句序列2 语句序列N ?? CASE 表达式 OF 常量1:语句序列1;
12
PASCAL语言基础及基础训练 第 13 页 共 48页
常量2:语句序列2; ??
常量N:语句序列N; else 语句序列N+1; END;
其中语句序列如果只有一句,可直接写在常量后的冒号后;如果语句序列有很多句,则应该用BEGIN??END加以框住。
CASE语句的作用是,根据表达式,表达式可以有多个值,分别对应于常量1、2等值时,就运行该常量后所对应的语句。
例:输入1到7之间的某个整数,打印出其对应的星期的英语名:[例4、4]: program q44; var n:integer; begin write(?n=?); readln(n); case n of 1:writeln(?Monday?); 2:writeln(?Tuesday?); 3:writeln(?Wednseday?); 4:writeln(?Thursday?); 5:writeln(?Friday?); 6:writeln(?Saturday?); 7:writeln(?Sunday?); else writeln(?WORNG!?); end; end.
例:输入一个学生的数值化成绩,把它转化为等级化成绩。即100-90是A,89-80是B,79-70是C,69-60是D,59-0是E。[例4、5]; Program q44; Var s:integer; G:char; Begin Write(?Input the score:?); Readln(s); Case s div 10 of 用S DIV 10这个表达式作条件; 10,9:g:=?A?; 当 S DIV 10等于10或9时,表示S是90至于100之 8:g:=?B?; 间的值 7:g:=?C?; 6:g:=?D?; else g:=?E?; end; writeln(s,? ?,g); end.
第四节、标号说明及转移语句
此节不用掌握
在几乎所有语言中,都有GOTO(转移)语句,其作用是当程序运行到该句时,自动转移到其指定的标号(行号)语句去执行。
说明语法:LABEL 标号; 如:LABEL 10,20;
13
PASCAL语言基础及基础训练 第 14 页 共 48页
转移语句用法:GOTO 标号; 例:[例4、5]: program q45; label 10; begin 10:
write(?*?); goto 10; end.
运行上述程序时,程序将在屏幕不停地打印出“*”,而不会停止,必须由用户按下CTRL+BREAK才能中断。
练习
1、 设X,Y,Z的值分别是FALSE,TRUE,FLASE。写出下列逻辑表达式的值:
not x and not y; true and x or y;
(x and z) or (z and y); x or z and y;
2、 编写一个程序,功能是从键盘输入一个整数,判断它是否二位数,如果是,就打印它,然
后结束程序,否则继续要求输入数。
3、 编写一个程序,功能是从键盘输入三个整数,打印出其中最大的一个值。
4、 编写一个程序,功能是从键盘输入1—12中的某一个数字,由电脑打印出其对应的月份的
英语名称。
5、 以下程序的功能是从键盘输入一个式子,它只有三个字符,第一个及第三个都是数字,中
间那个是运算符,程序能把它的结果打印出来。试在程序空中填上相应的语句。
注意:计算机是不懂得把输入的字符串进行计算的,我们必须自己动手把其中的数字转化成数值型的数据,这其中我们使用了VAL函数,如程序中的:Val(s[1],a,c),是把S字符串中的第一个字符转换为数值A,同时输出了一个错误代码C(其实对我们是没有用的)。 Var a,b,d:real; C:word; S:string[3]; 把S定义成三个字符的字符串; Begin Readln(s); Val(s[1],a,c); 把S串中的第一个字符转换为数值; ; 把S串中的第三个字符转换为数值; Case s[2] of 用S串中的第二个字符作为条件表达式; ?+?:d:=a+b; ?-?:d:=a-b; ?*?: ; ?/?:d:=a/b; end; writeln(s,?=?, ); end.
第六章、重复结构
重复结构就是循环结构,是指某些语句需要重复执行而设定的程序结构。在PASCAL语言中,共有三种重复结构语句,功能各有不同。
14
PASCAL语言基础及基础训练 第 15 页 共 48页
第一节、直到语句
直到循环语句的语法格式是: repeat
语句序列;(循环体) until 布尔表达式;
其作用是:重复执行语句序列(循环体),直到布尔表达式的值为TRUE为止。即,当执行完一次语句序列后,布尔表达式的值已经为TRUE了,这时循环将不会再被执行,而转向执行UNTIL语句以下的语句。
例:计算M=1+2+3+4+??,直到M的值大于5050为止。[例:5、1] var m,I:integer; begin m:=0; I:=0; Repeat I:=I+1; M:=m+I; Until m>5050; Writeln(I,? ?,m); End.
在上述程序中,我们使用了PASCAL中的两个作用强大的概念:累加和循环。
累加:我们在上述程序中没定了两个累加器:I,M。累加器初值我们在第一句中设定了为0,之后每次运行一次I:=I+1后,I的值就比原来大1。每运行一次M:=M+I后,M的值就被M+I所替代。
循环:这里我们使用的是直到循环,即重复执行循环体中的两个语句,直到M>5050这个条件满足为止(即这个布尔表达式的值为TRUE为止)。
上述程序运行后,会在输出屏幕上显示两个值:101 5151。即当I的值为101时,这时所算得的M的值为5151。亦即,1+2+3+??101=5151。
象上述这种X=1+2+3+??这种加法,我们就把它叫累加,这里的X就是累加器,一般初值为0。 而N=1*2*3*4*5*6*??这种乘法我们把它叫累乘,这里N就是累乘器,一般初值为1(为什么?)。 一般的:1*2*3*??N,我们把这个式子的结果叫做N的阶乘(N!)。如:4!=1*2*3*4。 例:计算12![例5、2] var I:integer; x:longint; begin I:=0; X:=1; Repeat I:=I+1; X:=x*I; Until I=12; Writeln(x); End.
当程序开始时,I的初值被定为0,X的初值被定为1(累乘器)。然而开始进入循环,每次I的值比原来增加1,然后再乘进X中去,直到I等于12时,最后一次把I乘进X后,这时I=12这个条件已经满足(I=12的值已经为TRUE),所以循环就被退出,而程序转向执行UNTIL以后的语句:WRITELN(X);。
请大家想一想,为什么X要定义为LONGINT型。
第二节、当语句
当语句的语法格式是:
15
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库PASCAL语言基础总成含题目(3)在线全文阅读。
相关推荐: