1、C
解析:192.168.1.121 & 255.255.255.248 = 192.168.1.120
2、D
解析:2*3*8=48
3、C
4、D
5、D
解析:
二维数组只能省略第一维的大小
一维数组的大小可以省略。可是二维数组的元素个数是行数和列数的乘积,如果我们只告诉电脑元素个数,电脑无法知道究竟这个数组是几行几列。所以,C++规定,在声明和初始化一个二维数组时,只有第一维(行数)可以省略。比如:int array[][3]={1,2,3,4,5,6};
相当于:
int array[2][3]={1,2,3,4,5,6};
6、B
7、A
解析:删除和插入分别是n-i,n-i+1
8、B
9、B
解析:a、b、c均为真
10、C
解析:13 费波那契数列 f(n)= f(n-1)+ f(n-2)(n>=3), f(1)=1, f(2)=2
1 2 3 5 8 13
11、D
解析:试试吧
12、B
解析:20*3+10*2+1*1+1=82
13、D
14、C,
解析:注意题目是查找
15、A
16、B
17、A
(2^3)^33 * 2
18、B 不会,猜的
19、B
总共进行3轮,第一轮消去12,只能34;第二轮消去34,只能56;第三轮56胜者最大为6
20、C
解析:计算期望值
0 1 2 3 4 ……n
0.5 o.5^2 o.5^3 0.5^4 o.5^5 ……0.5^n
结果1
21、BCD
(1) 无法通过malloc(size_t)函数调用申请超过机器物理内存大小的内存块。
首先,通过查找资料[1,2],得出结论:malloc() 分配的是虚拟内存,访问具体虚拟地址的时候,实际上会做虚拟内存和物理内存的映射,最终调用物理地址的内容。
所以我觉得可以通过malloc(size_t)申请超过机器物理内存大小的内存块,因为机器存在虚拟内存。(1) 错误。 【我不是太确定】
(2) 无法通过内存释放函数free(void*)直接将某块已经使用完的物理内存直接还给操作系统。
资料[3] 中提到:
其中brk区(确切名字我不知道)可以用系统调用brk动态增长或缩小,malloc/free动态分配的内存就在brk区,内存分配算法由C库函数实现,与操作系统无关。需要更多内存时,调用sbrk/brk增长brk区,malloc一般不对应一次brk,一次brk分配比较大的块,malloc在这里再分,free一般只是更新空闲块,不调用任何系统调用,就是说free释放的内存可能不归还给系统,直到进程退出时才释放。
free释放的内存不一定直接还给操作系统,可能要到进程结束才释放。但(2) 说free不能把它归还给操作系统,就不对了。所以,我认为(2)是错误的。
(3) 可以通过内存分配函数malloc(size_t)直接申请物理内存
通过前面两题的,可以直到malloc不能直接申请物理内存,它申请的是虚拟内存。所以我认为(3)是错误的。
23、ADE
解析:可以用二项式来解答(10+n)^14的区间是否为16位数字,计算较复杂
貌似是12,13符合要求吧
24、C
第一次,N/2 组,每组时间复杂度O(2M),综合为 O(N/2 * 2M) = O(NM)
第二次,N/4 组,每组时间复杂度O(4M),综合为 O(N/4 * 4M) = O(NM)
依次类推,共有logN (底为2)次。
故总的时间复杂度为:O(MNlogN)
27、ab>
<a
cd>
<b
ab>
上述过程a和b可以互换
2+1+10+2+2=17
http://blog.csdn.net/cyangc/article/details/22521739转载地址