过程函数部分.docx
- 文档编号:2846840
- 上传时间:2022-11-15
- 格式:DOCX
- 页数:8
- 大小:16.89KB
过程函数部分.docx
《过程函数部分.docx》由会员分享,可在线阅读,更多相关《过程函数部分.docx(8页珍藏版)》请在冰豆网上搜索。
过程函数部分
(过程函数部分)
1.用函数写一个交换两个值的程序,注意两个程序的形式参数分别被设置为值形参和变量形参,比较输出的结果。
programgh5-1-1(input,output);
var
a,b:
integer;
functionswap(x,y:
integer);
var
temp:
integer;
begin
temp:
=x;
x:
=y;
y:
=temp;
writeln('x=',x:
4,'y=':
4,y);
end;
begin
readln(a,b);
swap(x,y);
writeln('a=',a:
4,'b=':
4,b);
end.
结果是
23
x=3y=2
a=2b=3 形式参数是值形参
programgh511(input,output);
var
a,b:
integer;
procedureswap(varx,y:
integer);
var
temp:
integer;
begin
temp:
=x;
x:
=y;
y:
=temp;
writeln('x=',x:
4,'y=':
4,y);
end;
begin
readln(a,b);
swap(a,b);
writeln('a=',a:
4,'b=':
4,b);
end.
结果是:
23
x=3y=2
a=3y=2 形式参数是变量形参
2.编写一个进制转换函数,使得程序输入十进制整数N(N:
-32767---32767),转化为k进制数输出。
递归的方式
programgh52(input,output);
var
n,k:
integer;
proceduretentok(n,k:
integer);
var
digit:
integer;
d:
char;
begin
digit:
=nmodk;
if(k=16)and(digit>9)
then
d:
=chr((digit-10)+ord('A'))
else d:
=chr(digit+ord('0'));
n:
=ndivk;
ifn<>0then
tentok(n,k);
write(d);
end;
begin
readln(n,k);
tentok(n,k);
writeln;
end.
非递归
programgh52(input,output);
var
n,k:
integer;
proceduretentok(n,k:
integer);
var
digit,i,j:
integer;
d:
array[1..100]ofchar;
begin
i:
=1;
whilen<>0do
begin
digit:
=nmodk;
if(k=16)and(digit>9)
then
d[i]:
=chr((digit-10)+ord('A'))
else
d[i]:
=chr(digit+ord('0'));
n:
=ndivk;
inc(i);
end;
j:
=i-1;
fori:
=jdownto1do
write(d[i]);
end;
begin
readln(n,k);
tentok(n,k);
writeln;
end.
3.求数字的乘积根。
一个正整数的数字的乘机N的定义是:
这个整数中非零数字的乘积。
例如,整数999的数字乘积为9*9*9,即729。
729的数字乘积为7*2*9,即126。
126的数字乘积为1*2*6,即12。
12的数字乘积为1*2,即2。
一个正整数的数字乘积根N是这样得到的:
反复取该整数的数字乘积,直到得到一位数字为止。
例如,上面的例子中数字的乘积根是2。
编写一个程序,输入一个正整数(长度不超过200位数字),输出计算其数字成绩根的每一步结果。
(分别用递归和非递归实现)
非递归
programgh531(input,output);
var
st,sst:
string;
proceduremake(ss:
string;varsst:
string);
var
a:
array[1..200]ofinteger;
b:
array[1..200]ofinteger;
i,j,x,code:
integer;
w:
string;
begin
fillchar(a,sizeof(a),0);
fillchar(b,sizeof(b),0);
fori:
=1tolength(ss)do
val(ss[i],a[i],code);
x:
=1;b[1]:
=1;
fori:
=1tolength(ss)do
begin
forj:
=1toxdo
ifa[i]<>0thenb[j]:
=b[j]*a[i];
forj:
=1toxdo
begin
b[j+1]:
=b[j+1]+b[j]div10;
b[j]:
=b[j]mod10;
end;
ifb[x+1]>0thenx:
=x+1;
end;
sst:
='';
fori:
=xdownto1do
begin
str(b[i],w);
sst:
=sst+w;
end;
end;
begin
readln(st);
whilelength(st)>1do
begin
make(st,sst);
writeln(sst);
st:
=sst;
end;
end.
递归
programgh531(input,output);
var
st,sst:
string;
proceduremake(varss:
string);
var
a:
array[1..200]ofinteger;
b:
array[1..200]ofinteger;
i,j,x,code:
integer;
w:
string;
begin
fillchar(a,sizeof(a),0);
fillchar(b,sizeof(b),0);
fori:
=1tolength(ss)do
val(ss[i],a[i],code);
x:
=1;b[1]:
=1;
fori:
=1tolength(ss)do
begin
forj:
=1toxdo
ifa[i]<>0thenb[j]:
=b[j]*a[i];
forj:
=1toxdo
begin
b[j+1]:
=b[j+1]+b[j]div10;
b[j]:
=b[j]mod10;
end;
ifb[x+1]>0thenx:
=x+1;
end;
ss:
='';
fori:
=xdownto1do
begin
str(b[i],w);
ss:
=ss+w;
end;
writeln(ss);
iflength(ss)>1thenmake(ss);
end;
begin
readln(st);
make(st);
writeln(st);
end.
4.学习pascal书中的汉诺塔问题的程序和递归的原理,理解之后,独立完成此程序。
programgh54(input,output);
var
n:
1..64;
continue:
char;
i:
integer;
proceduremovetower(n,a,c,b:
integer);
proceduremovedisc(fromdisc,todisc:
integer);
begin
i:
=i+1;
write(fromdisc:
1,'-->',todisc:
1,'');
ifimod10=0then
writeln;
end;
begin
ifn>0then
begin
movetower(n-1,a,b,c);
movedisc(a,c);
movetower(n-1,b,c,a);
end;
end;
begin
i:
=0;
readln(n);
move(n,1,3,2);
end.
5.用递归函数的方法求满足m>n>0的两个正整数之和的最大公约数。
programgh55(input,output);
var
m,n,p:
integer;
functionged(a,b:
integer):
integer;
var
r:
integer;
begin
r:
=amodb;
ifr=0thenged:
=b
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 过程 函数 部分