题一:
如果两个关键字的值不等但哈希函数值相等,则称这两个关键字为同义词。( )
正确答案: A 你的答案: B (错误)
正确
错误
解答:
散列函数:一个把查找表中关键字映射成该关键字对应的地址的函数,记为Hash(key)=Addr。(这里的地址可以是数组下标、索引、或内存地址等)
散列函数可能会把两个或两个以上的不同关键字映射到同一地址,称这种情况为“冲突”,这些发生碰撞的不同关键字称为同义词。
题二:
int c[4][5],( *pc)[5];
pc=c;
那么,下列对数组C的元素引用正确的是( )。
正确答案: D 你的答案: A (错误)
pc+1
- (pc+3)
- (pc+1) +3
- (*pc+2)
- 解答:
- pc是一个数组指针(指向数组的指针),指向列数为5的二维数组,pc = c,表示pc指向二维数组的第一行,pc+1偏移一行,一行5个元素。*pc得到二维数组c的第一行数组的首地址,+2偏移到c[0][2]的地址,解引用就得到数据2。c[4][5]可以理解为4个长度为5的一位数组,这四个一维数组的地址要用数组指针存放。
- 题三:
以下代码在64位的机子上输出是什么:
#include <stdio.h>
int getSize(int data[]){
return sizeof(data);
}
int main(){
int data1[] = {1,2,3,4,5};
int size1 = sizeof(data1);
int* data2 = data1;
int size2 = sizeof(data2);
int size3 = getSize(data1);
printf("%d, %d, %d", size1, size2, size3);
return 0;
}
正确答案: A 你的答案: A (正确)
20,8, 8
4, 4, 4
20, 4, 20
20, 20, 20
解答:
64位系统:int型占4个字节,指针占8个字节。
data1[]数组大小是5,则4 * 5 = 20个字节;
data2指针,即8个字节;
数组名data1作为函数getSize()的参数会退化成指针,即8个字节。
题四:
下列叙述中正确的是?
正确答案: A 你的答案: B (错误)
线性表是线性结构;
栈与队列是非线性结构;
线性链表是非线性结构;
二叉树是线性结构
解答:
线性结构:元素之间呈一对一的对应关系,其特点是每一个元素都有直接前驱和后继(除第一个和最后一个)
包含顺序存储(元素连续)和链式存储(元素不一定 连续)两种存储结构
常见的线性结构:线性表、栈、队列、串、数组
常见的非线性结构:广义表、树、图
题五:
在一般系统中,设float x[8];假设数组x开始于内存1000单元,则x[2]的存储始于( )
正确答案: D 你的答案: C (错误)
1002
1004
1006
1008
解答:
一般系统float类型占4 字节。
x[2]中间间隔两个元素即2*4=8字节转换成十六进制为8,所以1000+8=1008
题六:
若一棵二叉树的前序遍历序列为a, e, b, d, c,后序遍历序列为b, c, d, e, a,则根结点的孩子结点()。
正确答案: A 你的答案: D (错误)
只有e
有e、b
有e、c
无法确定
解答:
前序序列和后序序列不能唯一确定一棵二叉树,但可以确定二叉树中结点的祖先关系:当两个结点的前序序列为XY与后序序列为YX时,则X为Y的祖先。考虑前序序列a,e,b,d,c、后序序列b,c,d,e,a,可知a为根结点,e为a的孩子结点;此外,a的孩子结点的前序序列e,b,d,c、后序序列b,c,d,e,可知e是bcd的祖先,故根结点的孩子结点只有e。故选A。
【排除法】显然a为根结点,且确定e为a的孩子结点,排除D。各种遍历算法中左右子树的遍历次序是固定的,若b也为a的孩子结点,则在前序序列和后序序列中e、b的相对次序应是不变的,故排除B,同理排除C。
【特殊法】前序序列和后序序列对应着多棵不同的二叉树树形,我们只需画出满足该条件的任一棵二叉树即可,任意一棵二叉树必定满足正确选项的要求。
显然选A,最终得到的二叉树满足题设中前序序列和后序序列的要求。
题七:
void main() {
char str[]=“S\065AB”;
printf("\n%d", sizeof(str));
}
正确答案: C 你的答案: B (错误)
7
6
5
error
解答:
C ,这题考的真是很细啊… 转义字符\ddd表示8进制, 是一个数 ,所以就有 4个字符 + ‘\0’ 即5
题八: