第二节
情况语句与算术标准函数
如果有多种(两种或两种以上)选择,常用情况语句编程。
将前面[例2.1]改成用如下方法来处理。根据题意,付款计算可分为两种情况:
① Y=50*X (X>100)
② Y=80*X (X<=100)
显然,情况①与②的选择取决于X值。假设用N表示“情况值”,暂且先让N=2;
如果X>100则N=1;(此题中N的值只是1或2,且取决于X值)
Pascal
程序:
Program
Exam21_1;
Var X,Y,N:
integer;
Begin
Write('X=') ;readln(x)
; n:=2;
{ 先让n=2 }
if X>100
then n:=1;
{如果X>100则
n=1 }
Case n
of { 关于情况处理
}
1:
Y:=50*X;
2:
Y:=80*X;
end;
Writeln('Y=',Y)
;
Readln
End.
程序中的 Case─end
语句为情况语句,是多路分支控制,一般格式为:
Case
表达式 of
情况常量表1:
语句1;
情况常量表2:
语句2;
: :
情况常量表n:
语句n
end;
执行情况语句时,先计算Case后面表达式的值,然后根据该值在情况常量表中的“对应安排”,选择其对应的语句执行,执行完所选择语句后就结束Case语句;如果常量表中没有一个与表达式值对应的语句,则什么也不做就结束本Case语句。
Case
语句的另一种应用格式为:
Case
表达式 of
情况常量表1:
语句1;
情况常量表2:
语句2;
: :
情况常量表n:
语句n;
else 语句 n+1
end;
这种格式的前面部分是相同的,所不同的是:如果常量表中没有一个与表达式值对应的语句,则执行与else对应的语句,然后结束Case语句。
[例2.2]
对某产品征收税金,在产值1万元以上征收税5%;在1万元以下但在5000元
以上的征收税3%;在5000元以下但在1000元以上征收税2%;1000元以下的免收税。编程计算该产品的收税金额。
解:设x为产值,tax为税金,用P表示情况常量各值,以题意中每1000元为情况分界:
P=0: tax=0 (x<1000 )
P=1,2,3,4:
tax=x*0.02 (1000<=x<5000 )
P=5,6,7,8,9:
tax=x*0.03 (5000<X<=10000 )
P=10: tax=x*0.05 (x> 10000 )
这里的P是“情况”值,用产值x除以1000的整数值作为P,如果P>10也归入P=10的情况。Pascal语言用P=trunc(x/1000)取整计算,
Pascal程序:
Program
Exam22;
Var x,p
: integer;
Tax :
real;
Begin
Write('Number=') ;
readln(x) ;
P:=trunc(x/1000) ;
if P>9
then P:=10;
Case P
of
0 : tax:=0;
1,2,3,4 : tax:=x*0.02;
5,6,7,8,9 : tax:=x*0.03;
10 : tax:=x*0.05
end;
Writeln('tt=',tt:5:2)
;
Readln
End.
情况表达式的计算必须考虑到“全部”情况,不要有遗漏。如果情况常量表的“值”在某范围内是连续的,可将常量表写成:
n1.. n2:语句;
因此,上面程序中的情况常量表可以写成如下程序中表示形式:
Program
Exam22_1;
Var x,p:
integer;
tax: real;
Begin
Write('Number=') ;
readln(x) ;
P:=trunc(x/1000) ;
if P>9
then P:=10;
Case P
of
0
: tax:=0;
1..4 :
tax:=x*0.02; {
从1至4作为同一情况处理
}
5..9 :
tax:=x*0.03; {
从5至9作为同一情况处理
}
10 :
tax:=x*0.05
end;
Writeln('tt=',tt:5:2)
;
Readln
End.
程序中的trunc(x)为取整函数,是Pascal的算术标准函数之一。Pascal常用的算术标准函数有19个:
(1)
abs(x) 求x的绝对值(|x|);
(2)
exp(x) 求ex的值;
(e为无理数2.71828…)
(3)
frac(x)求x的小数部分;
(4)
int(x) 求x的整数部分(不舍入,函数值为实型);
(5) ln(x)
求以e为底的x的对数(log
ex );
(6)
odd(x) 判断x的奇偶数(当x为奇数时odd(x)值为true,否则为false);
(7)
ord(x) 求x的序号,结果为整型(x为有序类型量);
(8)
pi π值(3.1415926535897932…);
(9) pred
(x) 求x(有序类型)的前趋值;
(10)
succ(x) 求x(有序类型)的后继值;
(11)
random 随机函数,产生0~1的随机值;
(12)
random(n)产生0~n的随机数(n为word类型,先执行randomize,
才能得到随机整数);
(13)
round(x) 求x的四舍五入整数;
(14)
trunc(x) 求x的整数部分(截掉小数部分,结果为整型);
(15)
sqr(x) 求x的平方值(x2
);
(16)
sqrt(x) 求x的开平方根值(
);
(17) sin(x)
求x的正弦函数(x为弧度);
(18) cox(x)
求x的余弦函数(x为弧度);
(19)
arctan(x) 正切的反三角函数(x为数值);
习题2.2
1.运输公司计算运费时,距离(S)越长,每公里运费越低,标准如下:
如果S<250公里;运费为标准运价的100%
如果250公里<=S<500公里,运费为标准运价的98%;
如果500公里<=S<1000公里,运费为标准运价的95%;
如果1000公里<=S<2000公里,运费为标准运价的92%;
如果2000公里<=S<3000公里,运费为标准运价的90%;
如果S=>3000公里,运费为标准运价的85%;。请编计算运费的程序。
2.
输入考试成绩,如果获85分以上为
A等,获60分~84分为B等,60分以下为C等,编程输出考试等级。
3.
某车间按工人加工零件的数量发放奖金,奖金分为五个等级:每月加工零件数N
< 100者奖金为10元;100
< = N < 110者奖金为30元;110
< = N <120 者奖金为50元;120
< = N <130 者奖金为70元;N
> 130者为80元。
请编程,由键盘输入加工零件数量,显示应发奖金数。
|