搜狗2015 C++工程师笔试题

 
小端法和大端法
1题:
假设整数0x12345678 存放在内存地址0x0开始的连续四个字节中 (即地址0x0到 0x3). 那么在以Little Endian字节序存储的memory中,地址0x3的地方存放的字节是:
正确答案: A   你的答案: D (错误)
0x12
0x34
0x56
0x78
解析:
a) Little-Endian就是低位字节排放在内存的低地址端, 高位字节排放在内存的高地址端。
b) Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。
c) 网络字节序:TCP/IP各层协议将字节序定义为Big-Endian,因此TCP/IP协议中使用的字节序通常称之为网络字节序。
如果是 Little-Endian:0x0-0x3内存分别存放的是:0x78、0x560x34、0x12;
如果是  Big-Endian :0x0-0x3内存分别存放的是:0x12、0x340x56、0x78; 
 
 
sizeof
6 在linux下64位c程序,请计算输出的三个sizeof分别是()
void func( char str_arg[ 100 ])
{
      cout<<sizeof(str_arg)<<endl;
}
int main( int argc, char * argv[])
{
      char str[]= "Hello" ;
      char *p=str;
      cout<<sizeof(str)<<endl;
      cout<<sizeof(p)<<endl;
      func( "test" );
      return 0 ;
}
正确答案: D   你的答案: B  (错误)
5,5,8
6,6,4
6,8,4
6,8,8
sizeof对数组求长度为数组的真实长度,字符串数组的长度要加上最后的'\0'字符。
64位机器的指针占8个字节。
这里主要是区分sizeof运算符的测量对象
sizeof(str)测量的是字符数组的占用长度,注意字符串后还有个\0,所以是6
sizeof(p)测量的是指针的占用长度,64位系统下是8字节
sizeof(str_arg)测量的是指针长度,因为这里是形参。

 
MFC
 典型的创建Windows窗口过程的流程为()
正确答案: A   你的答案: B  (错误)
注册窗口类->创建窗口->显示窗口->更新窗口->消息循环
注册窗口类->创建窗口->更新窗口->显示窗口->消息循环
创建窗口->注册窗口类->更新窗口->显示窗口->消息循环
创建窗口->注册窗口类->显示窗口->更新窗口->消息循环
在屏幕上显示一个窗口的过程一般有以下步骤,这就是主程序的结构流程:
(1)得到应用程序的句柄(GetModuleHandle)。
(2)注册窗口类(RegisterClassEx)。在注册之前,要先填写RegisterClassEx的参数WNDCLASSEX结构。
(3)建立窗口(CreateWindowEx)。
(4)显示窗口(ShowWindows)。
(5)刷新窗口客户区(UpdateWindow)。
(6)进入无限的消息获取和处理的循环。首先获取消息(GetMessage),如果有消息到达,则将消息分派到回调函数处理(DispatchMessage),如果消息是WM_QUIT,则退出循环。
 
计算时间复杂度

 

26 假设某算法的计算时间可用递推关系式T(n)=2T(n/2)+n表示,则该算法的时间复杂度为()
正确答案: B   你的答案: B  (正确)
O(logn)
O(n*logn)
O(n)
O(n^2)
T(2n) = 2t(n) + 2n
t(2n)/2n = t(n)/n + 1
令c(n) = t(n)/n 
则 c(2n) = c(n) + 1
c(2n) - c(n) = 1
即 c(2^k) - c(2^(k-1)) = 1
累加求和 得
c(2^k) = c(1) + k 
即 t(2^k)/(2^k) = c(1) + k
即 t(2^k) = (c(1) + k) * (2^k)
即t(n) = (c(1) + log2(n)) * n
 
 
 
 
 
 

 

 

你可能感兴趣的:(C++)