函数与过程。
有些问题的程序太长或太复杂,编起来就会比较困难,如果我们利用搭积木的原理将大的复杂的问题分解成更小、更简单的问题,即“化整为零”,问题就会比较容易解决,这就是机构化程序设计思想。在pascal中合理使用函数和过程是实现“化整为零”的重要手段。
函数。在pascal中已经提供了很多的标准函数,如abs(x)、sqrt(x)、trunc(x)等。
1.定义新函数
格式:function 函数名 (形式参数表):函数类型;
var变量说明部分。
begin函数体。
end;例1:输入两个数,求出其中较小的数。
求两个数的较小数不是pascal的标准函数,可以将它定义成一个函数。
程序如下:prgoram ex1;
var x,y:integer;
function min(x,y:integer):integer;
beginif xelse min:=y;
end;begin
read(x,y); 23 12
x:=min(x,y);
writeln(x);
end.函数实际上是写一段程序,这个函数程序由一下几部分组成:
函数部首(第一行)以function开头,然后是函数名、形式参数(函数的自变量)和返回值类型。
变量说明部分:函数所用的常量、变量(因变量)的类型说明。
函数体:实现函数功能的所有语句。以begin开头,以end;结束。
函数处理的结果要赋值给函数名。所以函数体中必须有给函数名赋值的语句。
2.函数的调用。
函数调用格式为:
函数名(实在参数表)
例1完整的程序:(红色部分为函数调用语句)
program p1;
vara,b,c:integer;
function min (x,y:integer):integer;
beginif xelse min:=y;
end;函数调用过程:
函数调用必须出现在表达式中。
函数调用过程是将主程序中的每一个实在参数的值传递给函数中对应的形式参数,然后由函数完成处理,处理结果放到函数名中送回主程序。
实在参数和形式参数必须一一对应,参数之间用逗号隔开。
实参可以是表达式,在调用是先计算表达式,再赋值给形参。
可以没有形参,如果没有形参,也不能有实参及括号。
自定义函数只能在定义它的程序中使用,而且要将它写在程序的说明部分。
例2.设:p=(a!+b!)!a!+b!),输入:a=5,b=6,求p的值。
分析:在计算p的值之前我们必须先计算a!和b!我们可以将其定义为函数。
程序如下:program e;
var a,b:integer;
p:real;
function jc(n:integer):longint;
var i:integer; t:longint;
begint:=1;
for i:=1 to n do
t:=t*i;
jc:=t;
end; begin
readln(a,b);
p:=jc(jc(a)+jc(b))/jc(a)+jc(b));
writeln(‘p=’,p:8:0);
end.例3求五边形的面积。边长c1~c7由键盘读入。
分析:求五边形面积可以变成求3个三角形面积的和。在计算中需要计算三次三角形的面积,将三角形面积公式定义为函数ts。
program wbx;
varc1,c2,c3,c4,c5,c6,c7,s:real;
function ts(a,b,c:real):real;
varp:real;
beginp:=(a+b+c)/2;
ts:=sqrt(p*(p-a)*(p-b)*(p-c));
end; begin
read(c1,c2,c3,c4,c5,c6,c7);
s:=ts(c1,c2,c7)+ts(c4,c5,c6)+ts(c3,c6,c7);
writeln(‘area=’,s);
end.习题: 输入a,b,c计算m。已知:
将求三个数的最大数max(x,y,z)定义成函数。
program jsm;
vara,b,c,m:real;
function max(x,y,z:real):real;
vart:real;
beginif x>y then t:=x
else t:=y;
if z>t then t:=z;
max:=t;
end; begin
readln(a,b,c);
m:=max(a,b,c)/(max(a+b,b,c)*max(a,b,b+c));
writeln(‘m=’,m:8:2);
end.过程。
函数是一个子程序,它每次必须返回值而且只返回一个值。如果我们每次要返回多个值或者不需要返回值就必须使用到过程。
1. 定义过程:
格式:procedure 过程名 (形式参数表);
var变量说明部分。
begin过程体。
end;例4.定义过程fc,求n!。
procedure fc(n:integer; var t:real);
vark:integer;
begint:=1;
for k:=2 to n do
t:=t*k;
end;例5.交换两个变量的值。
procedure swap(var m,n:char);
vartemp:char;
begintemp:=m;
m:=n;n:=temp;
end;过程定义的结构:
procedure fc(n:integer; var t:real);
过程标志过程名值形参变量形参。
变量说明部分-在过程体中使用。
过程体:实现过程功能的所有语句,以begin开头,以end;结束。
与函数不同过程不能给过程名赋值。
例6.定义求三个数中最大数的过程。
procedure max (x,y,z:integer; var m:integer);
beginif x>y then m:=x
else m:=y;
if z>m then m:=z;
end;例7.定义打印表头的过程。
procedure bt;
k:integer;
beginfor k:=1 to 8 do
write(‘*
write(‘biaotou’);
for k:=1 to 8 do
write(‘*
end;执行该过程的效果为:
***biaotou***
2. 过程的调用。
函数调用不能以单独语句出现,过程调用必须以单独语句出现。
格式:过程名(实在参数表);
实在参数表由用逗号隔开的一些参数组成,且:
实在参数必须与过程说明中的形式参数个数相同,且次序一一对应。
与值形参对应的实在参数可以是表达式,与变量形参对应的实在参数只能是变量。
实在参数必须与形式参数类型同一,与值参数类型赋值相容。
例8.求3!+4!+5!。
program jiecheng(input,output);
varx,s:integer;
procedure fc(n:integer; var t:integer);
vark:integer;
begint:=1;
for k:=1 to n do
t:=t*k;
end; begin
s:=0;fc(3,x);
s:=s+x;
fc(4,x);
s:=s+x;
fc(5,x);
s:=s+x;
writeln(s:8);
end.例9.幼儿园大班做游戏,由老师随便说三个字母,然后由小朋友按字母顺序排列这三个字母。
program p9(input,output);
vara1,b1,c1:char;
procedure swap(var m,n:char);
var temp:char;
begintemp:=m;
m:=n;n:=temp;
end;begin
read(a1,b1,c1); h p r
if a1>c1 then swap(a1,c1);
if b1>c1 then swap(b1,c1);
if a1>b1 then swap(a1,b1);
writeln(a1,b1,c1);
end.练习:读程序,写结果。
ex1;var a,b,n:integer;
实验14存储过程与函数
实验目的与要求 1 熟练掌握存储过程的编写。2 熟练掌握函数的编写与使用。实验内容与步骤 存储过程 stored procedure 和函数是一组编译好存储在服务器上的完成特定功能t sql 是某数据库的对象。客户端应用程序可以通过指定存储过程或函数的名字并给出参数 如果该存储过程带有参数 来执行存...
10函数与方程
一 填空题 本大题共9小题,每小题6分,共54分 1 2010 福建厦门模拟 如果函数y x2 mx m 3 有两个不同的零点,则m的取值范围是 解析方程x2 mx m 3 0有两个不同的根 m2 4 m 3 0,m 6或m 2.答案 2 6,2 2010 金华一模 如果函数f x x2 mx m ...
10 函数与方程
10 函数与方程。一 填空题 本大题共9小题,每小题6分,共54分 1 2010 福建厦门模拟 如果函数y x2 mx m 3 有两个不同的零点,则m的取值范围是 解析方程x2 mx m 3 0有两个不同的根?m2 4 m 3 0,m 6或m 2.答案 2 6,2 2010 金华一模 如果函数f x...