华舍实验学校信息学竞赛练习二1.docx

上传人:b****1 文档编号:94469 上传时间:2023-04-28 格式:DOCX 页数:62 大小:49.97KB
下载 相关 举报
华舍实验学校信息学竞赛练习二1.docx_第1页
第1页 / 共62页
华舍实验学校信息学竞赛练习二1.docx_第2页
第2页 / 共62页
华舍实验学校信息学竞赛练习二1.docx_第3页
第3页 / 共62页
华舍实验学校信息学竞赛练习二1.docx_第4页
第4页 / 共62页
华舍实验学校信息学竞赛练习二1.docx_第5页
第5页 / 共62页
华舍实验学校信息学竞赛练习二1.docx_第6页
第6页 / 共62页
华舍实验学校信息学竞赛练习二1.docx_第7页
第7页 / 共62页
华舍实验学校信息学竞赛练习二1.docx_第8页
第8页 / 共62页
华舍实验学校信息学竞赛练习二1.docx_第9页
第9页 / 共62页
华舍实验学校信息学竞赛练习二1.docx_第10页
第10页 / 共62页
华舍实验学校信息学竞赛练习二1.docx_第11页
第11页 / 共62页
华舍实验学校信息学竞赛练习二1.docx_第12页
第12页 / 共62页
华舍实验学校信息学竞赛练习二1.docx_第13页
第13页 / 共62页
华舍实验学校信息学竞赛练习二1.docx_第14页
第14页 / 共62页
华舍实验学校信息学竞赛练习二1.docx_第15页
第15页 / 共62页
华舍实验学校信息学竞赛练习二1.docx_第16页
第16页 / 共62页
华舍实验学校信息学竞赛练习二1.docx_第17页
第17页 / 共62页
华舍实验学校信息学竞赛练习二1.docx_第18页
第18页 / 共62页
华舍实验学校信息学竞赛练习二1.docx_第19页
第19页 / 共62页
华舍实验学校信息学竞赛练习二1.docx_第20页
第20页 / 共62页
亲,该文档总共62页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

华舍实验学校信息学竞赛练习二1.docx

《华舍实验学校信息学竞赛练习二1.docx》由会员分享,可在线阅读,更多相关《华舍实验学校信息学竞赛练习二1.docx(62页珍藏版)》请在冰点文库上搜索。

华舍实验学校信息学竞赛练习二1.docx

华舍实验学校信息学竞赛练习二1

4.2填空题

4.29下面的程序从键盘接收任意6个数放入数组a中,设这6个数为:

8 1 4 2 5 6,则可输出一个具有如下内容的方阵。

8 1 4 2 5 6

6 8 1 4 2 5 

5 6 8 1 4 2

2 5 6 8 1 4 

4 2 5 6 8 1

1 4 2 5 6 8 

请填空完成该程序。

PROGRAMp429(Input,Output);

VARa:

ARRAY[1..6]OFInteger;

i,j,k:

Integer;

BEGIN

FORi:

=1TO6DO

Read();

Readln;

FORi:

=1TO6DO

BEGIN

IFi=1THENk:

=1

ELSEk:

=();

FORj:

=1TO()DO

BEGIN

Write(a[k]:

2);

IFk=6THENk:

=1

ELSEk:

=()

END;

Writeln

END

END.

4.30下面的程序最多可输入100位学生的姓名,姓名全由大写英文字母组成,输入‘?

’后则停止输入,然后按字典顺序输出这些姓名。

请填空完成该程序。

PROGRAMp430(Input,Output);

CONSTmax=100;length=20;

TYPEstring=PACKEDARRAY[1..length]OFChar;

VARname:

ARRAY[1..max]OFstring;

t:

string;

i,j,count:

Integer;

BEGIN

i:

=1;

Readln(name[i]);

WHILEname[i]<>’?

’DO

BEGIN

();

Readln(name[i])

END;

count:

=();

FORi:

=1TO()DO

BEGIN

FORj:

=i+1TOcountDO

IFname[i]()name[j]THEN

BEGIN

t:

=name[i];

name[i]:

=name[j];

name[j]:

