《第十二届全国青少年信息学奥林匹克联赛初赛试题及答案普及组、C语言.docx》由会员分享,可在线阅读,更多相关《第十二届全国青少年信息学奥林匹克联赛初赛试题及答案普及组、C语言.docx(10页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第十二届全国青少年信息学奥林匹克联赛初赛试题及答案普及组、C语言第十二届全国青少年信息学奥林匹克联赛初赛试题及答案(普及组、C语言)普及组C语言二小时完成) 一、单项选择题(共20题,每题1.5分,共计30分。每题有且仅有一个正确答案) 1在下面各世界顶级的奖项中,为计算机科学与技术领域做出杰出贡献的科学家设立的奖项是()。A沃尔夫奖B诺贝尔奖C菲尔兹奖D图灵奖 2在下面各软件中,不属于NOIP竞赛(复赛)举荐运用的语言环境是()。Agcc/g+BTurbo PascalCRHIDEDfree pascal 3以下断电之后仍能保存数据的有()。A寄存器BROMCRAMD高速缓存 4Linux是
2、一种()。A绘图软件B程序设计语言C操作系统D网络阅读器 5CPU是()的简称。A硬盘B中心处理器C高级程序语言D核心寄存器 6在计算机中,防火墙的作用是()。A防止火灾扩散B防止网络攻击C防止计算机死机D防止运用者误删除数据 7在下列关于计算机语言的说法中,不正确的是()。APascal和C都是编译执行的高级语言 B高级语言程序比汇编语言程序更简单从一种计算机移植到另一种计算机上 CC+是历史上的第一个支持面对对象的计算机语言 D与汇编语言相比,高级语言程序更简单阅读 8在下列关于计算机算法的说法中,不正确的是()。A一个正确的算法至少要有一个输入 B算法的改进,在很大程度上推动了计算机科学
3、与技术的进步 C推断一个算法的好坏的主要标准是算法的时间困难性与空间困难性 D目前仍旧存在很多涉及到国计民生的重大课题,还没有找到能够在计算机上实施的有效算法 9在下列各种排序算法中,不是以“比较”作为主要操作的算法是()。A选择排序B冒泡排序C插入排序D基数排序 10在编程时(运用任一种高级语言,不肯定是C),假如须要从磁盘文件中输入一个很大的二维数组(例如1000*1000的double型数组),按行读(即外层循环是关于行的)与按列读(即外层循环是关于列的)相比,在输入效率上()。A没有区分B按行读的方式要高一些 C按列读的方式要高一些D取决于数组的存储方式 11在C语言中,表达式212的
4、值是()。A441B42C23D24 12在C语言中,推断a不等于0且b不等于0的正确的条件表达式是()。A!a=0 | !b=0B!(a=0)(b=0)C!(a=0b=0)Dab 13某个车站呈狭长形,宽度只能容下一台车,并且只有一个出入口。已知某时刻该车站状态为空,从这一时刻起先的出入记录为:“进,出,进,进,进,出,出,进,进,进,出,出”。假设车辆入站的依次为1,2,3,则车辆出站的依次为()。A1,2,3,4,5B1,2,4,5,7C1,4,3,7,6D1,4,3,7,2 14高度为n的均衡的二叉树是指:假如去掉叶结点及相应的树枝,它应当是高度为n-1的满二叉树。在这里,树高等于结点
5、的最大深度,根结点的深度为0,假如某个均衡的二叉树共有2381个结点,则该树的树高为()。A10B11C12D13 15与十进制数1770对应的八进制数是()。A3350B3351C3352D3540 16将5个数的序列排序,不论原先的依次如何,最少都可以通过()次比较。完成从小到大的排序。A6B7C8D9 17设A=B=D=ture,C=false,以下逻辑运算表达式值为真的有()。A(AB)(CD)B(ABD)C)CA(BCD)D(ABC)D 18(2010)16+(32)8的结果是()。A(8234)10B(202B)16C(20056)8D(100000000110)2 19设栈S的初
6、始状态为空,元素a,b,c,d,e依次入栈,以下出栈序列不行能出现的有()。Aa,b,c,e,dBb,c,a,e,dCa,e,c,b,dDd,c,e,b,a 20已知6个结点的二叉树的先根+遍历是1 2 3 4 5 6(数字为结点的编号,以下同),后根遍历是3 2 5 6 4 1,则该二叉树的可能的中根遍历是()。A3 2 1 4 6 5B3 2 1 5 4 6C2 1 3 5 4 6D2 3 1 4 6 5 二、问题求解(共2题,每题5分,共计10分) 1(找寻假币)现有80枚硬币,其中有一枚是假币,其重量稍轻,全部真币的重量都相同,假如运用不带砝码的天平称重,最少须要称几次,就可以找出假币
7、?你还要指出第1次的称重方法。请写出你的结果:_。2(取石子嬉戏)现有5堆石子,石子数依次为3,5,7,19,50,甲乙两人轮番从任一堆中任取(每次只能取自一堆,不能不取),取最终一颗石子的一方获胜。甲先取,问甲有没有获胜策略(即无论乙怎样取,甲只要不失误,都能获胜)?假如有,甲第一步应当在哪一堆里取多少?请写出你的结果:_。三、阅读程序写结果(共4题,每题8分,共计32分) 1.#include <stdio.h> int main() int i,u4,a,b,x,y=10; for(i=0;i<=3;i+) scanf(“%d“,ui); a=(u0+u1+u2+u3)
8、/7; b=u0/(u1-u2)/u3); x=(u0+a+2)-u(u3+3)%4; if(x>10) y+=(b*100-u3)/(uu0%3*5); else y+=20+(b*100-u3)/(uu0%3*5); printf(“%d,%dn“,x,y); return 0; /*注:本例中,给定的输入数据可以避开分母为0或下标越界。*/ 输入:9394 输出:_ 2.#include <stdio.h> main() int i,j,m=2,3,5,7,13; long t; for(i=0;i<=4;i+) t=1; for(j=1;j<mi;j+)
9、t*=2; printf(“%ld“,(t*2-1)*t); printf(“n“); 输出:_ 3.#include “stdio.h“ #define N 7 int fun(char s,char a,int n) int j; j=n; while(a<sj j>0) j-; return j; int main() char sN+1; int k,p; for(k=1;k<=N;k+) sk=A+2*k+1; printf(“%dn“,fun(s,M,N); 输出:_ 4.#include <stdio.h> void digit(long n,lon
10、g m) if(m>0) printf(“%2ld“,n%10); if(m>1) digit(n/10,m/10); printf(“%2ld“,n%10); main() long x,x2; printf(“Input a number:n“); scanf(“%ld“,x); x2=1; while(x2<x) x2*=10; x2/=10; digit(x,x2); printf(“n“); 输入:9734526 输出:_ 四、完善程序(前4空,每空2.5分,后6空,每空3分,共28分) 1(全排列)下面程序的功能是利用递归方法生成从1到n(n<10)的n个数
11、的全部可能的排列(不肯定按升序输出)。例如,输入3,则应当输出(每行输出5个排列): 123132213231321 312 程序: #include <stdio.h> int n,a10;/*a1,a2,an构成n个数的一个排列*/ long count=0;/*变量count记录不同排列的个数,这里用于限制换行*/ void perm(int k) int j,p,t; if(_) count+; for(p=1;p<=n;p+) printf(“%1d“,ap);/* “%1d“中是数字1,不是字母l */ printf(“ “); if(_) printf(“n“)
12、; return; for(j=k;j<=n;j+) t=ak; ak=aj;aj=t; _; t=ak; _; main() int i; printf(“Entry n:n“); scanf(“%d“,n); for(i=1;i<=n;i+) ai=i; _; 2.由键盘输入一个奇数P(P<100,000,000),其个位数字不是5,求一个整数S,使PS=1111.1(在给定的条件下,解s必存在)。要求在屏幕上依次输出以下结果: (1) S的全部数字。除最终一行外,每行输出50位数字。(2)乘积的数字位数。例1:输入P=13,由于13*8547=111111,则应输出(1
13、) 8547,(2) 6 例2:输入P=147,则输出结果应为(1) 755857898715041572184429327286470143613(2) 42,即等式的右端有42个1。程序: #include <stdio.h> main() long p,a,b,c,t,n; int bl; while(1) printf(“输入p,最终一位为1或3或7或9:n“); scanf(“%ld“,p); if(p%2!=0)(p%5!=0)/*假如输入的数符合要求,结束循环*/ _; a=0; n=0; while(a<p) a=a*10+1; n+;/*变量a存放部分右端项
14、,n为右端项的位数*/ t=0; do b=a/p; printf(“%1ld“,b); t+; if(_) printf(“n“); c=_;a=_;n+; while(c>0); printf(“nn=%ldn“,_); 一、选择一个正确答案代码(A/B/C/D/E),填入每题的括号内(每题1.5分,多选无分,共30分) 题号 1 2 4 5 6 7 8 9 10 选择 D B B C B B C A D D 题号 11 12 13 14 15 16 17 18 19 20 选择 C D C B C B B A C B 二、问题求解(共2题,每题5分,共计10分) 1.4次(1分)第
15、一步:分成3组:27,27,26,将前2组放到天平上(4分)。2.有获胜策略(1分)第1次在第5堆中取32颗石子(4分)。三、阅读程序写结果(共4题,每题8分,共计32分) 1.10,10(对1个数给4分,无逗号扣1分) 2.628496812833550336 (前2个对1个数给1分,后3个对1个数给2分) 3. 5 4.6 2 5 4 3 7 9 9 7 3 4 5 2 6(数字之间无空格扣2分) 四、完善程序(前4空,每空2.5分,后6空,每空3分,共28分) 1.k=ncount%5=0perm(k+1)ak=aj; aj=tperm(1) 2.breakt%50=0a-p*bc*10+1n-1