第四课 基本语句(二)
§4.1 IF语句
If语句是一种分支结构,当条件成立时,执行A,否则执行B。 流程图表示: 是 条件 A B 否 是 A N-S图表示:
条件 B 否
1.IF-THEN形式
IF <条件> THEN <语句>
当IF后面的条件为真时,执行THEN后面的语句;当条件为假时,不执行THEN后面的语句,而顺序执行下一条语句。THEN后面的语句若多于一条,必须使用复合语句处理(用begin和end括起)。 【例】: 输入a ,b ,c三个数,打印出最大者。
program findmax; var a,b,c,max:real ; begin write (‘Please enter three number:’); readln (a,b,c); if a>b then max:=a {设a为最大} else max:=b; if c>max then max:=c;{比较之后保留最大数} writeln (‘The max num is:’,max:10:3) end. 按Ctrl+F9,执行后:
Please enter three number: 45 78 56 { 输入后按回车 } 按Alt+F5 查看输出:
The max num is: 78.000
2. IF-THEN-ELSE形式
x、y、result是实型变量; max:10:3是表示在10格的区域内靠右输出max的值,并保留3位小数点
IF <条件> THEN <语句1> ELSE <语句2>
当条件为真时,执行THEN后面的语句1;当条件为假时,执行ELSE后面的语句2。 【例】输入一个实数,若是负数输出x<0,若为正数输出x>0,否则输出x=0。 program sample; var x :real; begin
write(‘ x = ’); readln(x); if x < 0
then writeln(‘x<0’) else if x > 0
then writeln(‘x>0’) else write(‘x=0’); end.
显然IF-THEN语句是IF-THEN-ELSE语句的特殊情况。在这个例题中,还出现了IF-THEN-ELSE嵌套语句,在这种情况下,ELSE到底与哪一个THEN配对呢?
Pascal语言中规定ELSE总是与最接近的一个还没配对的THEN配对。因此,当使用时与这个规定有冲突的话,可以用begin和end括起来。 ★ 常见错误:
1.在THEN和ELSE之间多加了一个分号,例如把语句: if x>5 then y := 3*x+5 else y := 2*x+3;
错写成: if x>5 then y := 3*x+5; else y := 2*x+3;
因为加了分号以后,IF语句已经结束,而ELSE又不能作为另一个语句的开头,造成语法错误。 2.另一个常见错误是在THEN或ELSE包括几个语句时,未加begin与end构成复合语
句的形式,例如把语句
if x>0
错写成: then begin
if x>0 y := sqrt(1+x*x);
then y :=sqrt(1+x*x); z := sin(2*x);
z := sin(2*x); end; 它们的效果是不同的。
前者当x>0时,要执行两个语句,计算y和z;当x≤0时,什么都不执行。
后者当x>0时,执行计算y的语句;当x≤0时,不执行计算y的语句,当是无论x为何值,均要执行计算z的语句。 §4.2 CASE语句
这种语句是一种派生的多分支结构,适用于不同情况不同处理的多择一的情况
CASE <表达式> OF
<情况标号1> :<语句1>; <情况标号2> :<语句2>; ┇ ┇
<情况标号n-1> :<语句n-1>;
[ ELSE <语句n> ]; { [ ] 括起来表示可选项 } END;
其流程图如图所示:
表达式=情况标号 标号1 标号2 else 标号n-1 语句n-1 语句n true 语句1 语句2 …… 下一条语句 N-S图表示: 表达式 情况标号1 语句1 情况标号2 情况标号3 语句2 语句3 …… …… else 语句n 其中表达式的值必须是整型、字符型、布尔型及后面将介绍的枚举型和子界型,它的类型必须与情况标号的类型一致。情况标号表是一串用逗号隔开的常量。
当表达式的值等于某个情况标号时,就执行该情况标号后面所对应的语句;若表达式的值不等于任何一个情况标号,就执行ELSE语句,若没有ELSE语句就执行CASE语句的下一条语句。 ★ 常见错误:
1、情况标号写成逻辑判断式: case x of x<10 : …… x>20 : ……
……
2、缺了与case对应的end; 【例】 读下面的程序,试着理解程序。
program calculator; var x ,y ,result :real; oper :char; begin write(‘Input x , y , oper :’); readln(x,y); write(‘Input + or – or * or / :’); readln(oper); case oper of ‘+’:result := x+y; ‘-’:result := x-y; ‘*’:result := x*y; ‘/’: result := x/y; end; {注意这有个end与case对应哦} writeln(x:6:2,oper,y:6:2,‘=’,result:8:2); end. oper是字符型变量 读入一个字符 + 、- 、* 、/ 根据oper的不同,对x和y进行不同的运算 这是一个能对2个数进行加减乘除运算的程序,先输入2个数x和y ,再输入一个运算符号,程序将根据输入运算符的不同,对x和y进行相应的运算,最后输出运算结果。 按Ctrl+F9,执行后:
Input x , y , oper :15 3 { 输入后按回车 } Input + or – or * or / : + { 输入后按回车 } 按Alt+F5 查看输出:
15.00 + 3.00 = 18.00
再按一次Ctrl+F9,执行后:
Input x , y , oper :15 3 { 输入后按回车 } Input + or – or * or / : * { 输入后按回车 } 按Alt+F5 查看输出:
15.00 * 3.00 = 45.00
课后练习四:
1、 阅读下面程序,回答问题。
输入A、B两个数,求出其中较大一个数的平方。
program ex401; var a,b,c : integer ;
begin
readln (a,b); if abs(a)>abs(b) then c:=a*a else c:=b*b; writeln (c) end.
2、阅读下面程序,回答问题。
将学生的成绩(百分制)转换成A、B、C、D四个等级:
A-90分以上(含90分); B-70分以上(含70分),90分以下; C-60分以上(含60分),70分以下; D-60分以下; 输入学生成绩,输出该成绩对应的等级。
提示:将成绩x整除10,结果只有0、1、2、……9、10这几种情况;
program ex402; (1) grade是什么类型的变量: var score :integer;
_______________ grade :char;
begin (2) 输入:92 write (‘Input the student’ ’ s score : ‘); 输出 ________ readln(score); case score div 10 of 9,10:grade := ‘A’; 7,8:grade := ‘B’; 6: grade := ‘C’; 0..5: grade := ‘D’; end; writeln(grade); end. (3) 输入:69
输出 ___________
(4)输出提示信息
“Input the ……”时,总共输 出了______个 ’
(1) a,b,c 是什么类型的变量: _______________ (2) 输入: 5 6
输出 ___________ (3) 输入: -10 5
输出 ___________
3、试试自己编写程序。
(1)输入一个时刻的时、分、秒,请换算成秒数并输出。 提示:先判断输入的时、分、秒是否符合要求
(0<=时<24,0<=分、秒<60)
(2)求一个四位整数的各位数字之和。
输入:一个整数(1000~9999) 输出:各位数字之和 提示:先判断输入的数是否符合要求(1000~9999),若不符合,则输出‘Input Error’; 提取这个数的各位数字:个位数——这个数除以10的余数;
十位数——这个数除以100的余数,再整除10; ……
(3)铁路托运行李,从A地到B地,按规定行李不超过50公斤时,每公斤的托运费为0.15
元;如超过50公斤,超过部分按每公斤0.20元计算。
编一程序自动计算托运费,输入行李重量,输出托运费。
(4)某全自动加油站有a,b,c三种汽油,单
价(元/kg)分别是1.50、1.35、1.18。加油站提供了“自动”、“协助加”、“自己加”三个服务等级,选择“协助加”可获5%的优惠,选择“自己加”可获10%的优惠。
编一个加油计费程序,输入汽油品种、汽油量、服务类型(f-自动,e-协助,m-自己),然后输出应付款。
(5)打印某年某月有几天。
输入:年、月; 输出:天数
提示: ① 每年1、3、5、7、8、10、12这几个月每月有31天
② 每年4、6、9、11这几个月每月有30天 ③ 2月分两种情况:闰年29天,否则28天
* 闰年的条件:年数能被4整除,且不能被100整除(除非可以被400整除)。