宁波市第26届中小学生程序设计竞赛小学组初赛试题一、选择题(每题2分,共30分。
每小题只有唯一一个正确答案)1.二进制数(1011101)2的值是()(A)94 (B)93 (C)62 (D)61分析:B 进制转换1*2^0+0*2^1+1*2^2+1*2^3+1*2^4+0*2^5+1*2^6=92.每个不同的二进制数可以表示一种颜色,赤、橙、红、绿、青、蓝、紫这7种颜色,最少需要几位二进制数来表示?()(A)8 (B)7 (C)4 (D)3分析:D 000、001、010、011、100、101、110、111 最少只要3位。
3.以下运算结果为False的是()(A)not (5>5) (B) (5>=4) and (7<7) (C)not (false) (D) (5<4) or (5>=5)分析:B (A):not(5>5)为true (B):(5>=4) and (7<7) 为false(C):not(false)为true (D):(5<4) or (5>=5) 为true4.Pascal源程序的扩展名是()(A)p (B) psc (C)pas (D)pascal分析:C5.计算机的中央处理器的组成部件是()(A)控制器和存储器(B)存储器和运算器(C)控制器和运算器(D)控制器、存储器和运算器分析:C中央处理器由控制器和运算器和一些寄存器组成6.宁波市中小学程序设计竞赛自从首届举办以来,除了其中有一届因举办时间从下半年调整到次年的上半年而没有举行外,每年举办一次。
首届宁波市中小学程序设计竞赛是哪一年举办的?(A)1984年(B) 1985年(C)1986年(D)1987年分析:B 这一年是2011年,第26届。
2011-26+1=1986,再减去没有举办的一届为1985年。
7.已知一维数组定义a:array[1..100]of longint;每个元素占4个字节地址。
已知a[1]的开始地址为第10000个字节处,问a[11]的开始地址是第几个字节:()分析:100408.在宁波市中小学生程序设计竞赛上机复赛中,阅卷老师会批改以下的哪些(个)文件( )(A)先批改选手的源程序文件,如果找不到会批改可执行文件(B)先批改选手的可执行文件,如果找不到会批改源程序文件(C)只批改选手编译生成的可执行文件(D)只批改选手的源程序文件分析:D9.以下哪些(个)行为是不符合青少年网络文明公约的:()(A)相信绝大多数的网友是真诚的,随意与网友约会(B)沉溺于网络游戏,影响学习(C)上电脑课时下载大量迷幻类、穿越类的小说,以便晚上睡觉躲被窝看(D)以上都是分析:D 常识题,ABC都不符合青少年网络文明公约。
10.在Free Pascal编程时,你写了一下的程序()var n:longint;beginassign(input,’a,txt’);reset(input);//输入文件重定向到a.txt文件read(n);close(input);//关闭输入文件运行该程序时,返回如右图所示的错误信息,这是由于(A)当前目录下找不到输入文件“a.txt”(B)源程序存在2号语法错误(C)输入的值与变量n不匹配(D)Pascal编译器没有正确安装分析:A exitcode=2 错误就是没有找到输入文件。
11.有以下的程序:var s:string;beginreadln(s);writeln(s[1]);end.该程序运行时,输入如下的”ABC”后按回车键,输出为( )(A) 1 (B)字符‘A’(C)字符‘A’的ASCII码65 (D)字符串”ABC”分析:B s[n](1<=n<=length(s))表示字符串s的第N个字符。
s[0]=chr(length(s))12.宁波市程序设计竞赛使用的Free Pascal2.0.4中integer型数据的是表示范围是( )(A)-32768~32767 (B)约正负21亿之间(C)0~65536 (D)不一定分析:A integer的范围为-2^15-1~2^15-113.在Pascal程序中,以下变量名称正确的是( )(A)begin (B)2011xx (C)hello (D)array分析:C begin、array都是pascal的保留字,2011xx数字不能在字母的前面。
14.以下程序段结构,总体上看是属于哪个基本结构()for i:=1 to doif i mod 2=0 then s:=s+1;(A)顺序结构(B)循环结构(C)选择结构(D)树型结构分析:B 总体上来看是循环结构。
15.进行在线游戏时,①用户登录;②进入在线游戏网;③选择游戏伙伴、开始游戏;④选择游戏室。
正确的次序是()(A)①②④③ (B)②①④③ (C)①②③④ (D)②①③④分析:B 常识题。
二.问题求解(每题5分,共10分)1.有三个正整数x,y和z,它们相加之和等于21,且x≤y≤z。
显然x=1,y=1,z=19是一组解,x=5,y=6,z=10是另一组解。
请问共有几组解呢?分析:37组解。
因为x≤y≤z所以3X≤X+Y+Z=21 即1<=X<=7.当X=1时 y+z=20,因为2y<=y+z=20 得 1<=Y<=10 有10组解当X=2时 y+z=19,因为2y<=y+z=19 得 2<=Y<=9.5 有8组解当X=3时 y+z=18,因为2y<=y+z=18 得 3<=Y<=9 有7组解可以得到规律:当X为偶数是比上一种少2组解,当X为奇数时比上一种少1组解。
10+8+7+5+4+2+1=37 Array 2.在四行四列的表格中放有16枚硬币(每格1枚硬币),以1表示正面朝上,0表示反面朝上。
一次翻硬币是指,要么把某一行整行反转,要么把某一列整列反转。
某一行或某一列反转后,这一行上原来正面朝上的全变反面朝上,原来反面朝上的全变为正面朝上了。
原来的硬币状态如右图所示(图中有7枚硬币正面朝上,9枚硬币反面朝上),经若干次整行、整列的翻转后,右图中最多可以使多少枚硬币正面朝上?使最多枚硬币正面朝上时最少需要翻几分析:13枚 ; 3次。
0 0 1 0 1 1 0 1 1 1 0 1 1 1 1 10 0 1 0 0 0 1 0 1 1 0 1 1 1 1 11 0 0 1 → 1 0 0 1 → 1 0 0 1 → 1 0 1 11 0 1 1 1 0 1 1 1 0 1 1 1 0 0 1三.阅读程序,求程序运行输出结果(每题8分,共32分)第1题:program xx2011_1;var n,i,c:longint;ave,s:extended;f:array[1..10000]of longint; begin read(n);ave:=0; for i:=1 to n do begin read(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.分析:80.00 3通过ave:=ave+f[i]; ave:=ave/n; 可知ave 就是f 数组的平均数ave=(73+76+83+91+77)/5=80由 if f[i]<ave then c:=c+1 可知c 统计f 数组中比平均数小的数的个数。
73<80,76<80,77<80 所以c=3保留两位小数后输出 80.00 3第2题:program xx2011_2;var n,i,x,p,s:longint;beginread(n,x);s:=0;p:=1;for i:=1 to n do beginp:=p*x;s:=s+p;end;writeln(s);end. 分析:65534列表 当i=1 时 p=2 当i=2 时 p=4 所以p=2^i ;所以 s=s+p=2^1+2^2+2^3+2^4+……+2^i=2^1+2^2+2^3+……+2^15设K=2^0+2^1+2^2+2^3+……+2^n ①所以2*K=2^1+2^2+2^4+……+2^(n+1) ②②-① 得K=2^(n+1)-1所以s=2^16-1-1=65534第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 dobeginwhile(i<j)and(f[j]<x) do j:=j-1;if i<j thenbeginf[i]:=f[j];i:=i+1;end;while (i<j)and(f[i]>x) do i:=i+1;if i<j thenbeginf[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];writeln(s);end.分析:输入1 输出 -20输入2 输出 -45输入1可以用手工模拟的得出f 数组为30 20 10 那么这个程序可能是排序。
20-30+10-20=-20对于输入2我们可以列一张表格原先的数列40 36 47 29 25 35 22 42 13 58第1次:i=1, j=10 x=40 得到的数列为 58 42 47 40 25 35 22 29 13 36第2次:i=5 j=10 x=25 得到的数列为 58 42 47 40 36 35 29 25 13 22第3次:得到的数列为 58 42 47 40 36 35 29 25 22 13可以看出这是从大到小进行排序所以最终得到的序列为 58 47 42 40 36 35 29 25 22 1347-58+42-47+40-42+36-40+35-36+29-35+25-29+22-25+13-22=-45第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 matric(a,b,c,d,n-2); writeln(c+d);end;end.分析:输入1:输出 2输入2:输出13输入1:当n=3是matric(0,0,0,1) 反回a=0,b=1,c=1,d=1 所以输出c+d=2输入2:我们可以从小数据入手N=1时输出1N=2时输出1N=3时输出2N=4时a3=1, b3=1,c3=1,d3=2 所以输出3N=5时a3=1,b3=1,c3=1,d3=2 所以输出5我们发现1+1=2,1+2=3, 2+3=5 可以看出这是一个斐波那契数列,所以第7项为13.四.程序填空(前5空每空2分,后6空每空3分,共28分)第1题:幻方把1至n×n的正整数填在n行n列的表格内,使每一行、每一列和二条多角线上n个数之和都相等。