PASCAL语言程序设计(8)

2019-04-16 00:40

function sum(n:integer):longint; //设定一个求阶乘的函数 var i:integer;s:longint; begin s:=1;

for i:=1 to n do s:=s*i; sum:=s; end; begin

read(a,b,c); //输入a,b,c的值

s:=sum(a)+sum(b)+sum(c); //三次调用求阶乘函数 writeln(s); //输出结果 end.

例5-2 任意输入3组三角形的三边,求其面积和。运算结果保留两位小数。 已知三角形的三边a,b,c,求三角形面积S的公式为: P=(a/+b+c)/2,S=sqrt(p*(p-a)*(p-b)*(p-c))。 【样例输入】 2 3 4 3 4 5 5 6 7

【样例输出】 23.60

【参考程序】 program aa; var

i:integer;

a,b,c,s,p:real;

function area(a,b,c:real):real; //设置一个求三角形面积的函数 begin

p:=(a+b+c)/2;

area:=sqrt(p*(p-a)*(p-b)*(p-c)); end; begin s:=0;

for i:=1 to 3 do begin

read(a,b,c);

s:=s+area(a,b,c); //调用自定义函数area end;

writeln(s:0:2); //输出结果 end.

例5-3 求从键盘任意输入三个自然数的最大约数。 【样例输入】100 20 50 【样例输出】10 【参考程序】 program aa;

var a,b,c,k:integer;

function gy(a,b:integer):integer; //求最大公约数函数 var r:integer; begin

r:=a mod b;

while r<>0 do //用辗转相除判余法求最大公约数

36 / 53

begin a:=b; b:=r;

r:=a mod b; end; gy:=b; end; begin

read(a,b,c);

k:=gy(a,b); //调用函数gy,求a,b的最大公约数k

k:=gy(k,c); //调用函数gy,求k,c的最大公约数赋值为k,从而得到a,b,c三个数的最大公约数

writeln(k); end.

例5-4 设计一个函数qs(n,k),它能将自然数N的从右边开始的第K位上的数字取出来。

例如:qs (13579,2)=7 qs (2468,4)=2

调用此函数,求出3次输入后,得到的第K位上的数字之和。 【样例输入】 133756 2 534534534 6 98809 3

【样例输出】 18

【参考程序】 program aa;

var n,k,i,s:longint;

function qs(n,k:longint):longint; //设定一个求从右边数第k位上数字的函数

var i:longint; begin

for i:=1 to k-1 do n:=n div 10; qs:=n mod 10; end;

begin s:=0;

for i:=1 to 3 do begin

read(n,k);

s:=s+qs(n,k); //调用qs函数,并将求得的n右边第k位数字累加到s中

end;

writeln(s); end.

