优学合肥奥数网讯:青少年信息学竞赛Pascal语言:函数和过程。 过程 1.过程的定义 procedure过程名(形式参数:参数说明);{也可以不带参数} var begin ... end; 2.过程的调用 过程名(实在参数表); 例1:求n个自然数的最大公约数; programgcd1; constmaxn=100; varn,i,gcd:integer; a:array[1..maxn]ofinteger; procedureenter; begin write('n=(<100)');readln(n); fori:=1tondo repeat write('a[',i,']=');readln(a[i]); untila[i]>0; end; procedurefind_gcd(x,y:integer);{定义过程} varr:integer; begin r:=xmody; whiler<>0do beginx:=y;y:=r;r:=xmody;end gcd:=y; end; procedureprint; begin writeln('GCD=',gcd); end; begin enter; gcd:=a[1]; fori:=2tondo find_gcd(gcd,a[i]); print; end. 下一页阅读:函数 函数 1.函数的定义 function函数名(形参表):函数类型;{————函数首部} var{————局部变量说明部分} begin{————函数体} ...{————函数语句} ... 函数名:=表达式 end; 2.函数的调用: 函数在语法上相当于一个表达式,所以,调用时,函数不能独立成为一个语句;它可以出现在任何表达式可以出现的地方。 例如赋值语句的右边: X:=函数名(实在参数表);{————X的类型与函数类型必须一致} 又,如果函数类型是boolean,则还可以出现在条件语句中,充当条件表达式: if函数名(实在参数表)then…… 例3:编一程序,求从10名同学中选出3名代表,有几种不同的选法。 (公式:C(m,n)=m!/n!*(m-n)!从m中选n) programzohe1; varm,n:integer; c:longint; functionfactor(x:integer):longint;{定义} vari:integer; p:longint; begin p:=1; fori:=1toxdop:=p*i; factor:=p;{这个语句必须} end; begin write('m,n=');readln(m,n); c:=factor(m)div(factor(n)*factor(m-n));{调用} writeln('c(',m,',',n,')=',c); end. 下一页阅读:全局变量和局部变量 全局变量和局部变量 在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。全局变量作用域是整个程序;局部变量作用域是定义该变量的子程序。当全局变量与局部变量同名时:在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。 例4:全局变量和局部变量。 programlocal_global; vari,k:integer; proceduresub1; vari,j:integer; begin i:=17; writeln('iinsub=',i); writeln('kinsub=',k); end; begin i:=2;k:=9; writeln('iinmain=',i); writeln('kinsub=',k); sub1; writeln('iinmain=',i); writeln('jinmain=',j); readln; end. 上述程序运行时将出现UnknownIdentfier;因为变量j在主程序中没定义。 当删除本语句时。运行结果如下: iinmain=2 kinmain=9 iinsub=17 kinsub=9 iinmain=2 下一页阅读:值参和变量参数 值参和变量参数 值形参——传值:调用时可用表达式代替形参,不该变实在参数的值。 变量形参——传地址:调用时必须用变量代替行参变量,改变实在参数的值。 例4:请看下列程序的运行结果。 programli3_10; vara,b,c:integer; proceduresub(x,y:integer;varz:integer); begin x:=x+1;y:=y+1;z:=x+y; writeln('sub:x=',x:2,'y=',y:2,'z=',z:2); end; begin a:=1;b:=4;c:=9; writeln('main:a=',a:2,'b=',b:2,'c=',c); sub(a,b,c); writeln('main:a=',a:2,'b=',b:2,'c=',c); sub(c+5,b*b,a); writeln('main:a=',a:2,'b=',b:2,'c=',c); readln; end. main:a=1b=4c=9 sub:x=2y=5z=7 main:a=1b=4c=7 sub:x=13y=17z=30 main:a=30b=4c=7 练习与作业 1、试编写一个将阿拉伯数字转换为中文大写数字的函数。(如中文状态不方便,可以替换为ABCDEFGHIJ) 2、输入一个长字符串和一个短字符串以及一个合适的整数,通过程序从指定位置用指定短字符串替换长字符串中的内容(要求编写过程来实现),最后输出新字符串。 往期最新阅读:信息学竞赛Pascal语言:循环结构程序设计(四) 信息学竞赛Pascal语言 数组与字符串(五) 更多内容,请参加优学合肥奥数网“杯赛竞赛”频道。 |