ImageVerifierCode 换一换
格式:DOCX , 页数:30 ,大小:28.14KB ,
资源ID:24476078      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/24476078.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(pascal 习题 完善程序.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

pascal 习题 完善程序.docx

1、pascal 习题 完善程序第1题(14分)以下程序是将一组整数按从小到大的顺序排列。排序的方法是将长度为n的数a分为两个长度分别为(n div 2)与(n-n div 2)的子数组a1,a2。然后递归调用排序过程,将a1,a2分别排序,最后将a1,a2归并成数组a。例如a=(3,1,2,4),那么a1=(3,1),a2=(2,4)。调用排序过程将a1,a2排序,得到a1=(1,3),a2=(2,4),然后进行合并排序。从键盘输入数的长度n以及n个整数,存在数组a中,调用子过程sort进行排序,最后输出排序结果。program wsh;const maxn=100;type arr:array

2、1.maxn of integer;var a:array1.maxn of integer; n,i:integer;procedure sort(n:integer; var a:arr); var i, p1, p2, n1, n2: integer; a1,a2 :arr; begin if n = 1 then exit; fillchar(a1,sizeof(a1) ,0); fillchar(a2,sizeof(a2) ,0); n1:=0; n2:=0; n1:=n div 2; n2:=(_(1)_); for i:= 1 to n1 do a1i:=ai; for i:=

3、1 to n2 do a2i:=_(2)_; _(3)_; sort(n2, a2); p1:=1; p2:=1; n:=0; while (p1 = n1) and (_(4)_) do begin n:=n+1; if _(5)_ then begin an:=a1p1 ;inc(p1); end else begin _(6)_; inc(p2) ;end; end; if p1 = n1 then for i:= _(7)_ to n1 do begin n:=n+1;an:=a1i end else for i:=p2 to n2 do begin n:=n+1; an:=a2i;

4、end; end;begin write(n = ); readln (n); for i:= 1 to n do read(ai); readln; sort(n,a); for i:=1 to n do write(ai,); writeln;end.答案:n-n1an1+isort(n1,a1)(p2 =n2)a1p1 a2p2an:=a2p2p1第2题(8分)有n(1n100)个同学种m(1nm100)种小树苗,例如:4个同学(1、2、3、4)每小时种4种树苗(A、B、C、D)的数量估算如下表所示,编程输出每人种1种苗所用的总时间最少的安排方案和所花费的时间。 学 生 A B C D

5、1 5 2 4 5 2 4 3 5 3 3 5 2 4 2 4 3 2 3 3program wsh;const maxn=100; maxm = 100;var a: array1.maxn, 1.maxm of integer; m, n: integer; i, j, t: integer;procedure work(k,t1: integer); var i: integer; begin if _(1)_ then begin if t1 n1mt1+tk,i第3题(10分)程序的任务是用09中的数字填入如下乘法运算的*处,数字可重复使用,且所用的数字至少有一个是素数,要求输出满足

6、下列算式的方案数。 * * *x * *- * * * * *-* * * program wsh;const p:set of 0.9 = 2,3,5,7;var s:set of 0.9; n: integer; ans: longint; f: text;procedure init; var i: integer; t:byte; begin readln(n); s:=; for i:=1 to n do begin read(t); s:=s+t; end; close(f); end;function ok(x,l:integer):boolean; 此函数判断x是否符合条件 v

7、ar t: byte; begin ok:=false; if _(1)_ l then exit; while x0 do begin t:=x mod 10; if not ( t in s) then exit; x:=x div 10; end; ok:=true; end;function inset(x:integer):boolean; 此函数判断x中是否包含素数字 var t: byte; begin inset:= false; while _(2)_ do begin t:=x mod 10; if t in p then begin inset:= true; exit;

8、 end; _(3)_; end; end;procedure work; var i,i1,i2,i3,j1,j2:integer; begin ans:=0; for i1:=1 to 9 do if i1 in s then for i2:=1 to 9 do if i2 in s then for i3:=1 to 9 do if i3 in s then begin _(4)_; for j1:=1 to 9 do if (j1 in s) and ok(j1*i,3) then for j2:=1 to 9 do if (j2 in s) and ok(j2*i,3) and _(

9、5)_ then begin if (i1 in p) or (i2 in p) or (i3 in p) or (j1 in p) or (j2 in p) or inset(j1*i) or inset(j2*i) then inc(ans); end; end; writeln(ans); end;begin init; work;end.答案:trunc(ln(x)/ln(10)+1x0x:=x div 10i:=i1*100+i2*10+i3ok(j1*i*10+j2*i,4)第4题(15分)下列程序是对冒泡排序的一种改进,数组elem中有n个元素elem1、elem2、elemn。

10、要排序的关键字是key。先从一端开始扫描,进行比较、交换,然后改变下一趟的扫描方向进行同样的处理。请完善下面的过程。program wsh;type Td = record key: integer; inf: real; end;var elem:array1.1000 of Td; n, i: integer;procedure shakesort(n: integer); var i, t, h: integer; c: boolean; temp: Td; begin h:=1; t:=n; repeat _(1)_; for i:=h to t-1 do if elemi.key e

11、lemi+1.key then begin temp:=elemi; elemi:=elemi+1; elemi+1:=temp; _(2)_; end; _(3)_; for i:=t-1 downto h do if elemi.key elemi+1.key then begin temp:=elemi; elemi:=elemi+1; elemi+1:=temp; _(4)_; end ; _(5)_; until c ; end;begin主过程 略end答案:c:=truec:=falset:=t-1c:=falseh:=h+1第5题(15分)读入一个10x10的数字矩阵,矩阵中的

12、数字各不相同,输出这个矩阵经过旋转、翻转后的7种不同样式。program wsh;var matrix: array 0.7,1.10,1.10 of integer; lr, lc, which: integer;procedure overturn( which: integer); var lr, lc: integer; begin for lr:= 1 to 10 do for lc:= 1 to 10 do matrixwhich,lr,lc:=matrixwhich-1,_(1)_,_(2)_; end;procedure rotate( which: integer); var

13、 lr, lc: integer; begin for lr:=1 to 10 do for lc:=1 to 10 do matrixwhich,lr,lc:=matrixwhich-1,_(3)_,_(4)_; end;begin for lr:= 1 to 10 do for lc:=1 to 10 do read(matrix0,lr,lc); readln; for which:= 1 to 7 do begin if _(5)_ then overturn(which) else rotate(which); for lr:=1 to 10 do begin for lc:= 1

14、to 10 do write(matrixwhich,lr,lc:3); writeln; end; readln; end;end.答案:11-lrlc11-lclrwhich=4第6题(16分)问题描述在n个元素的集合S中,找最大和最小元素(设n的值为2m)解题思路把集合S分成两个子集S1和S2,每个子集有n/2个元素应用递归过程search(S,Y,MAX,MIN)(S中有2k个元素),过程返回一对(MAX,MIN)值,为最大和最小元素,最后,把S1和S2中的最大和最小元素进行比较,从而得到S中的最大和最小元素程序program wsh;type data = array1.256 of

15、 byte; jh = set of byte;var s,ss:jh; a:data; i ,j, d,largest, smallest: byte;function sq(k: byte): byte; begin if k =1 then sq:=2 else sq:=2*sq(k-1); end;procedure seareh(x:jh; y:byte; var max,rain:byte); var k,p,w,nxl,nx2,ni1,ni2,n: byte; m:array1.2 of byte; s1 ,s2:jh; begin if y = 2 then begin p:=

16、0; for k:=1 to i do if _(1)_ then begin p:=p+1;mp:=_(2)_; end; if _(3)_ then begin w:=m1;m1:=m2;m2:=w; end; max:= m1 ;min:= m2 ;exit; end else begin si:=;n:=O;y:=_(4)_; for k:=1 to i do if _(5)_ then begin n:=n+1;if n nx2 then max:=nx1 else max:=nx2; if ni1 ni2 then min:=ni1 else min:=ni2; end end;b

17、egin i:=0;s:=;ss:=; for j:=1 to 7 do ss:=ss+sq(j); writeln(enter 2n data:); repeat while not eoln do begin i:=i + 1; read(d); if _(8)_ then i:= i - 1 else begin ai:=d;s:=s+ai; end; end; readln; until i in ss; search(s,i,largest,smallest); writeln(largest-data:,largest,smallest-data:,smallest)end答案:a

18、k in xmp:=akm1 =m2y:=trunc(y/2)ak in xs1:=s1+aks2:=x-s1d in s第7题(14分)问题描述将一个含有运算符为:(、)、+、-、*、/、(乘幂运算)、(求负运算)的中缀表达式,如:(1+2)*5)2-(3+5)/2转化为后缀表达式,如:12+5*235+2/-解题思路将中缀表达式转化为后缀表达式,首先规定运算符的优先数如下:运算符 ( ) +, * ,/ 优先数 0 1 2 3 4 5 1若输入是运算量,则将该运算量输出;2若是左括号“(”,则将该符号的优先数压入设置的运算符堆栈ep中去;3输入运算符优先数是2,3,4,5时,如果栈空,则将

19、运算符的优先数进栈。如果栈不空,则将它与栈顶元素进行比较,倘若优先数大于栈顶元素的优先数,则进栈;小于顶元的,则顶元退栈并输出该运算符,然后再继续比较,直到大于顶元或栈空时进栈;4若是右括号“)”,同时栈顶元又为左括号“(”,则栈顶元退栈,并抹去右括号“)”否则转3处理;5输入完而栈非空,则将栈内内容逐一退栈并输出。所有输出的结果就为后缀表达式。过程中用到的相关数据结构如下:type arraydata = array1.100 of string20;const fh:array1.8 of string1 =(,),+,-,*,/,); b:array1.8 of byte =(0,1,2

20、,2,3,3,4,5);var d: arraydata; 存储运算量及运算符号 i,j,m,k: byte;过程程序procedure hzbds(var d: arraydata; var m: byte ); var: array 1-. 100 of byte; i,p,k ,bi:byte; bl: boolean; begin p:=O;k:=1;bj:=0; while k=m do begin if _(1)_ then begin p:=p+1;ep:=1 end else begin for i:=2 to 8 do if _(2)_ then begin b1:= tru

