PASCAL语言程序设计(4)

2019-04-16 00:40

end;

writeln(a,' ',b); //输出运算结果 end.

例2-2 输入一个三位数的整数,将数字位置重新排列,组成一个尽可能大的三位数。 【样例输入】213 【样例输出】321

【分析】先用DIV、MOD结合分离出来整数的每一位数字,然后将这三位数字按照由大到小进行排序,然后把最大的作为百位数,次之作为十位数,最小的作为个位数即可。

【参考程序】 program aa;

var t,a,b,c,n:integer; begin

read(n);

a:=n div 100;

b:=n div 10 mod 10; c:=n mod 10;

if a

例2-3 小红开了一个花店,她规定凡在店里购花不超过50元时,按九折付款,如超过50元,不到200元,超过50元部分按七点五折收费,如果超过200元,超过200元部分,将按6折收费。现在她想请你帮她编一程序完成花店自动计费的工作。

【分析】根据题意,我们可以得到计费S的收费公式:

【样例输入】50 【样例输出】45.00 【参考程序】 program aa;

var p,s:real; begin

read(p); //输入应付款数

if p<=50 then s:=0.9*p //进行自动计费 else if p<=200 then s:=0.9*50+(p-50)*0.75 else s:=0.9*50+150*0.75+(p-200)*0.6; writeln(s:0:2); //输出实际付款数 end.

三、CASE语句 1.格式:

CASE语句又称为分情况语句,格式如下: case 测试表达式 of

情况标号1:语句1; 情况标号2:语句2; ??

情况标号n:语句n;

16 / 53

//可选项 end; 2.功能

(1)先计算出测试表达式的值,注意:这个测试表达式中不能含有trunc、round函数,测试表达式的值不能是实数。

(2)然后用测试表达式的值依次与各情况标号进行对照,当找到一个与测试表达式的值相匹配的情况标号,就去执行该CASE情况标号后面的语句块,然后跳到与CASE相对应的END后面的语句继续执行。

(3)如果找不到与之匹配的情况标号(若有ELSE则执行它后面的语句),退出CASE语句,执行它后面的语句。

例2-4 打印某年某月有几天。 【样例输入】2000 2 【样例输出】29 【参考程序】 program aa; var

y,m,d:integer; begin

read(y,m); //读入年和月 case m of

1,3,5,7,8,10,12:d:=31; 4,6,9,11:d:=30;

2:if (y mod 4=0) and (y mod 100<>0) or (y mod 400=0) //判断闰年布尔表达式

then d:=29 else d:=28; end;

writeln(d); //输出这个月的天数 end.

第三节 循环结构

一、计数循环

1.其语句格式是:

(1)for 控制变量:=初值 to 终值 do 一条语句;

(2)for 控制变量:=初值 downto 终值 do 一条语句;

其中for、to、downto和do是Pascal语言保留字,一条语句可以是一条简单语句或一条复合语句,但只能是一条语句,它适合用于能事先确定循环次数的事件。

2.执行过程

(1)先将初值赋给左边的变量(称为循环控制变量);

(2)判断循环控制变量的值是否已\超过\递增是大于,递减是小于)终值,如已超过,则跳到步骤(6);

(3)如果未超过终值,则执行do后面的那个语句(称为循环体); (4)循环变量递增(对to)或递减(对downto)1; (5)返回步骤(2);

(6)循环结束,执行for循环下面的一个语句。 3.注意事项

(1)for循环控制变量必须是顺序类型的变量,如整数,但不能是实数,也不能是8字节整型,如int64、qword等。

17 / 53

(2)for语句的循环体中不能修改循环控制变量,它将会自动增加或减少。 (3)break:中断当前所在的循环。

例2-5 输入n(0<=n<=200),计算从1累加到n之和。

【分析】设置一个循环变量初值为1,终值为n,重复进行n次加法的循环。每次将循环控制变量(I)的值迭加在S中,不断重复该过程,故当循环结束的时候,S变量表示的就是总和了。s:=s+i;这里的s称为累加器,它使用前要清0。

【样例输入】100 【样例输出】5050 【参考程序】 program aa;

var i,n,s:integer; begin

read(n); s:=0;

for i:=1 to n do s:=s+i; writeln(s); end.

例2-6 输入一个自然数x(x<=10000),求这个自然数的所有约数之和s。

【分析】如果某数i能被x整除,则有x mod i=0,要找出x的所有约数,也就是要让1至X循环并进行断定。

【样例输入】2328 【样例输出】5880 【参考程序】 program aa;

var x,i,s:integer; begin

read(x);

s:=0; //累加器使用前要清0

for i:=1 to x do //求X的所有约数和

