120 likes | 266 Views
10 、 2 过程. 前面一节讲了子程序的第一种形式 —— 函数,但是函数的动能有限,它再复 杂的函数到最后也仅得到 一个 返回值。 今天开始学习功能强大的另一种子程序 —— 过程。过程通常能得到若干个运 算结果,或者完成一系列的操作,这是函数无法做到的。. 功能不一样,当然定义方法也不一样。 而且更不一样的是调用的方法,函数调用必须出现在表达式里,不能单独的 作为一个语句,但是过程必须单独作为一个语句。. 一、过程的定义方法: 与函数一样,过程也必须先定义在调用,定义的位置与函数一样,在主
E N D
10、2 过程 前面一节讲了子程序的第一种形式——函数,但是函数的动能有限,它再复 杂的函数到最后也仅得到一个返回值。 今天开始学习功能强大的另一种子程序——过程。过程通常能得到若干个运 算结果,或者完成一系列的操作,这是函数无法做到的。 功能不一样,当然定义方法也不一样。 而且更不一样的是调用的方法,函数调用必须出现在表达式里,不能单独的 作为一个语句,但是过程必须单独作为一个语句。
一、过程的定义方法: 与函数一样,过程也必须先定义在调用,定义的位置与函数一样,在主 程序的VAR 和 BEGIN之间。定义格式: PROCEDURE过程名(形式参数表); 说明部分{包括常量、类型、变量说明等} BEGIN 执行语句 END; 过程首部 过程体 执行部分 函数又函数首部加函数体构成,过程也过程首部加过程体, 但是过程没有返回值!
PROCEDURE:过程以此开头,表示下面的一段是一个过程; 过程名:与函数名一样,必须遵循命名规则。 形式参数表:用来接受主程序传递过来的参数,例如: (X,Y:REAL;N:INTEGER) 当然也可以不要参数,这样可以直接写成PROCEDURE JJZX; 过程体与函数体相同,也是又说明部分和执行部分组成。 但是过程没有返回值,所以在最后没有像函数那样的语句,也就是说不能出 现 过程名:= 这样的话。
二、过程的调用方法: 只要在主程序中写上这样一句话就可以了: 过程名(实在参数表); 再次强调调用过程必须单独作为一句话。
程序举例: 用过程来实现输出 ! 输入10个数,顺序输出,再把数组的存储顺序反过来,再输出一次! PROGRAM JJZX(INPUT,OUTPUT); TYPE ARR:ARRAY[1。。10] OF INTEGER; VAR A,B:ARR; N:INTEGER; PROCEDURE SHUCHU(C:ARR); VAR M:INTEGER; BEGIN FOR M:=1 TO 10 DO WRITE(C[M]) END; BEGIN WRITELN(’输入数据‘); FOR N:=1 TO 10 DO READ(A[N]); SHUCHU(A); {调用过程} FOR N:=1 TO 10 DO B[N]:=A[11-N];{数组反过来存储} FOR N:=1 TO 10 DO A[N]:=B[N]; SHUCHU(A) {调用过程} END。
三、变量形参: 前面所讲的形式参数 都只能从主程序接受参数,但是无法把自己在 过程体中得到的值返回给主程序。 现在开始介绍另外一种形参——变量形参。它也可以接受从主程序传 递过来的参数,同时它还具有另外一个功能,把自己在过程体中得到的结果再送 回到主程序中去,通过赋值给它的变量。看看定义方法: PROCEDURE JJZX(I,J:INTEGER;VAR M:INTEGER); 在上面这个定义中,形参表多了一个VAR,那么VAR后面的参数M就是变量 形参,它就可以把自己在程序体中得到的最后结果通过赋值给它的变量带去。 假设在主程序中有这样的一句话:JJZX(A,B,C);这个时候A赋值给I, B赋值给J,C赋值给M。但是A,B赋值后都与过程中的变量没有任何关系了,但 是C就与M紧紧联系在一起,M怎么变C也跟这怎么变,最后M得到什么样的结果 都会把这个结果送给C,使得C:=M,当然这是由系统自动完成的。
程序举例:用过程来实现两个数组的输入输出:程序举例:用过程来实现两个数组的输入输出: PROGRAM JJZX(INPUT,OUTPUT); TYPE ARR:ARR[1。。10] OF INTEGER; VAR A,B:ARR; PROCEDURE SHURU(VAR C:ARR);{输入过程} VAR I:INTEGER; BEGIN WRITELN(’输入数据!‘); FOR I:=1 TO 10 DO READ(C[I]) END; PROCEDURE SHUCHU( C:ARR);{输出过程} VAR I:INTEGER; BEGIN FOR I:=1 TO 10 DO WRITE(C[I]) END; BEGIN SHURU(A); SHUCHU(A); SHURU(B); SHUCHU(B) END。
程序:把字符串中非数字字符前的数字子串转换成与其面值相他的整。如果字符串的第一个字符不程序:把字符串中非数字字符前的数字子串转换成与其面值相他的整。如果字符串的第一个字符不 是数字,则结果为0。用函数实现转换的功能。 program jjzx(input,output); var a:string; n:longint; {n设为LONGINT型,使得接受的数据近可能大} FUNCTION zhuan(b:string):LONGINT; {I为变量形参} var j:integer; c:string; I:longint; begin val(b,i,j); if j<>0 then {如果J<>0 说明里面有非字符的数据,那么J就是 begin 非数字字符的开始位置} c:=copy(b,1,j-1);{先把B中的全部数字字符复制到C} val(c,i,j) {再转化为数字赋值给I} end; ZHUAN:=I end; begin writeln('shu ru :'); readln(a); writeln(a); writeln('jie guo shi: ', zhuan(a);) end.
程序:把字符串中非数字字符前的数字子串转换成与其面值相他的整。如果字符串的第一个字符不程序:把字符串中非数字字符前的数字子串转换成与其面值相他的整。如果字符串的第一个字符不 是数字,则结果为0。用过程实现转换的功能。 program jjzx(input,output); var a:string; n:longint; {n设为LONGINT型,使得接受的数据近可能大} procedure zhuan(b:string;var i:longint); {I为变量形参} var j:integer; c:string; begin val(b,i,j); if j<>0 then {如果J<>0 说明里面有非字符的数据,那么J就是 begin 非数字字符的开始位置} c:=copy(b,1,j-1);{先把B中的全部数字字符复制到C} val(c,i,j) {再转化为数字赋值给I} end end; begin writeln('shu ru :'); readln(a); writeln(a); zhuan(a,n); writeln('jie guo shi: ',n) end.
程序:输入10个学生的学号和一门课的成绩: 1、利用函数求出高于平均分的人数,并打印出学号和成绩; 2、利用过程求出高于平均分的人数,并打印出学号和成绩;
函数实现: PROGRAM JJZX(INPUT,OUTPUT); TYPE ARR=ARRAY[1..10,1..2] OF REAL; VAR A:ARR; I,J:INTEGER; FUNCTION RENSHU(B:ARR):INTEGER; {函数首部} VAR I,K:INTEGER;J:REAL; BEGIN J:=0; FOR I:=1 TO 10 DO J:=J+B[I,2]; {求总分} J:=J/10; K:=0; FOR I:=1 TO 10 DO IF B[I,2]>=J THEN BEGIN WRITELN(B[I,1]:4:0,B[I,2]:8:1); {控制输出格式} K:=K+1 {人数加一} END; RENSHU:=K {把结果带回去} END; BEGIN {主程序} WRITELN('SHU RU :'); FOR I:=1 TO 10 DO BEGIN FOR J:=1 TO 2 DO READ(A[I,J]); READLN END; WRITELN(‘REN SHU SHI :’, RENSHU(A) ); {调用函数,同时在函数体内可以打印学号、成绩} END. 想想输入格式是什么
过程实现: PROGRAM JJZX(INPUT,OUTPUT); TYPE ARR=ARRAY[1..10,1..2] OF REAL; VAR A:ARR; I,J:INTEGER; PROCEDURE RENSHU(B:ARR;VAR K:INTEGER); {过程首部} VAR I:INTEGER;J:REAL; BEGIN J:=0; FOR I:=1 TO 10 DO J:=J+B[I,2]; {求总分} J:=J/10; K:=0; FOR I:=1 TO 10 DO IF B[I,2]>=J THEN BEGIN WRITELN(B[I,1]:4:0,B[I,2]:8:1); {控制输出格式} K:=K+1 {人数加一,并且K是变量形参,可以把结果带回去} END; END; BEGIN {主程序} WRITELN('SHU RU :'); FOR I:=1 TO 10 DO BEGIN FOR J:=1 TO 2 DO READ(A[I,J]); READLN END; RENSHU(A,I ); {调用过程} WRITELN(’人数是:‘,I) END.