=t

END;

Writeln()

END

END.

4.31在下列程序中,当输入一个给定的数n后,能输出所有不超过n的、其平方由左右对称的数字组成的数。

例如:

n=23,则输出:

1,2,3,11,22。

它们的平方依次是:

1,4,9,121,484,都是左右对称的数字组成的数。

请填空完成该程序。

PROGRAM p431(Input,Output);

CONSTmax=1000;

VARm,n,i,j,s:

Integer;

d:

ARRAY[0..max]OFInteger;

BEGIN

Readln(n);

FORm:

=1TOnDO

BEGIN

{计算m的平方且存放于s}

()

{把组成数s的每位数字存放入数组d中}

j:

=0;

WHILEs>0DO

BEGIN

j:

=j+1;

d[j]:

=sMOD10;

()

END;

{判断组成数s的数字是否左右对称}

 i:

=1;

WHILE(d[i]=d[j])AND(i

BEGIN

i:

=i+1;j:

=j-1

END;

{若对称则输出}

 IFi>=jTHENWriteln()

END

END.

4.32*下面程序实现将数组a赋予如下的值,请填空完成该程序。

         1  1  1  1  1

         4  1  1  1  1

         3  4  1  1  1

         2  3  4  1  1

         1  2  3  4  1

PROGRAM P432;

VARa:

ARRAY[1..5,1..5]OFInteger;

i,j,k:

Integer;

BEGIN

FORi:

=1TO5DO

FORj:

=1TO5DO

IF(i-j=4)OR()THENa[i,j]:

=1

ELSEBEGIN

k:

=();

CASEkOF

1:

a[i,j]:

=4;

2:

a[i,j]:

=();

3:

a[i,j]:

=2

END;

END

END.

4.33下面程序将n个学生的英文成绩从键盘输入,按0~59分、60~69分、70~79分、80~89分和90~100分分组统计人数。

PROGRAMp433(Input,Output);

CONSTn=20;

VARi,k:

Integer;

s:

ARRAY[1..5]OFInteger;

a:

ARRAY[1..n]OFInteger;

BEGIN

FORi:

=1TO()DO

s[i]:

=0;

FORi:

=1TO()DO

BEGIN

();

IFa[i]>=90THENk:

=1

ELSEIFa[i]>=80THENk:

=2

ELSEIFa[i]>=70THENk:

=3

ELSEIFa[i]>=60THENk:

=4

ELSEk:

=5;

s[k]:

=()

END;

Readln;

FORi:

=1TO5DO

Write(s[i]:

3);

Writeln

END.

4.34类型arr为:

TYPE arr=ARRAY[1..16]OFInteger;,已知数组a中有15个整数已按从小到大的顺序排列,过程insertone把任意整数b填入a中并使a中数据仍然有序。

PROCEDUREp434(VARa:

arr;b:

Integer);

VARk:

Integer;

BEGIN

k:

=();

WHILE(k>1)AND()DO

BEGIN

a[k]:

=a[k-1];

k:

=k-1

END;

a[k]:

=()

END;

4.35*下面程序从键盘一个m*n(m,n<=10)的矩阵存入数组a,从矩阵左上角开始,以从右上到左下的斜线方向为顺序输出所有元素的值。

例如有4*5的矩阵为

12345

678910

1112131415

1617181920

则输出顺序是

1,2,6,3,7,11,4,8,12,16,5,9,13,17,10,14,18,15,19,20

PROGRAMp435(Input,Output);

VARi,j,k,m,n:

Integer;

a:

ARRAY[1..10,1..10]OFInteger;

BEGIN

Readln(m,n);

FORi:

=1TOmDO

BEGIN

FORj:

=1TOnDO

Read(a[i,j]);

Readln

END;

FORk:

=1TOm+n-1DO

BEGIN

IFk<=nTHEN

BEGIN

i:

=();

j:

=();

END;

ELSEBEGIN

I:

=k-4;

J:

=5;

End;

WHILE(i<=m)AND(j>=1)DO

BEGIN

Write(a[i,j],’,’);

i:

=();

j:

=j-1;

END;

End;

Writeln;

END.

4.36以下程序实现从终端按行读入一个4*4的二维数组,分别求出其主、次对角线上元素之和,其中变量sumz用以累加主对角线元素的和,sumc用以累加次对角线元素之和。

请在(  )处填入正确内容。

PROGRAMp436(Input,Output);

VAR

a:

ARRAY[1..4,1..4]OFInteger;

n,m,sumz,sumc:

Integer;

BEGIN

FORn:

=1TO4DO

FORm:

=1TO4DO

Readln();

sumz:

=0;sumc:

=0;

FORn:

=1TO4DO

BEGIN

sumz:

=sumz+();

m:

=();

sumc:

=sumc+a[n,m]

END;

Writeln(sumz:

3,sumc:

3)

END.

4.37以下程序实现:

对输入的一个5╳5方阵,判别它是否为幻方。

幻方具有如下性质:

它的每行、每列和两个对角线上的元素之和都相等。

请在(   )处填入正确内容。

PROGRAMp437(Input,Output);

VAR

a:

ARRAY[1..5,1..5]OFInteger;

z,f,colum,line,i,j:

Integer;

yes:

Boolean;

BEGIN

FORi:

=1TO5DO

BEGIN

FORj:

=1TO5DORead(a[i,j]);

Readln;

END;

z:

=0;f:

=0;yes:

=True;

FORi:

=1TO5DO

BEGIN

colum:

=0;line:

=0;

FORj:

=1TO5DO

BEGIN

line:

=line+a[i,j];

colum:

=colum+();

IFi=jTHENz:

=z+a[i,j];

IFi+j=6THENf:

=f+a[i,j];

END;

IFline<>columTHEN();

END;

IFNOTyesOR(z<>f)OR(f<>line)THEN

Writeln(‘ItisNOTmagicsquare!

’)

ELSE

Writeln(‘Itismagicsquare!

’)

END.

4.38*程序中调用过程merge把按升序存放在a,b数组中的两个数列归并到c数组中,归并后的数列仍按升序存放。

请在(   )处填入正确内容。

PROGRAMp438(Input,Output);

CONST

MA=5;MB=3;MC=MA+MB;

TYPEarra=ARRAY[1..MA]OFInteger;

arrb=ARRAY[1..MB]OFInteger;

arrc=ARRAY[1..MC]OFInteger;

VAR

a:

arra;b:

arrb;c:

arrc;i:

Integer;

PROCEDUREmerge(a:

arra;b:

arrb;VARc:

arrc);

VAR

i,IA,IB,IC:

Integer;

BEGIN

IA:

=1;IB:

=1;IC:

=1;

WHILE(IA<=MA)AND(IB<=MB)DO

BEGIN

IFa[IA]<=b[IB]THEN

BEGIN

c[IC]:

=();

()

END

ELSE

BEGIN

c[IC]:

=();

()

END;

IC:

=IC+1

END;

IF(IA<=MA)THEN

FORi:

=IATOMADO

BEGIN

c[IC]:

=();

IC:

=IC+1

END;

IF(IB<=MB)THEN

FORi:

=IBTOMBDO

BEGIN

c[IC]:

=();

IC:

=IC+1

END;

END;

BEGIN

FORi:

=1TOMADO

a[i]:

=i+i;

FORi:

=1TOMBDO

b[i]:

=i*i;

MERGE(a,b,c);

FORi:

=1TOMADO

Write(a[i]:

3);

Writeln;

FORi:

=1TOMBDO

Write(b[i]:

3);

Writeln;

FORi:

=1TOMCDO

Write(c[i]:

3);

Writeln

END.

4.3阅读程序

4.39*设有如下程序:

PROGRAMP439(Input,Output);

VARr1:

RECORD

a:

Integer;

r2:

RECORD

a1:

0..1000;

b:

ARRAY[1..5,1..5]OFInteger;

END;

END;

i,j:

Integer;

BEGIN

WITHr1,r2DO

BEGIN

a:

=0;a1:

=0;

FORi:

=1TO5DO

FORj:

=1TO5DO

b[i,j]:

=i+j-1;

FORi:

=1TO5DO

BEGIN

a:

=a+b[i,i];

FORj:

=1TO5DO

IFi+j=6THEN

a1:

=a1+b[i,j];

END;

Writeln(a:

2,’’,a1:

2);

END;

END.

给出该程序的运行结果。

4.40设有矩阵A:

   2  1  2

A= 2  3  1

2  2  1

(1)执行语句

FOR i:

=1TO3DO

FORj:

=1TO3DO

c[i,j]:

=a[a[i,j],a[i,j]]

后,C的结果是什么?

(2)执行语句

FOR i:

=1TO3DO

FORj:

=1TO3DO

a[i,j]:

=a[a[i,j],a[i,j]]

后,a的结果是什么?

4.41有如下程序:

PROGRAMp441(Input,Output);

VARi,j,y:

Integer;

A:

ARRAY[1..8]OFInteger;

BEGIN

i:

=1;y:

=18;

WHILEy>0DO

BEGIN

a[i]:

=yMOD2;

y:

=yDIV2;

i:

=i+1

END;

FORj:

=i-1DOWNTO1DO

Write(a[j]);

Writeln

END.

给出该程序的运行结果。

4.42有以下程序:

PROGRAMp442(Input,Output);

CONST

N=6;

TYPE

colarr=ARRAY[1..N]OFInteger;

VAR

a:

colarr;i,j,p,t:

Integer;

BEGIN

FORi:

=1TOnDORead(a[i]);

Readln;

FORj:

=1TOn-1DO

BEGIN

p:

=j;

FORi:

=jTOnDO

IFa[i]

=i;

t:

=a[p];a[p]:

=a[j];a[j]:

=t;

END;

FORi:

=1TOnDO

BEGIN

Write(a[i]:

2);

IF(iMOD3)=0THENWriteln

END

END.

若输入指定数据:

7 2 5 1 9 4<回车>,给出程序的运行结果。

4.43有以下程序:

PROGRAMp443(Input,Output);

VAR

i,j,n,temp:

Integer;

a:

ARRAY[1..100]OFInteger;

flag:

Boolean;

BEGIN

Read(n);

FORi:

=1TOnDORead(a[i]);

Readln;

flag:

=True;i:

=1;

WHILE(i<=n-1)ANDflagDO

BEGIN

flag:

=False;

FORj:

=1TOn-1DO

IFa[j]>a[j+1]THEN

BEGIN

temp:

=a[j];

a[j]:

=a[j+1];

a[j+1]:

=temp;

flag:

=True

END;

i:

=i+1

END;

FORi:

=1TOnDO

Write(a[i]:

2);

Writeln

END.

若输入指定数据:

6 1 7 2 3 6 7<回车>,给出程序的运行结果。

5.2填空题

5.48、过程sum按参数mode指出的方式,计算二维数组a中的各行或各列元素之和,并把它存入一维数组b中,

mode=’r’时将数组中第i行元素之和存入b[i]

mode=’c’时,将数组中第i列元素之和存入b[i]

i=(1,2,3,…N)

有关常数和类型定义如下:

CONSTN=32;

TYPEAT=ARRAY[1..N,1..N]OFInteger;

BT=ARRAY[1..N]OFInteger;

请在()内填上适当内容。

proceduresum(vara:

AT;varb:

BT;mode:

char);

VARi,j:

Integer;

BEGIN

FORi:

=1TONDO();

FORi:

=()DO

FORj:

=()DO

CASEmodeOF

‘r’:

();

‘c’:

();

END

END;

5.49、*已知有函数定义:

FUNCTIONfn(a,b,c:

Real):

Real;

BEGIN

fn:

=sin(a)/(sin(a-b)*sin(a-c))

END;

请填写完整的调用此函数的语句计算下列m值:

m=

+

+

调用语句:

m:

=()

5.50、*已知函数说明如下:

functionfun(n:

integer):

integer;

begin

ifn=0thenfun:

=0

elseifn>0thenfun:

=fun(n-2)

elsefun:

=fun(n+3)

end;

则函数调用fun(5)的值为(),它共执行了()次函数体,fun(fun(-2))的值为(),它共执行了()次函数体。

5.51PASCAL中值形参与变量形参的主要区别是:

()的改变不影响实参的值,而()的改变影响影响实参的值。

5.52、设有过程说明:

proceduresilly(x:

integer;vary:

integer);

var

z:

integer;

begin

x:

=10;y:

=12;z:

=14

end;

执行以下语句后输出结果为(     );

x:

=1;y:

=2;z:

=3;

silly(y,x);

writeln(x:

2,y:

2,z:

2);

5.54、设有一函数子程序定义如下:

functionfun(x,y,z:

integer):

integer;

begin

fun:

=z-ydivx;

end;

执行语句m:

=fun(fun(2,4,6),6,8)后变量m的值是()

5.55、设有以下函数说明:

functiondigit(num,pos:

integer):

integer;

vari:

integer;

begin

num:

=abs(num);

fori:

=1topos-1do

num:

=numdiv10;

digit:

=nummod10

end;

则执行函数调用语句digit(31965,2)后的函数值为()

执行函数调用语句digit(4650,6)后的函数值为()

5.56*过程binary按主程序传递过来的参数,实现折半查找,其中x为待查找数,a为一个有序的一维数组,n为数组元素个数,found为是否查找到的标志。

请在( )内填入适当的内容。

PROCEDUREbinary(x:

Integer;a:

arr1;n:

Integer);

VAR

low,high,mid:

Integer;

found:

Boolean;

BEGIN

low:

=1;high:

=();found:

=False;

WHILE()AND(NOTfound)DO

BEGIN

mid:

=();

IF(x>a[mid])THEN

()

ELSEIF(x

()

ELSE

()

END;

IF()THENWriteln(‘found:

’,a[mid]:

3)

ELSEWriteln(‘notfound’)

END;

5.57*填空完成下列函数comp,其功能是:

计算方阵a中各奇数行元素的最大值减去a中各偶数行元素的最小值的差(其中类型arr为:

arr=ARRAY[1..10,1..10]OFInteger;)。

FUNCTIONcomp(a:

arr):

Integer;

VARi,j,max,min:

Integer;

BEGIN

max:

=a[1,1];min:

=a[2,1];

FORi:

=1TO10DO

FORj:

=1TO10DO

BEGIN

if()thenifa[i,j]>maxthenmax:

=a[i,j];

if()thenifa[i,j]

=a[i,j];

END;

()

END;

5.58填空完成下列程序,它可以把从键盘输入的一个十进制正整数(小于32767)转换为十六制数输出。

例如:

若输入230 则输出E6 (注意:

不能是00E6)若输入15029  则输出3AB5

PROGRAMp558(Input,Output);

VARa,k:

Integer;

s:

ARRAY[1..4]OFChar;

FUNCTIONntoc(a:

Integer):

Char;

BEGIN

IFa>9THEN

ntoc:

=Chr(a-10+Ord(‘A))

ELSE

ntoc:

=Chr()

END;

BEGIN

k:

=1;Readln(a);

WHILE(k<=4)AND()DO

BEGIN

s[k]:

=ntoc();

a:

=aDIV16;

k:

=k+1

END;

FORa:

=()DO

Write(s[a]);

Writeln

END.

5.59下列程序是验证10000以内能被11整除的正整数颠倒后也必能被11整除。

其中函数ReverseDigits是把整数值颠倒过来作为它的函数值。

请将程序填写完全。

例如:

143能被11整除,则其颠倒后的341也能被11整除。

PROGRAM p559(Output);

VARi,j,ri:

Integer;right:

Boolean;

FUNCTIONReverseDigits(n:

Integer):

Integer;

VARrn:

Integer;

BEGIN

rn:

=();

WHILEn<>0DO

BEGIN

rn:

=rn*10+nMOD10;

n:

=nDIV10

END;

ReverseDigits:

=()

END;

BEGIN

right:

=True;

FORj:

=1TO999DO

BEGIN

i:

=11*j;

___________________;

IFriMOD11<>0THEN

BEGIN

Writeln(i,ri,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2