1、华舍实验学校信息学竞赛练习二14 2填空题429下面的程序从键盘接收任意6个数放入数组a中,设这6个数为:814256,则可输出一个具有如下内容的方阵。814256681425568142256814425681142568请填空完成该程序。PROGRAM p429(Input,Output);VAR a:ARRAY1.6 OF Integer;i,j,k:Integer;BEGIN FOR i:=1 TO 6 DO Read( ); Readln; FOR i:=1 TO 6 DO BEGINIF i=1 THEN k:=1 ELSE k:=( );FOR j:=1 TO ( ) DO BE
2、GIN Write(ak:2); IF k=6 THEN k:=1 ELSE k:=( ) END; WritelnENDEND.4.30 下面的程序最多可输入100位学生的姓名,姓名全由大写英文字母组成,输入?后则停止输入,然后按字典顺序输出这些姓名。请填空完成该程序。PROGRAM p430(Input,Output); CONST max=100;length=20;TYPE string=PACKED ARRAY1.length OF Char; VAR name:ARRAY 1.max OF string;t:string;i,j,count:Integer; BEGIN i:=1;
3、Readln(namei);WHILE namei? DOBEGIN ( ); Readln(namei)END;count:=( );FOR i:=1 TO ( ) DO BEGIN FOR j:=i+1 TO count DO IF namei ( )namej THEN BEGIN t:=namei; namei:=namej; namej:=t END; Writeln( ) END END.4.31在下列程序中,当输入一个给定的数n后,能输出所有不超过n的、其平方由左右对称的数字组成的数。例如:n=23,则输出:1,2,3,11,22。它们的平方依次是:1,4,9,121,484,都
4、是左右对称的数字组成的数。请填空完成该程序。PROGRAMp431(Input,Output);CONST max=1000;VAR m,n,i,j,s:Integer;d:ARRAY0.max OF Integer;BEGIN Readln(n); FOR m:=1 TO n DO BEGIN计算m的平方且存放于s ( )把组成数s的每位数字存放入数组d中j:=0;WHILE s0 DO BEGIN j:=j+1; dj:=s MOD 10; ( ) END; 判断组成数s的数字是否左右对称i:=1; WHILE (di=dj) AND (i=j THEN Writeln( )ENDEND.
5、4.32* 下面程序实现将数组a 赋予如下的值,请填空完成该程序。1111141111341112341112341PROGRAMP432;VAR a:ARRAY1.5,1.5 OF Integer; i,j,k:Integer;BEGIN FOR i:=1 TO 5 DO FOR j:=1 TO 5 DOIF(i-j=4) OR ( ) THEN ai,j:=1 ELSE BEGIN k:=( ); CASE k OF 1:ai,j:=4; 2:ai,j:=( ); 3:ai,j:=2 END; ENDEND.4.33下面程序将n个学生的英文成绩从键盘输入,按059分、6069分、7079分
6、、8089分和90100分分组统计人数。PROGRAM p433(Input,Output); CONST n=20; VAR i,k:Integer;s:ARRAY 1.5 OF Integer;a:ARRAY1.n OF Integer; BEGINFOR i:=1 TO ( ) DO si:=0;FOR i:=1 TO ( ) DO BEGIN ( ); IF ai=90 THEN k:=1 ELSE IF ai=80 THEN k:=2ELSE IF ai=70 THEN k:=3 ELSE IF ai=60 THEN k:=4 ELSE k:=5; sk:=( ) END; Read
7、ln; FOR i:=1 TO 5 DO Write(si:3);WritelnEND.4.34类型arr为:TYPEarr=ARRAY 1.16 OF Integer;, 已知数组a中有15个整数已按从小到大的顺序排列,过程insertone把任意整数b填入a中并使a 中数据仍然有序。PROCEDURE p434(VAR a:arr; b:Integer);VAR k:Integer;BEGIN k:=( ); WHILE (k1) AND( ) DO BEGINak:=ak-1;k:=k-1 END; ak:=( )END;4.35*下面程序从键盘一个m*n(m,n=10)的矩阵存入数组a
8、,从矩阵左上角开始,以从右上到左下的斜线方向为顺序输出所有元素的值。例如有4*5的矩阵为 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20则输出顺序是1,2,6,3,7,11,4,8,12,16,5,9,13,17,10,14,18,15,19,20PROGRAM p435(Input,Output); VAR i,j,k,m,n:Integer;a:ARRAY1.10,1.10 OF Integer; BEGIN Readln(m,n); FOR i:=1 TO m DOBEGIN FOR j:=1 TO n DO Read(ai,j);
9、ReadlnEND; FOR k:=1 TO m+n-1 DOBEGIN IF k=n THEN BEGIN i:=( ); j:=( ); END; ELSE BEGIN I:=k-4; J:=5;End;WHILE (i=1) DO BEGIN Write(ai,j,); i:=( ); j:=j-1; END; End; Writeln;END.4.36以下程序实现从终端按行读入一个44的二维数组,分别求出其主、次对角线上元素之和,其中变量sumz用以累加主对角线元素的和,sumc用以累加次对角线元素之和。请在()处填入正确内容。PROGRAM p436(Input,Output);VA
10、R a:ARRAY1.4,1.4 OF Integer; n,m,sumz,sumc:Integer;BEGIN FOR n:=1 TO 4 DO FOR m:=1 TO 4 DOReadln( ); sumz:=0;sumc:=0; FOR n:=1 TO 4 DOBEGIN sumz:=sumz+( ); m:=( ); sumc:=sumc+an,mEND; Writeln(sumz:3,sumc:3)END.4.37以下程序实现:对输入的一个55方阵,判别它是否为幻方。幻方具有如下性质:它的每行、每列和两个对角线上的元素之和都相等。请在()处填入正确内容。PROGRAM p437(In
11、put,Output);VAR a:ARRAY1.5,1.5 OF Integer; z,f,colum,line,i,j:Integer; yes:Boolean;BEGIN FOR i:=1 TO 5 DOBEGIN FOR j:=1 TO 5 DO Read(ai,j); Readln;END; z:=0;f:=0;yes:=True; FOR i:=1 TO 5 DOBEGIN colum:=0;line:=0; FOR j:=1 TO 5 DO BEGIN line:=line+ai,j; colum:=colum+( ); IF i=j THEN z:=z+ai,j; IF i+j
12、=6 THEN f:=f+ai,j; END; IF linecolum THEN ( ); END;IF NOT yes OR (zf) OR (fline) THENWriteln(It is NOT magic square!) ELSE Writeln(It is magic square!)END.4.38*程序中调用过程merge把按升序存放在a,b数组中的两个数列归并到c数组中,归并后的数列仍按升序存放。请在()处填入正确内容。PROGRAM p438(Input,Output);CONST MA=5;MB=3;MC=MA+MB;TYPE arra=ARRAY 1.MA OF I
13、nteger;arrb=ARRAY 1.MB OF Integer;arrc=ARRAY 1.MC OF Integer;VAR a:arra; b:arrb; c:arrc; i:Integer;PROCEDURE merge(a:arra;b:arrb;VAR c:arrc);VAR i,IA,IB,IC:Integer;BEGIN IA:=1;IB:=1;IC:=1; WHILE (IA=MA) AND (IB=MB) DO BEGINIF aIA=bIB THEN BEGIN cIC:=( ); ( ) END ELSE BEGIN cIC:=( ); ( ) END;IC:=IC+1
14、END; IF (IA=MA) THENFOR i:=IA TO MA DO BEGIN cIC:=( ); IC:=IC+1 END;IF (IB0 DOBEGIN ai:=y MOD 2; y:=y DIV 2; i:=i+1END; FOR j:=i-1 DOWNTO 1 DOWrite(aj); WritelnEND. 给出该程序的运行结果。442有以下程序:PROGRAM p442(Input,Output);CONST N=6;TYPE colarr=ARRAY1.N OF Integer;VAR a:colarr;i,j,p,t:Integer;BEGIN FOR i:=1 TO
15、 n DO Read(ai); Readln; FOR j:=1 TO n-1 DO BEGINp:=j;FOR i:=j TO n DO IF aiap THEN p:=i;t:=ap;ap:=aj;aj:=t; END; FOR i:=1 TO n DO BEGINWrite(ai:2);IF (i MOD 3)=0 THEN Writeln ENDEND.若输入指定数据:725194回车,给出程序的运行结果。443有以下程序:PROGRAM p443(Input,Output);VAR i,j,n,temp:Integer; a:ARRAY1.100 OF Integer;flag:Bo
16、olean;BEGIN Read(n);FOR i:=1 TO n DO Read(ai); Readln; flag:=True;i:=1; WHILE (iaj+1 THEN BEGIN temp:=aj; aj:=aj+1; aj+1:=temp; flag:=True END; i:=i+1 END; FOR i:=1 TO n DO Write(ai:2); WritelnEND.若输入指定数据:6172367回车,给出程序的运行结果。5.2填空题5.48、过程sum按参数mode指出的方式,计算二维数组a中的各行或各列元素之和,并把它存入一维数组b中,mode=r 时将数组中第i行
17、元素之和存入bimode=c时,将数组中第i列元素之和存入bi i=(1,2,3,N)有关常数和类型定义如下: CONST N=32; TYPE AT=ARRAY1.N,1.N OF Integer;BT=ARRAY1.N OF Integer;请在( )内填上适当内容。procedure sum(var a:AT;var b:BT; mode:char);VAR i,j:Integer;BEGIN FOR i:=1 TO N DO ( ); FOR i:=( )DOFOR j:=( )DO CASE mode OF r: ( ); c: ( ); ENDEND;5.49、*已知有函数定义:
18、FUNCTION fn(a,b,c:Real):Real; BEGIN fn:=sin(a)/(sin(a-b)*sin(a-c) END;请填写完整的调用此函数的语句计算下列m值:m=+调用语句:m:=( ) 5.50、*已知函数说明如下: function fun(n:integer):integer; begin if n=0 then fun:=0 else if n0 then fun:=fun(n-2)else fun:=fun(n+3) end;则函数调用fun(5) 的值为( ),它共执行了( )次函数体,fun(fun(-2)的值为( ),它共执行了( )次函数体。5.51P
19、ASCAL中值形参与变量形参的主要区别是:( )的改变不影响实参的值,而( )的改变影响影响实参的值。552、设有过程说明: procedure silly(x:integer;var y:integer);var z:integer;beginx:=10;y:=12;z:=14end;执行以下语句后输出结果为();x:=1;y:=2;z:=3;silly(y,x);writeln(x:2,y:2,z:2);5.54、设有一函数子程序定义如下:function fun(x,y,z:integer):integer;begin fun:=z-y div x;end;执行语句m:=fun(fun(
20、2,4,6),6,8) 后变量m的值是( )5.55、设有以下函数说明:function digit(num,pos:integer):integer;var i:integer;begin num:=abs(num); for i:=1 to pos-1 do num:=num div 10; digit:=num mod 10end;则执行函数调用语句digit(31965,2) 后的函数值为( )执行函数调用语句digit(4650,6) 后的函数值为( )5.56*过程binary按主程序传递过来的参数,实现折半查找,其中x为待查找数,a为一个有序的一维数组,n为数组元素个数,foun
21、d为是否查找到的标志。请在()内填入适当的内容。PROCEDURE binary(x:Integer;a:arr1;n:Integer);VAR low,high,mid:Integer; found:Boolean;BEGIN low:=1;high:=( );found:=False;WHILE ( ) AND (NOT found) DO BEGIN mid:=( ); IF (xamid) THEN( ) ELSE IF (xmax then max:=ai,j;if( ) then if ai,j9 THENntoc:=Chr(a-10+Ord(A) ELSEntoc:=Chr( )
22、END;BEGIN k:=1; Readln(a); WHILE (k=4) AND ( ) DO BEGIN sk:=ntoc( ); a:=a DIV 16; k:=k+1 END;FOR a:=( ) DO Write(sa); WritelnEND.5.59下列程序是验证10000以内能被11整除的正整数颠倒后也必能被11整除。其中函数ReverseDigits是把整数值颠倒过来作为它的函数值。请将程序填写完全。例如:143能被11整除,则其颠倒后的341也能被11整除。PROGRAMp559(Output); VAR i,j,ri:Integer;right:Boolean; FUNCTION ReverseDigits(n:Integer):Integer; VAR rn:Integer; BEGIN rn:=( ); WHILE n0 DO BEGIN rn:=rn*10+n MOD 10; n:=n DIV 10 END; ReverseDigits:=( ) END;BEGIN right:=True; FOR j:=1 TO 999 DO BEGIN i:=11*j; _; IF ri MOD 110 THEN BEGIN Writeln(i,ri,
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1