分类
CSP-J/S

初赛模拟8解析

选择题(每题2分,共15题。)
Q1A 一个字节(byte)长度是 8 位,因此一个32 位整型变量需要占用 4 个字节。
Q2A 二进制整数部分,从低到高每一位的值分别是 2 的 0 次方、1 次方、2 次方……而小数部分从高到低每一位的值分别是 2 的 −1 次方、−2 次方、−3 次方……恰好是连续的。
Q3C “(A∨B)∧¬A”选项,当 A 为真的时候,此式恒为假,当 A 为假的时候,值取决于 B。
“(A∨B)∧¬B”选项,当 B 为真的时候,此式恒为假,当 B 为假的时候,值取决于 A。
“(A∧B)∨(¬A∧B)”选项,当 B 为真的时候,此此式恒为真,当 B 为假的时候,此式子恒为假,结果与 A 的真假无关。
“(A∨B)∧¬A∧B”选项,当 B 为真的时候,此式结果为 ¬A,于 A 有关,当 B 为假的时候,此式恒为假。”
Q4B 送分题
Q5B 送分题
Q6A 对于任意一棵二叉树,度为 2 的结点数肯定比度为 0 的结点少 1 ,在一棵含 10 个结点的二叉树中,度为 2 的结点数至多为 4,如果超过 4 ,则总结点数将超过 10。
Q7C 通过观察容易发现,只要切断 3 条边,就能孤立一个结点。同时不存在切断两条边就能使图不连通的情况,因此答案是 3。
Q8A 二叉树先序遍历第一个访问的结点是根结点。
Q9A 画一画就行了
Q10、D IPv6是128位地址,号称可以存下地球上的每一粒沙子。
Q11、A 快速排序。快速排序的时间复杂度最坏是O(n2)。
Q12、C 最大公约数。
Q13、C 通常在搜索引擎中,对某个关键词加上双引号表示关键搜索,只显示包含整个关键词的结果。
Q14、A 6:本题功能:输入 3 个整数,a, b, u,问在 [a, b] 区间内有几个数是 u 的倍数。
Q15、A 选择第一个同学共有 7 种选项,第二个同学由于不能相邻,只剩下 4 个可选,同时每对同学会被重复计算两次,因此一共有 7×4/2=14 种不同的选法。

阅读程序1:本题考查指针的应用。要注意 p1,p2,a,b都是指针,a=b是指将b指向的地址赋值给a,既让a指向b所指向的地址,(a)++,是将a指向的地址里的东西 +1。这个时候的a指向c2的地址,所以(a)++,会使得 c2 = a + 1 = b。
1、 〖F:(a)++表示指针a所指向的地址里面的值+1,a++表示指针a所指向的地址+1,而且该行为使得指针指向一个未知位置,在代码中这么写很危险。〗
2、 〖F:&是取地址符,是指针指向的值〗。
3、 〖F:a=b是将b指向的地址复制给a,即让a指向b所指向的地址,c1和c2的值还是原来的值。〗
4、 〖F:p2是个指针,它的值是个地址,不可能是个字符,p2=’a’。〗
5、 〖A:模拟,(a)++,是将a指向的地址里的东西 +1。这个时候的a指向c2的地址,所以(*a)++,会使得 c2 = a + 1 = b。〗
6、 〖D:0x表示16进制数字,实际上就是将c1=’1′,c2=’0’,所以输出结果应该是’1′ ‘1’。〗

阅读程序2:本题考查分数变成小数,循环部分用括号括起来。在求小数的过程中,如果出现了之前出现的数字(指余数)则开始循环,p就是判断是否循环的标志,p=1表示循环,p=0表示不循环。
1、 〖F:m=0时运行错误。〗
2、 〖F:模拟可得,会输出0.0-5〗。
3、 〖F:程序会输出0.05。〗
4、 〖F:程序会输出0.0。〗
5、 〖A:5/13的小数形式,在循环节左右加上括号。〗
6、 〖B:删除第22行后,输出结果少一个有括号。〗

阅读程序3:本题考查深度优先搜索,输入一个n*m的矩阵,计算最大的连通块的大小。
1、 〖F:在后面的程序里面会赋值,不会运行错误。〗
2、 〖F:a是全局变量数组,所有的元素默认也是初始化为0。〗。
3、 〖F:该程序只求出最大值即可,因此改成小于等于不影响结果。〗
4、 〖F:全部连通,最多输出10000。〗
5、 〖C:数组中元素为0,最大的连通块大小为7。〗
6、 〖C:该程序会遍历每个点,走过的点被标记为1,不会再走,时间复杂度为O(n*m)。〗

完善程序一:访问第i个元素的时候,stack1从栈底到栈顶依次存放第1到第i个元素,而stack2从栈底到栈顶依次存放第n到第i+1个元素。
1.B n。 stack1栈顶圆度下标为n-1,top1指向栈顶的下一个位置n。
2.D 0。 stack2此时为空,所以top2指向栈顶元素的下一个位置,即0。
3.A stack2[top2]=stack1[top1]。当下一次要访问的元素在i之前时,通过将stack1的栈顶元素取出并放到stack2中,实现”指针的向前移动”。
4.C stack1[top1]=stack2[top2]。当下一次要访问的元素在i之后时,通过将stack2的栈顶元素取出并放到stack1中,实现”指针的向后移动”。
5.C top1-1。输出stack1栈顶为要求的答案,top1-1是因为top1指向栈顶的下一个位置。

完善程序2:used[i]==0表示数字i还没有被使用过,每次倒着找到第一个能变大的数字然后变大,接着把后面的数字直接从小到大安排,就生成了一个新的组合。flag标记能不能找到一个新的排列,第一层的循环意义是把排列中的第i位清零,就是第二个空需要实现的功能,如果找到一个排列,就把后面的排列不全(在剩余的元素中找到最小的排列),然后跳出循环,就是第四和第五个空的意思。
(1)D:flag是标记能不能找到一个新的排列,因此在while循环的开始时候应该标记为0。
(2)C:used[i]==0表示数字i还没有被使用过,而此处要启用数字i,所以标记为0。
(3)B:把第i个位置存放的数字更改为j。
(4)B:查找数字的范围是1~n。
(5)B:如果找到一个排列就把后面的排列补全(在剩余的元素中找到最小的排列),然后跳出循环。