例5-5 求出正整数N~M之间的完全数(N

【样例输出】 6 28

【参考程序】 program aa;

37 / 53

var n,m,i:integer;

function wqs(n:integer):boolean; //设定一个判断n是否为完全数的函数 var s,i:integer; begin s:=1;

for i:=2 to n div 2 do

if n mod i=0 then s:=s+i;

if n=s then wqs:=true else wqs:=false; end; begin

read(n,m);

for i:=n to m do //用穷举法找出n-m之间的所有完全数 if wqs(i) then writeln(i); end.

第二节 自定义过程

一、自定义过程格式

Procedure 过程名(形式参数表); 说明部分; BEGIN

过程体(语句块) END; 二、说明

1.过程首部以保留字Procedure 开头,过程名与函数名的使用规则相同,同时过程名不能代表任何数据,因此不必说明类型。

2.过程的形式参数表中的参数之间用逗号分隔,过程和函数一样也可以不带形参,此时,只是在主程序调用它时,执行指定的操作。它的参数分为值形参与变量形参。

如下例:Procedure FAC(A,B:real; C:integer; var x,y:reaL);

其中:A,B,C称为值形参,它们与在函数中介绍的形参相同;x,y称为变量形参,在它们的前面冠有保留字Var;

3.过程体包括说明和执行两部分,在过程体内使用的有关常量、变量等必须在过程体的说明部分内加以说明或定义,并且只有在过程体执行期间有效,当退出过程体后,为这些量分配的存储单元被释放,还有在过程体内不能给过程名赋值,因为过程名不能代表任何数据。

4.过程调用的一般形式是:

过程名(实在参数表);

例5-6 利用自定义过程求任意两个整数的乘积。 【样例输入】5 10 【样例输出】50 【参考程序】 program lkj;

var a,b,c:longint;

procedure sum(a,b:longint;var c:longint); //将求两个整数乘积的程序段设为一个过程

begin

c:=a*b; end; begin

readln(a,b);

sum(a,b,c); //调用sum过程求a+b的乘积

38 / 53

writeln(c); end.

例5-7 编写程序,求:S=2!+4!+6!+8! 【输出结果】41066 【参考程序】 program aa;

var i:integer; b,s:longint;

procedure jc(n:integer; var t:longint); //求x的阶乘,t为变量形参,并将x的阶乘带出过程体

var j:integer; begin t:=1;

for j:=1 to n do t:=t*j; end;

begin s:=0;

for i:=2 to 8 do

if not odd(i) then //若i是偶数,则求它的阶乘,并将阶乘b累加到s中

begin

jc(i,b); s:=s+b; end; writeln(s); end.

例5-8 小明在家举行了一个生日聚会,共来了M位同学,为了活跃气氛,小明要选N位同学表演一个小游戏,请问有多少种选择方法。

m!n【分析】这是数学中的组合运算,可用下列公式计算Cm,其中M,N?n!*(m?n)!由键盘输入。

【样例输入】10 7 【样例输出】120 【参考程序】 program aa;

var L,m,n:integer; a,b,c:real; x:longint;

procedure jc(k:integer); //设定一个求k阶乘的函数,阶乘通过x带出过程体

var i:integer; f:longint; begin f:=1;

for i:=1 to k do f:=f*i; x:=f; end;

begin read(m,n);

if m=n then L:=1 else L:=m-n; //若m-n的值为0,则将L设为1,否则L=m-n

jc(m);a:=x; //将m的阶乘赋值为a jc(n);b:=x; //将n的阶乘赋值为b jc(L);c:=x; //将L的阶乘赋值为c c:=a/(b*c); //求出运算结果 writeln(c:0:0) end.

39 / 53

例5-9 将辗转相除判余法求两个数最大公约数的程序段设定为一个过程,编程求任意两个整数的最大公约数。

【样例输入】12 8 【样例输出】4 【参考程序】 Program aaa;

Var a,b,s:integer;

procedure ee(var x,y,z:integer); begin

z:=x mod y; while z<>0 do begin

x:=y; y:=z; z:=x mod y; end; z:=y; end; begin

readln(a,b); ee(a,b,s); writeln(s); end.

通过上面的例题,我们可以看到过程与函数有下列主要区别: (1)过程的首部与函数的首部不同。

(2)函数通常是为了求一个函数值,而过程可以得到若干个运算结果,也可用来完成一系列的数据处理,或用来完成与计算无关的各种操作。

(3)调用方式不同,函数的调用出现在表达式中,而过程调用是一个独立的语句。

第三节 参数和作用域

一、局部量、全程量与作用域

在子程序内部说明的变量,称之为局部变量。在主程序开头说明部分中加以定义与说明的量,称为全程量。在不同的说明语句部分所说明的变量,在程序中对此变量进行存取的适用范围是不同的,我们将其适用的范围称之为作用域。局部变量的作用域为所在子程序,由于形式参数只在所在子程序中有效,因此也属于局部变量。

例5-10

program aa;

var a,b:integer;

procedure add(c:integer); //c为值形参、局部量,作用域在本程序,它的改变不会影响实在参数a的值

begin

c:=c+10;

b:=b+10; //b为全程量,在过程中发生改变,退出后仍然是改变的 writeln('c=',c,' ','b=',b); end;

begin a:=5; b:=10;

add(a); //a为实在参数,它将值传送给值形参c writeln('a=',a,' ','b=',b); end.

【输出结果】 c=15 b=20 a=5 b=20

在这里,a,b是全局量,c是局部量。 二、值参数与变量参数

40 / 53


PASCAL语言程序设计(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:金融衍生工具期末复习总结

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

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