meili 发表于 2022-10-21 20:47:18

信息学竞赛Pascal语言:函数和过程(六) 标签:信息学

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