一、单项选择题
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。
二、填空题
- 答案:-3 分析:浮点数无论是正还是负,化为整数都是直接把小数去掉。不用考虑四舍五入。
- 答案:40 每个整型元素占4个字节,10个整型元素占40个字节。
- 答案:25 考察字符在ASCII码表中排序方式。小写字母和大写字母都是按字典序排列的。z和a相差了25个数,所以答案为25。或者z的ASCII码值为122,a的ASCII码值为97,122-97=25。
- 答案:1111 分析:5 * 3 = 15,化成二进制即为1111。
- 答案:397 分析:除了最高位,每位十六进制化成二进制为4位,十六进制的最高位为1时,化成二进制也是1,这种情况下二进制总共有1 99 * 4 = 397位。
- 答案: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)选五个人可能出现没有选中夫妻的情况,再选一个人的话,至少会有一对是夫妻。
- 答案:bc 分析:当有三个连续的0或1时,就可以被抓出。b答案可以从右往左刷:0000000000 --> 0000001110 --> 0000000110 --> 0001110110 --> 0000010110 --> 0111010110 c答案也可以从右往左刷:0000000000 --> 0000001110 --> 0000000010 --> 0000111010 --> 0000001010 --> 0011101010 --> 0001101010
- 答案:25,4 分析:
第一空,如左图所示,61 34 C - 2 * 10 = 100得C = 25 第二空,如右图所示,61 34 29 - (x y z) - 2 * 10 = 100得x y z = 4
三、阅读程序题
- 答案: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)0 (2)b - a 分析:这道题是用while循环求斐波那契数列,除此之外,还可以用for或递归来求。需要注意的是第二空,用了while,a = b - a,这是让a向右挪动一个位置。
- 答案:(1)a[k] (2)k 1, R (3)L, k - 1 分析:这道题就是考二分法。实际上题目直接说明了是二分法。