〖语法分析〗
分情况语句适用于对一个条件的多种情况的响应。
格式:
case 表达式 of
标号1:语句1;
标号2:语句2;
……
标号n:语句n;
else 语句n+1
end;
case语句在使用时有几点要注意:
1. end与case对应;标号与语句之间用“:”分隔;else与语句之间不用分隔符。
2. 标号必须是一常量,其类型与表达式的类型一致
例1: 某全自动加油站a,b,c三种汽油的单价(元/kg)分别是1.50、1.35和1.18,也提供了“自己加”或“协助加”两个服务等级,这样用户可以得到5%或10%的优惠。编一个程序,用户输入加油量、汽油品种和服务类型(f-自动,m-自己,e-协助),然后计算应付款。
program pcase1;
var
oil,help:char;
kg,total:real;
begin
write('Enter the amount in kilograms(kg):'); readln(kg);
write('Which type of the gasoline(a,b,c):'); readln(oil);
wirte('Which type for service(f,m,e):'); readln(help);
case oil of
'a': total:=1.50*kg;
'b': total:=1.35*kg;
'c': total:=1.18*kg;
else writeln('Input Error!')
end;
{——————处理汽油的类型}
case help of
'f':;
'm': total:=total*(1-0.05);
'e': total:=total*(1-0.10);
else writeln('Input Error!')
end;
{——————处理服务类型}
writeln;
writeln('Total is ',total:10:2);
end.
3. 可以多个标号对应同一条语句
4. 语句可以是多个语句,但必须用语句括号(begin……end)括起
5. case语句也可以嵌套
例2:从键盘上读入年和月,输出该月有多少天。
program pcase2;
var
year,month,day:integer;
runnian:boolean;
begin
write('Enter year and month:'); readln(year,month);
case month of
1,3,5,7,8,10,12: day:=31;
4,6,9,11: day:=30;{————以上处理31天和30天的情况}
2:begin
runnian:=(year mod 400=0) or ((year mod 4=0) and (year mod 100<>0));
case runnian of
true: day:=28;
false:
day:=29;
end;
end; {————以上处理2月的情况:闰年28天,平年29天}
end;
end.
练习题:
1、编程模拟剪刀、石头、布游戏:用S表示剪刀,用R表示石头,用P表示布。规则是:剪刀剪布,石头砸剪刀,布包石头。游戏者分别把自己的选择输入,计算机给出结果。