21、e; repeat if _(3)_ then begin p:= p+1 ;ep:=i;bj:= 1 ;b1:= false end else if _(4)_ then if ep 1 then begin p:=p+1;ep:=i;bj:=1;b1:=false end else if dk ) then begin p:=p+1;ep:=i;bj:=1;b1:=false end else begin _(5)_;bj:= 1 ;b1:= false; end else begin write(fhep , ) ;p:=p-1 end; until b1 = false; end if

22、 _(6)_ then write(dk , ) else bj:=0; end; k:=k+1 end b1:= true; repeat if p=0 then b1:= false else begin _(7)_;p:=p-1; end until b1 = false; writeln; end;答案:dk:=(dk:=fhip=0bep bip:=p-1bj=0write(fhep,)第8题(15分)以下程序完成对数组每个元素向后移动n个单位。数组元素的下标依次为0到m-1,对任意一个数组元素ai而言,它的值移动后将存储在数组元素a(i+n) mod m中。例如,m=10,n=3,

23、移动前数组中存储的数据如下前一行所示,则程序运行后数组中存储的数据如下后一行所示。 0 3 86 20 27 67 31 16 37 42 16 37 42 0 3 86 20 27 67 31 程序清单:program wsh;const maxm = 10000;var i, k, m, n, rest, start, temp: longint; a:array 0.maxm of longint;begin write(input m, n: ); readln(m ,n); for i:=0 to m-1 do ai:= random(100); writeln(before mov

24、e); for i:=0 to m -1 do write(ai:5); writeln; rest:= m; start:= 0; while _(1)_ do begin k:= start; repeat k:=(k+n) mod m until k 0k:=startrest:=rest-1a(k+n) mod m:=tempstart:=start+1第9题(15分)设m叉树采用列表法表示,即每棵子树对应一个列表,表的结构为:子树根顶点的值部分(设为一个字符)和用“( )”括起来的各树的列表(如有子树的话),各子列表间用“,”分隔。例如下面的三叉树可用表a(b(c,d),e,f(g,

25、h,i)表示。 本程序输入列表,生成一棵m叉树,并由m叉树输出列表。假定输入无错误。程序清单:program wsh;const m=3;type pointer =node; node = record val: char; subtree: array 1.m of pointer end;var i: integer; bur: string; root: pointer;procedure maketree(var s: pointer); 由列表生成m叉树 var k: integer; begin _(1)_; s.val:= bufi; i:=i+1; for k:=1 to m do s.subtreek:=nil; if bufi=( then begin k:=1; repeat i:=i+1; _(2)_; if bufi =) then begin i:= i + 1; break end; k:=k+1 until _(3)_; end end;procedure walkt

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1