当前位置:文档之家› 宁波市第26届中小学生程序设计竞赛

宁波市第26届中小学生程序设计竞赛

宁波市第26届中小学生程序设计竞赛小学组初赛试题一、选择题(每题2分,共30分。

每小题只有唯一一个正确答案)1.二进制数(1011101)2的值是()(A)94 (B)93 (C)62 (D)612.每个不同的二进制数可以表示一种颜色,赤、橙、红、绿、青、蓝、紫这7种颜色,最少需要几位二进制数来表示()3.以下运算结果为False的是()(A)not (5>5) (B) (5>=4) and (7<7) (C)not (false) (D) (5<4) or (5>=5)源程序的扩展民是()(A) p (B) psc (C)pas (D)pascal5.计算机的中央处理器的组成部件是()(A)控制器和存储器(B)存储器和运算器(C)控制器和运算器(D)控制器、存储器和运算器6.宁波市中小学程序设计竞赛自从首届举办以来,除了其中有一届因举办时间从下半年调整到次年的上半年而没有举行外,每年举办一次。

首届宁波市中小学程序设计竞赛是哪一年举办的(A)1984年 (B) 1985年(C)1986年(D)1987年7.已知一维数组定义a:array[1..100]of longint;每个元素占4个字节地址。

已知a[1]的开始地址为第10000个字节处,问a[11]的开始地址是第几个字节:()8.在宁波市中小学生程序设计竞赛上机复赛中,阅卷老师会批改以下的哪些(个)文件( )(A)先批改选手的源程序文件,如果找不到会批改可执行文件(B)先批改选手的可执行文件,如果找不到会批改源程序文件(C)只批改选手编译生成的可执行文件(D)只批改选手的源程序文件9.以下哪些(个)行为是不符合青少年网络文明公约的:()(A)相信绝大多数的网友是真诚的,随意与网友约会(B)沉溺于网络游戏,影响学习(C)上电脑课时下载大量迷幻类、穿越类的小说,以便晚上睡觉躲被窝看(D)以上都是10.在Free Pascal编程时,你写了一下的程序()var n:longint;beginassign(input,’a,txt’);reset(input);运行该程序时,返回如右图所示的错误信息,这是由于(A)当前目录下找不到输入文件“”(B)源程序存在2号语法错误(C)输入的值与变量n不匹配(D)Pascal编译器没有正确安装11.有以下的程序:var s:string;beginreadln(s);writeln(s[1]);end.该程序运行时,输入如下的”ABC”后按回车键,输出为 ( ) (A) 1 (B)字符‘A’(C)字符‘A’的ASCII码65 (D)字符串”ABC”12.宁波市程序设计竞赛使用的Free 中integer型数据的是表示范围是( )(A)-32768~32767 (B)约正负21亿之间(C)0~65536 (D)不一定13.在Pascal程序中,以下变量名称正确的是 ( )(A)begin (B)2011xx (C)hello (D)array14.以下程序段结构,总体上看是属于哪个基本结构()for i:=1 to doif i mod 2=0 then s:=s+1;(A)顺序结构(B)循环结构(C)选择结构 (D)树型结构15.进行在线游戏时,①用户登录;②进入在线游戏网;③选择游戏伙伴、开始游戏;④选择游戏室。

正确的次序是()(A)①②④③ (B)②①④③ (C)①②③④ (D)②①③④二.问题求解(每题5分,共10分)1.有三个正整数x,y和z,它们相加之和等于21,且x≤y≤z。

显然x=1,y=1,z=19是一组解,x=5,y=6,z=10是另一组解。

请问共有几组解呢2.在四行四列的表格中放有16枚硬币(每格1枚硬币)以1表示正面朝上,0表示反面朝上。

一次翻硬币是指,要么把某一行整行反转,要么把某一列整列反转。

某一行或某一列反转后,这一行上原来正面朝上的全变反面朝上,原来反面朝上的全变为正面朝上了。