if x mod i=0 then s:=s+i; //如果i是x的约数,则将i累加到s中

writeln(s); end.

例2-7 假设有一个三位数a,将它的个位数字与十位数字对调后得到一个新数b,此时b恰好比a 大27,请编程找出所有这样的三位数。

【输出结果】 103 ?? 169

【参考程序】 program aa;

var a,b,t,k:integer; begin

for a:=100 to 999 do begin

t:=a mod 10; //得到a的个位数

k:=(a div 10) mod 10; //得到a的十位数字 b:=100+t*10+k; //组合一个新数b

if b-a=27 then writeln(a); //用式子b-a=27筛选出符合条件的数a并输出

end;

18 / 53

end.

例2-8 求100以内所有素数,输出时数与数之间隔一空格。

【分析】若i存在约数,肯定不是素数,所以让f=1,中断循环退出。如果是素数,则f=0,就输出i。

【输出结果】2 3 5 7 ?? 89 97 【参考程序】 program aa;

var i,j,k,p,f:integer; begin

for i:=2 to 100 do begin f:=0;

for j:=2 to i div 2 do //判断i是否为素数,如果不是,则f的值变为1

if i mod j=0 then begin f:=1; break; end;

if f=0 then write(i,' '); //若经过上面的程序段,f的值没有改变,则i是素数并输出它

end; writeln; end.

二、当型循环

1.语句格式: while 布尔表达式 DO 一条语句 2.注意事项:

(1)执行过程:先求出布尔表达式的值,当其值为真(TRUE)时,重复执行指定语句,当其值为假(FALSE)时,终止循环。注意这里的一条语句可以是一条简单语句,也可以是一条复合语句。

(2)为了能使WHILE循环正常终止,表达式中所含变量在循环指定的语句中一定要有更改,即有可能使表达式的值为假,以便循环能够结束,否则循环永不结束,而出现死循环。

(3)由于先判断条件,所以布尔表达式中的变量必须在循环语句开始之前先赋初值,如果当条件一开始就不成立,这时将跳过WHILE语句执行它下面的语句。

例2-9 输入若干个字符,它的终止符是’.’,计算输入的字符中字母’A’出现的次数(包含大小写)。

【分析】先读入一个字符赋给ch,然后进入while循环,若是'A'(或'a'),则s累加1,再读入下一个字符,最后输出s的值。

【样例输入】sdkfjaAgsdfAdsfsAs323sdfs. 【样例输出】4 【参考程序】 program aa;

var ch:char; s:integer; begin s:=0; read(ch);

while ch<>'.' do begin

if (ch='a')or(ch='A') then s:=s+1; read(ch); end; writeln(s); end.

例2-10 求输入的一个整数N(0

19 / 53

【样例输出】270 【参考程序】 program aa;

var n,t,s:integer; begin

read(n); s:=1; //s为累乘器,它使用前要置1 while n<>0 do begin

t:=n mod 10; s:=s*t; n:=n div 10; //每次分离出n的个位数赋值给t,并将之累乘到s中,然后将个位数字去掉

end; writeln(s); end.

例2-11 求两个自然数m,n的最小公倍数。 【样例输入】12 8 【样例输出】24 【参考程序】 program aa;

var m,n,i,s:longint; begin

read(m,n); //输入两个自然数m,n

i:=1; //让一个变量i呈自然数列增长,刚开始设为1 s:=m*i; //s为m的倍数

while s mod n<>0 do //若s又刚好是n的倍数,则s就是m,n的最小公倍数

begin i:=i+1; s:=m*i end;

writeln(s); //输出最小公倍数 end.

习题

2-1 判断下面题目是否正确

(1)复合语句与程序执行部分的“Begin..End”意义相同。 (2)布尔型数据是顺序型数据。 (3)NOT false 的值是False。 (4)一个变量或常量不可以看成为一个表达式。 2-2 判断读入的整数a是奇数还是偶数,若是奇数,输出“jishu”,否则输出“oushu” 【样例输入】5 【样例输出】jishu

2-3 输入三个数,将它们按由大到小的顺序输出。 【样例输入】12 56 9 【样例输出】56 12 9

2-4 根据学生的成绩给予相应的等级,若成绩在90-100之间输出A,在80-89之间输出B,在60-79之间输出C,60以下输出D。现在输入一个学生的成绩S(0<=S<=100),请输出这个学生的成绩等级。

【样例输入】85 【样例输出】B

2-5 某服装公司为了推销产品,采取这样的批发销售方案:凡订购超过100 套的,每套定价为50 元,否则每套价格为80元。现输入订购套数,输出应付款的金额数。

20 / 53


PASCAL语言程序设计(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: