2019年海淀区青少年程序设计挑战活动笔试题详细答案

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haishu_zheng/article/details/89304964

一、单项选择题

1 B
分析:这题NOIP也考过类似的题多次。解释性语言如Python, Perl, Matlab,运行速度较慢。

2 A
分析:FTP的全称为File Transfer Protocol,文件传输协议。

3 A

4 D
分析:4和6分别代表第4代和第6代。目前用的基本上都是IPv4,可表示为X:X:X:X,比如192.168.1.101,由四个字节组成,32位。IPv6由16个字节组成,128位,可表示为X:X:X:X:X:X:X:X,当然IPV6还有另两种表示方法。

5 D
分析:格式化就是把包括有用的数据和病毒数据在内的所有数据都清除掉。

6 C

7 C
分析:十六进制的10等于十进制的16,十六进制的0.C等于C/10 = 十进制的12/16=0.75

8 D
分析:int d=c=b中,c没有定义,不能直接使用。可改成
int c;
int d = c = b;

9 B
分析:1MB = 2^10kB = 2^20B = 2^23bit

10 C
分析:2e-1是科学计数法,代表2*10^(-1) = 0.2

11 B
分析:本题考察C++函数重载。函数重载必须符合下列两个条件的至少一个:
(1)函数的参数个数不同。
(2)函数的参数类型不同或者参数类型顺序不同,

12 B

13 C
分析:这题NOIP考过多次。
C中,若要求值为true,则根据后两个条件要求P=true, Q = true, 这样第一个条件(!P || !Q) = (false || false) = false,导致最终值仍为false。所以C的结果恒为false。

14 B
分析:0x7f + 0x10d = 0x18c,化为十进制则为16^2 + 8 * 16 + 12 = 396

15 C
分析:new关键字是用来开辟内存的,需要配合指针使用。

16 D
分析:快速排序不稳定,并且中间会多次比较。

17 A
分析:这里列出了四种交换两个数的方法。并且使用了引用。但这题的考察重点是for中的n+1-i >= i,注意这时有个等于号。会出现中间那个数与自己交换的情况。
比如{1, 2, 3, 4, 5},需要3次交换:1和5换,2和4换,3和3换。问题就出在3和3换。3和3是同一个元素。
对于B答案。当x和y一样时,x^=y会导致x = 0,这样y = x = 0。所以用B的方法交换,会得到{5, 4, 0, 2, 1}。
对于C答案,当x和y一样时,x+=y得到x变为原来的2倍,此时y仍然等于x,y = x - y = 0,x = x - y = 0 - 0 = 0,所以交换完后得到{5,4,0,2,1}。
对于D答案,当x和y一样时,x *= y,得到的x为原来的平方,此时y仍然等于x,y= x / y = 1,x = x / y = 1 / 1 = 1,所以交换完后得到{5,4,1,2,1}。

18 D
分析:++a % b = 6 % 2 = 0。

19 C
分析:浮点数和整数之间不能求余数。

20 B
分析:使用memset需要包含头文件memory.h或string.h或cstring,而不是包含string。

二、填空题

  1. 答案:-3
    分析:浮点数无论是正还是负,化为整数都是直接把小数去掉。不用考虑四舍五入。

  2. 答案:40
    每个整型元素占4个字节,10个整型元素占40个字节。

  3. 答案:25
    考察字符在ASCII码表中排序方式。小写字母和大写字母都是按字典序排列的。z和a相差了25个数,所以答案为25。或者z的ASCII码值为122,a的ASCII码值为97,122-97=25。

  4. 答案:1111
    分析:5 * 3 = 15,化成二进制即为1111。

  5. 答案:397
    分析:除了最高位,每位十六进制化成二进制为4位,十六进制的最高位为1时,化成二进制也是1,这种情况下二进制总共有1 + 99 * 4 = 397位。

  6. 答案:1/3,6
    分析:
    (1)给这五对夫妻从1到10编号。假如1号和2号是夫妻,3号和4号是夫妻,5号和6号是夫妻,7号和8号是夫妻,9号和10号是夫妻。从10个人中选3个人有C(10, 3) = 120种选法。选一对夫妻的方法有5种,对于这5种中的每种情况,剩余一人可从剩下的8个人里面选,所以选三人包含一对夫妻的方法有5 * 8 = 40种。40 / 120 = 1 / 3。
    (2)选五个人可能出现没有选中夫妻的情况,再选一个人的话,至少会有一对是夫妻。

  7. 答案:bc
    分析:
    当有三个连续的0或1时,就可以被抓出。
    b答案可以从右往左刷:0000000000 --> 0000001110 --> 0000000110 --> 0001110110 --> 0000010110 --> 0111010110
    c答案也可以从右往左刷:0000000000 --> 0000001110 --> 0000000010 --> 0000111010 --> 0000001010 --> 0011101010 --> 0001101010

  8. 答案:25,4
    分析:

1.png

第一空,如左图所示,61 + 34 + C - 2 * 10 = 100得C = 25
第二空,如右图所示,61 + 34 + 29 - (x + y + z) - 2 * 10 = 100得x + y + z = 4

三、阅读程序题

  1. 答案:b!=c
    分析:这题是考察“”与“=”的区别。判断语句里正确的写法是“”,这个程序故意写成了“=”,变成了赋值。if(a = b)是把b的值赋给a,再判断a是否为真。if(b = c)同理。

(a)答案:1 2
分析:两个if决定了先输出b,再输出空格。最后再输出a。

(b)答案:w
分析:第二个for求的是每个字符出现的次数。a[‘x’] = 2, a[‘y’] = 2, a[‘z’] = 1, a[‘w’] = 1。第三个for,是从字符串的最后一个字符倒着往前看,碰到第一个出现次数为1的字符,就打印出来。所以是w。

(c)答案:15
分析:这题是求1~100之间,有多少个数对7求余数等于1。符合的数为1,8,15,……,99。根据等差数列求和公式99 = 1 + (n - 1) * 7 得n = 15。

(d)答案:35
分析:这题参考了2018年NOIP普及第二大题的第3题。做法是一样的。

m = -1 m = 0 m = 1 m = 2 m = 3 m = 4
n = 0 0 1 0 0 0 0
n = 1 0 1 1 0 0 0
n = 2 0 1 2 1 0 0
n = 3 0 1 3 3 1 0
n = 4 0 1 4 6 4 1
n = 5 0 1 5 10 10 5
n = 6 0 1 6 15 20 15
n = 7 0 1 7 21 35 35
  1. 答案:
    (1)0
    (2)b - a
    分析:这道题是用while循环求斐波那契数列,除此之外,还可以用for或递归来求。需要注意的是第二空,用了while,a = b - a,这是让a向右挪动一个位置。

  2. 答案:
    (1)a[k]
    (2)k+1, R
    (3)L, k - 1
    分析:这道题就是考二分法。实际上题目直接说明了是二分法。

了解少儿编程、信息学竞赛请加微信307591841或QQ群581357582
信息学竞赛公众号.jpg

猜你喜欢

转载自blog.csdn.net/haishu_zheng/article/details/89304964
今日推荐