NOIP2020提高组初赛(C语言)试题及答案
NOIP2020提高组初赛(C语言)试题及答案
第十四届(NOIP2020)信息学奥赛联赛提高组C语言初赛试题●● 全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效●● 一、单项选择题(共10题,每题1.5分,共计15分。每题有且仅有一个正确答案)。
1. 在以下各项中,(C )不是操作系统软件。A. SolarisB. LinuxC. SybaseD. Windows Vista E. Symbian 2.微型计算机中,控制器的基本功能是(A )。
A. 控制机器各个部件协调
B. 实现算术运算和逻辑运算
C. 存储各种控制信息
D.
获取外部信息E. 存放程序和数据  3. 设字符串S=”Olympic”,S的非空子串的数目是(B)。
A. 29
B. 28
C. 16
D. 17
E. 7 4.完全二叉树共有2*N-1个结点,则它的叶节点数是(C )。
A. N-1
B. 2*N
C. N
D. 2N-1
E. N/2 5.将数组{8, 23, 4, 16, 77, -5, 53, 100}中的元素按从大到小的顺序排列,每次可以交换任意两个元素,最少需要交换(B )次。
A. 4
B. 5
C. 6
D. 7
E. 8 6.设栈S的初始状态为空,元素a,b,c,d,e,f依次入栈S,出栈的序列为b,d,c,f,e,a,则栈S的容量至少应该是(D )。
A. 6
B. 5
C. 4
D. 3
E. 2 7. 与十进制数28.5625相等的四进制数是()。
A. 123.21
B. 131.22
C. 130.22
D. 130.21
E. 130.20 8.递归过程或函数调用时,处理参数和返回地址,通常使用一种称为(E)的数据结构。
A. 队列
B. 多维数组
C. 线性表
D. 链表
E. 栈9. TCP/IP是一组构成互联网基础的网络协议,字面上包括两组协议:传输控制协议(TCP)和网际协议(IP)。TCP/IP 协议把Internet网络系统描述成具有四个层次功能的网络模型,其中提供源节点和目的节点之间的信息传输服务,包括寻址和路由器选择等功能的是(B)。
A. 链路层B.网络层C. 传输层D. 层E.会话层10.对有序数组{5, 13, 19, 21, 37, 56, 64, 75, 88, 92, 100}进行二分查,等概率的情况下查成功的平均查长度(平均比较次数)是(C )。
A. 35/11
B. 34/11
C. 33/11
D. 32/11
E. 34/10 二、不定项选择题(共10题,每题1.5
分,共计15分。每题正确答案的个数大于或等于1。多选或少选均不得分)。
11. 在下列关于图灵奖的说法中,正确的有(ABD )。
A. 图灵奖是美国计算机协会于1966年设立的,专门奖励那些对计算机事业作出重要贡献的个人
B. 图灵奖有“计算机界诺贝尔奖”之称
C. 迄今为止,还没有华裔计算机科学家获此殊荣
D. 图灵奖的名称取自计算机科学的先驱、英国科学家阿兰•图灵12.计算机在工作过程中,若突然停电,(AC )中的信息不会丢失。
A. 硬盘
B. CPU
C.ROM
D. RAM 13. 设A=true,B=false,C=true,D=false,以下逻辑运算表达式值为真的有(BC )。
A. (A∧B)∨(C∧D∨ A)
B. (( A∧B)∨C)∧ D
C. (B∨C∨D)∨D∧A
D. A∧(D∨ C)∧B 14.Web2.0是近年来互联网的热门概念之一,其核心是互动与分享。下列网站中,(B )是典型的Web2.0应用。
A. Sina
B. Flickr
C. Yahoo
c语言和c++区别
D. Google 15. (2020)10 + (5B)16的结果是()。
A. (833)16
B. (2099)10
C. (4063)8
D. (100001100011)2 16. 二叉树T,已知其先根遍历是
1 2 4 3 5 7 6(数字为结点的编号,以下同),后根遍历是4 2 7 5 6 3 1,则该二叉树的可能的中根遍历是(ABD )。
A. 4 2 1 7 5 3 6
B. 2 4 1 7 5 3 6
C. 4 2 1 7 5 6 3
D. 2 4 1 5 7 3 6 17. 面向对象程序设计(Object-Oriented Programming)是一种程序设计的方法论,它将对象作为程序的基本单元,将数据和程序封装在对象中,以提高软件的重用性、灵活性和扩展性。
下面关于面向对象程序设计的说法中,正确的是(BCD )。
A. 面向对象程序设计通常采用自顶向下设计方法进行设计。
B. 面向对象程序设计方法具有继承性(inheritance)、封装性(encapsulation)、多态性(polymorphism)等几大特点。
C. 支持面向对象特性的语言称为面向对象的编程语言,目前较为流行的有C++、
JA V A、C#等。
D. 面向对象的程序设计的雏形来自于Simula语言,后来在SmallTalk语言的完善和标准化的过程中得到更多的扩展和对以前思想的重新注解。至今,SmallTalk语言仍然被视为面向对象语言的基础。
18. 设T是一棵有n个顶点的树,下列说法正确的是(ABC )。
A. T是连通的、无环的
B. T是连通的,有n-1条边
C. T是无环的,有n-1条边
D. 以上都不对19. NOIP竞赛推荐使用的语言环境有(ACD )。
A. Dev-C++
B. Visual C++
C. free pascal
D.Lazarus 20. 在下列防火墙(firewall)的说法中,正确的有(ABCD )。
A. 防火墙是一项协助确保信息安全的设备,其会依照特定的规则,允许或是限制数据通过
B. 防火墙可能是一台专属的硬件或是安装在一般硬件上的一套软件
C. 网络层防火墙可以视为一种IP 数据包过滤器,只允许符合特定规则的数据包通过,其余的一概禁止穿越防火墙
D. 应用层防火墙是在TCP/IP的“应用层”上工作,可以拦截进出某应用程序的所有数据包三.问题求解(共2题,每题5分,共计10分)1.有6个城市,任何两个城市之间都有一条道路连接,6个城市两两之间的距离如下表所示,则城市1到城市6的最短距离为______7_______。
城市1城市2城市3城市4城市5城市6 城市102311215 城市22025312 城市3320365 城市4153079 城市51236702 城市615125920 2.书架上有21本书,编号从1到21,从其中选4本,其中每两本的编号都不相邻的选法一共有___3060___种。
四.阅读程序写结果(共4题,每题8分,共计32分)1. #include stdio.h int main() { int i, a, b, c, d, f[4]; for(i = 0; i i++) scanf(“%d“, f[i]); a = f[0] + f[1] + f[2] + f[3]; a = a / f[0]; b = f[0] + f[2] + f[3]; b = b / a; c = (b * f[1] + a) / f[2]; d = f[(b / c ) % 4]; if(f[(a + b + c + d) % 4]
f[2]) printf(“%dn“, a + b); else printf(“%dn“, c + d); return 0; } 输入:9 19 29 39 输出:
_______________ 2.#include stdio.h void foo(int a, int b, int c) { if(a b) foo(c, a, b); else printf(“%d,%d,%dn“, a, b, c); } int main() { int a, b, c; scanf(“%d %d %d“, a, b, foo(a, b, c); return 0; } 输入:2 1 3 输出:__________ 3.#include stdio.h void f(int a, int b, int c)
{ printf(“%d%d%d/“, a, b, c); if(a == 3    b == 2    c == 1) return; if(b c) f(a, c, b); else if(a b) { if(a c) f(c, a, b); else f(b, c, a); } } int main() { int a, b, c; scanf(“%d %d %d“, a, b, f(a, b, c); printf(“n“); return 0; } 输入: 1 3 2 输出:
________________________________________ 4. #include stdio.h #include int i,j,len; char s[50]; int main() { scanf(“%s“, s); len = strlen(s); for (i = 0;i len; ++i) { if (s[i] = 'A'
s[i] = 'Z') s[i] -= 'A'- 'a'; } for (i = 0;i len; ++i) { if (s[i] 'x') s[i] += 3; else s[i] += -23; } printf(“%s/“, s); for (j = 1;j j ++) { for (i = 0;i len-j; i = i + j) { s[i] = s[i + j] ; } }
printf(“%sn“, s); return 0; } 输入:ABCDEFGuvwxyz 输出:
___________________________________________ 五.完善程序(前6空,每空3分,后5空,每空2分,共28分) 1.(第k大的数) 给定一个长度为1,000,000的无序正整数序列,以及另一个数n(1=n=1000000),接下来以类似快速排序的方法到序列中第n大的数(关于第n大的数:例如序列{1,2,3,4,5,6}中第3大的数是4)。
#include stdio.h #include int a[1000001],n,ans = -1; void swap(int *a,int *b) { int c; c = *a; *a = *b;*b = c; } int FindKth(int left, int right, int n) { int tmp,value,i,j; if (left == right) return left; tmp = rand()% (right - left) + left; swap( a[tmp], a[left] ); value = ① i = left; j = right; while (i j) { while (i j ② ) j --; if (i j) {a[i] = a[j]; i ++;} else break; while (i j ③ ) i ++; if (i j) {a[j] = a[i]; j - -;} else break; } ④ if (i n) return FindKth( ⑤ ); if (i n) return ⑥ return i; } int main() { int i; int m = 1000000; for (i = 1;i i ++) scanf(“%d“, a[i]); scanf(“%d“, ans = FindKth(1,m,n); printf(“%dn“, a[ans]); return 0; } 2.(矩阵中的数字)有一个n*n(1=n=5000)的矩阵a,对于1=i n,1=j=n, a[i,j] a[i + 1,j] a[j,i] a[j,i+1]。即矩阵中左右相邻的两个元素,右边的元素一定比左边的大。上下相邻的两个元素,下面的元素一定比上面的大。给定矩阵a中的一个数字k,出k所在的行列(注意:输入数据保证矩阵中的数各不相同)。
#include stdio.h int n,k,answerx,answery; int a[5001][5001]; void FindKPosition() { int i = n,j = n; while (j 0) { if (a[n][j] k) break; j --; } ① while (a[i][j] != k) { while ( ②i 1) i
--; while ( ③j = n) j ++; } ④⑤ } int main() { int i,j; scanf( “%d“, n ); for (i = 1;i i ++) for (j = 1;j j ++) scanf( “%d“, a[i][j]); scanf( “%d“, k ); FindKPosition(); printf(“%d %dn“, answerx, answery); return 0; }