原来的硬币状态如右图所示(图中有7枚硬币正面朝上,9枚硬币反面朝上),经若干次整行、右图中最多可以使多少枚硬币正面朝上使最多枚硬币正面朝上时最少需要翻几次三.阅读程序,求程序运行输出结果(每题8分,共32分)第1题:program xx2011_1;var n,i,c:longint;ave,s:extended;beginread(n);ave:=0;for i:=1 to n do beginread(f[i]);ave:=ave+f[i];end;ave:=ave/n;c:=0;for i:=1 to n doif f[i]<ave then c:=c+1;writeln(ave:0:2,’‘,c);end.第2题:program xx2011_2;var n,i,x,p,s:longint;read(n,x);s:=0;p:=1;for i:=1 to n do begin p:=p*x;s:=s+p;end;writeln(s);end.第3题:program xx2011_3;const maxn=100000;varf:array[1..maxn]of longint;stack:array[1..maxn,1..2]of longint; n,i,j,h,t,last,x,s:longint;beginread(n);for i:=1 to n do read(f[i]);stack[1,1]:=1;stack[1,2]:=n;last:=2;while last>1 do beginlast:=last-1;h:=stack[last,1];t:=stack[last,2];i:=h;j:=t;x:=f[h];while i<j do beginwhile(i<j)and(f[j]<x) do j:=j-1; if i<j then beginf[i]:=f[j];i:=i+1;end;while (i<j)and(f[i]>x) do i:=i+1; if i<j then beginf[j]:=f[i];j:=j-1;end;end;f[i]:=x;if(h<i-1) then beginstack[last,1]:=h; stack[last,2]:=i-1;last:=last+1; end;if(i+1<t) then beginstack[last,1]:=i+1;stack[last,2]:=t;last:=last+1; end;end;s:=f[2]-f[1];for i:=3 to n do s:=s+f[i]-f[i-1];end.第4题program xx2011_4;varn,a,b,c,d:longint;procedure matric(var a,b,c,d:longint;n:longint); var a1,b1,c1,d1,a2,b2,c2,d2,a3,b3,c3,d3:longint; beginif n=1 then begin a:=0;b:=1;c:=1;d:=1;exit;end; matric(a1,b1,c1,d1,n div 2);matric(a2,b2,c2,d2,n div 2);a3:=a1*a2+b1*c2;b3:=a1*b2+b1*d2;c3:=c1*a2+d1*c2;d3:=c1*b2+d1*d2;if n mod 2=1 then begina:=b3;b:=a3+b3;c:=d3;d:=c3+d3;endelse begina:=a3;b:=b3;c:=c3;d:=d3;end;end;beginread(n);if n<3 then writeln(1)else begin输入1:输入2:matric(a,b,c,d,n-2);writeln(c+d);end;end.四.程序填空(前5空每空2分,后6空每空3分,共28分)第1题:幻方把1至n×n的正整数填在n行n列的表格内,使每一行、每一列和二条多角线上n个数之和都相等。

这样的正方形表格叫做幻方。

如右图所示是一个3行3列的幻方。

下面的程序生成一个行(列)数为奇数的幻方。

如果输入的行列数n是偶数,输出字符串”not odd number!”,否则按一下的方法生成幻方:1.第一个数1填入第一行最中间的一列;2.以后每次填下一个数时,填入的位置为:(1)如果已填的数的个数为n的倍数,则填入下一行;(2)否则填入上一行右一列。

如果向上越界,则填至最后一行;如果向右越界,填至第一列。

生成的数字保存在二维数组a中,程序输出n行,每行n个数据。

【样例输入】3【样例输出】8 1 63 5 749 2请将程序补充完整。

program xx2011_5;const maxn=1001;var n,i,j,p:longint;a:array[1..maxn,1..maxn]of longint; beginreadln(n);if n mod 2=0 then beginwrtieln(‘not odd number!’);;end;i:=1;;for p:=1 to n*n do begina[i,j]:=p;if then i:=i+1else begini:=i-1;j:=j+1;if then i:=n;if j>n then j:=1;end;end;for i:=1 to n do beginfor j:=1 to n-1 dowrite(a[i,j],’‘);;end;end.第2题:完美覆盖以1×2的多米诺骨牌去覆盖n×m的棋盘,当棋盘中的每一格都刚好被一块多米诺骨牌覆盖时,这种覆盖叫多米诺骨牌的完美覆盖。

如下图所示,2行3列的棋盘,有3种完美覆盖方案。

以下程序求得n×m棋盘的完美覆盖总方案数。

程序从第1行第1列开始,按照1行1列、1行2列、1行3列、…、1行m列、2行1列、2行2列、2行3列、…、2行m列、…n行1列、n行2列、n 行3列、…、n行m列的次序,逐格尝试各格子的不同覆盖方案。

以f[i,j]=0表示第i行j列格子还没有被覆盖,以f[i,j]=1表示第i 行j列格子被横向覆盖,以f[i,j]=2表示第i行j列格子被纵向覆盖,覆盖的总方案数在变量ans中求得。

请将程序补充完整。

program xx2011_6;const maxn=100;maxm=100;varn,m,i,j:longint;ans:extended;f:array[1..maxn,1..maxm]of longint;procedure domino(i,j:longint); beginif i>n then begin;exit;end;if thenbeginif j<m thendomino(i,j+1)elsedomino( ); endelsebeginif thenbeginf[i,j]:=1;f[i,j+1]:=1;if j<m thendomino(i,j+1)elsedomino( ); f[i,j]:=0;f[i,j+1]:=0;end;if thenbeginf[i,j]:=2;f[i+1,j]:=2;if j<m thendomino(i,j+1)elsedomino( ); f[i,j]:=0;f[i+1,j]:=0;end;end;end;beginread(n,m);for i:=1 to n dofor j:=1 to m dof[i,j]:=0;ans:=0;domino( );writeln(ans:0:0);end.。

相关主题