windows/mfc面试题一套

 不知道答案是否正确。。日后再完善。。

 

一、C/C++基础

选择与填空

1.      VC++6.0环境下,假定a 为一个整型(int)数组名,则元素a[8]的地址为:C

A.     a+4  B.a+8  C.a+16  D.a+32

 

2. 定义 "int a=3, b=4, c=5;" , 则"c <= (a + b) && b != c" 的值是(   )1

 

3. char* name = "Victor Hugo";

则 sizeof(name)= ( 4 ), sizeof(*name) = (  1).

 

4. int* p = NULL; 当 delete p 时会发生(      D )

A. 堆栈破坏                                            B.内存泄漏

C. 正常运行                                            D.程序中断

 

5.    已定义了一个类A并有语句 A* pa=new A(5);  那么以下说法正确的是:A

A. 该语句会创建A类的一个对象,并将此对象的地址赋给指针pa;

B. 该语句会创建A类的5个对象,且它们的地址是连续的;

C. 当指针变量pa超出其作用域时,pa和为对象分配的空间都将被自动释放;

D. 类A中一定有一个显式定义的构造函数和一个显式定义的虚析构函数;

 

6. 在一个类中,下列哪些成员可以是多个? D

A. 无参构造函数                     B. 析构函数

C. 原型相同的非静态成员函数         D. 静态成员函数

 

7.建立一个有成员对象的派生类对象时,各构造函数体的执行顺序为:C

A. 派生类成员对象类 基类       B. 成员对象类 基类 派生类

C. 基类成员对象类 派生类       D. 基类 派生类 成员对象类

 

8. 定义类A的非静态成员函数A&f(A& one)时,需有语句returnexp;则exp不能是:B

A.类A中类型为A的静态数据成员     B. f中用语句 A a = one; 定义的量a

C. one                                         D. *this

 

9. 在下列关键字中,不能用来表示继承方式的是: B

A. private           B. static      C. public            D. protected

 

10.关于virtual void Draw()=0; 下面说法不正确的是(C )

A.它是纯虚函数            

B.它在定义它的类中不能实现

C.如果一个类要继承定义它的类,则必须要实现其中的所有纯虚函数   

D. 定义它的类不可实例化

 

11. 设有变量定义 int i, j; 与表达式 i==0 && j==0 等价的表达式是:(   B )

(A) i||j       (B) !i&&!j      (C) !i==!j      (D) i==j

 

12. 设变量int a = 5; 下列哪个表达式计算后,使得变量b的值等于2 ?(  A )

(A) b=a/2     (B) b=6-(a--)        (C) b=a%2       (D) b=a>3?3:2

 

13. 已知 int x=1, y=0; 执行下面程序段后,y的值为(  C  )。

   if(x) { if (x>0) y=1; } else  y= -1 ;

(A)-1           (B)0            (C) 1           (D)不确定

 

14.下面不能够判断字符串S是空串的是(  D)

(A) if (S[0]==0)            (B) if(strlen(S)==0)

(C) if(strcmp(S,””)==0)  (D)if(S==’\0’)

 

15. char x[5]={‘a’,’b’,’\0’,’c’,’\0’}输出该字符串的结果是(    B )

(A)’a’’b’          (B)ab         (C) ab c           (D)abc

 

16. 下面关于new和delete运算的叙述中,错误的说法是( C  )。

(A)由new分配的内存空间是连续的

(B)如果当前内存无足够的空间可分配,则new运算符返回NULL

(C)由new运算符分配的内存空间,当函数执行结束时系统会自动收回

(D)对于程序中的静态数组占用的存储空间不能使用delete来释放

 

17. 设有定义:

 struct data

  {

     int  i;

     char ch;

     double q;

     double f

}b;

在不考虑内存对齐的情况下,结构体变量b占用内存的字节数是(   D  )

(A)18         (B)19      (C)20       (D)21

 

18. 已知X类.则当程序执行到语句,X  array[3];时,调用了(  D   )次构造函数。

A)0     B)1       C)2        D)3

 

19. 下列对派生类的描述中,错误的是(  D   )。

A)一个派生类可以作为另一个派生类的基类

B) 派生类至少有一个基类

C)派生类的成员除了自己的成员外,还包含了它的基类的成员

D)派生类中继承的基类成员的访问权限到派生类保持不变

 

20. 下面对静态数据成员的描述中,正确的是(B  )。

A)静态数据成员可以在类体内进行初始化

B)静态数据成员可以直接用类名调用

C)静态数据成员不能受private控制符的作用

D)静态数据成员不可以被类的对象调用

 

二、数据结构

1. 设x=0011 0110(二进制),则若想通过x&y运算使x中的低4位不变,高4位清零,则下面能实现此功能的是(B )

(A)x=x|0x0f    (B) x=x&0x0f    (C)x=x|0xf0     (D) x=x&0xf0

 

 

2. 在带有头结点的单链表HL中,要向表头插入一个由指针p指向的结点,则执行(  B )。

   A. p->next=HL->next; HL->next=p;       B. p->next=HL; HL=p;

   C. p->next=HL; p=HL;                D. HL=p; p->next=HL;

 

3.设输入序列为1、2、3、4、5、6,则通过栈的作用后可以得到的输出序列为(B  )。

(A) 5,3,4,6,1,2 (B) 3,2,5,6,4,1

(C) 3,1,2,5,4,6 (D) 1,5,4,6,2,3

 

4.设某链表中最常用的操作是在链表的尾部插入或删除元素,则选用下列(  B )存储方式最节省运算时间。

       (A)单向链表        (B) 单向循环链表

(C) 双向链表        (D) 双向循环链表

 

5.设有序表中的元素为(13,18,24,35,47,50,62),则在其中利用二分法查找值为24的元素需要经过(C )次比较。

       (A)1       (B) 2       (C) 3       (D) 4

 

6.设顺序表的长度为n,则顺序查找的平均比较次数为(  C )。

       (A)n       (B) n/2    (C) (n+1)/2     (D) (n-1)/2

 

7.设在一棵度数为3的树中,度数为3的结点数有2个,度数为2的结点数有1个,度数为1的结点数有2个,那么度数为0的结点数有(  C )个。

       (A)4       (B) 5       (C) 6       (D) 7

 

8.  队列是一种(  A )的线性表。

       (A)先进先出 (B) 先进后出 (C) 只能插入 (D)只能删除

 

9.  设无向图G中的边的集合E={(a,b),(a,e),(a,c),(b,e),(e,d),(d,f),(f,c)},则从顶点a出发进行深度优先遍历可以得到的一种顶点序列为(A  )。

       (A)aedfcb      (B) acfebd      (C) aebcfd      (D)aedfbc

 

10.设某无向图有n个顶点,则该无向图的邻接表中有( B)个表头结点。

       (A)2n     (B) n       (C) n/2    (D) n(n-1)

 

11. 设某强连通图中有n个顶点,则该强连通图中至少有(C   )条边。

       (A)n(n-1)      (B) n+1   (C) n       (D) n(n+1)

 

12. 一个栈的输入序列为1 2 3,则下列序列中不可能是栈的输出序列的是(   C   )

  A.2 3 1                                                B.3 2 1

  C.3 1 2                                             D.1 2 3

 

13. 在稀疏矩阵的带行指针向量的链接存储中,每个单链表中的结点都具有相同的(A  )。

A.行号     B.列号      C.元素值      D.非零元素个数

 

14.以下数据结构中哪一个是非线性结构?(  D  )

A. 队列      B. 栈        C. 线性表     D. 二叉树

 

15、栈的插入和删除操作在(A)进行。

A  栈顶      B  栈底      C  任意位置     D  指定位置

 

 

三、Windows

 

1. 有关32位Windows下句柄(handle)的说法,下列不正确的是:C

A  句柄是一个4字节长的整数值           

B  句柄用来标识应用程序中不同的对象或同类对象中的不同实例           

C  消息是句柄的一种       

D  画笔的句柄类型是HPEN,画刷的句柄类型是HBRUSH 

E  不知道

 

2.在一个Windows API的基本应用程序框架中,有如下的消息循环:            

 

      while( GetMessage(&Msg, NULL, 0, 0))

      {    

              TranslateMessage( &Msg) ;

              DispatchMessage( &Msg) ;

      }    

 

下面哪个消息使得该消息循环退出运行,从而终止整个应用程序的运行: B      

 

A WM_DESTROY            

B WM_QUIT

C WM_CLOSE

D WM_CREATE

E  不知道

 

3.关于Windows API编程时的窗口函数(WndProc)的说法,不正确的是:D

A  它是一个回调函数

B  它内部的switch…case分支判断用于不同类型消息的处理

C  它有四个入口参数,其意义和消息结构体MSG的意义相同

D  如果使用全空的窗口函数(内部没有代码),Windows也会负责按照缺省方法处理消息

 

4.Windows窗口对刷新请求的相应,下列哪种情况下不需要应用程序考虑:D

A,窗口移动后的刷新

B,被覆盖区域的刷新

C,通过滚动条滚动窗口时

D,图标或光标穿越窗口时

E,不知道

 

5.下列有关Windows绘图中映像模式的说法,不正确的是:D

 

A,缺省的映像模式是MM_TEXT

B,只有MM_ANISOTROPIC模式下,X,Y轴的比例可以不是1:1

C,在所有的映像模式下,缺省时窗口左上角的坐标都是(0,0)

D,MM_HIMETRIC模式下,X轴正方向向右,Y轴正方向向下

E,不知道

 

6. 下列关于Windows应用程序对键盘响应的说法,正确的是:D

A,键盘的扫描码不依赖于具体设备

B,Windows应用程序不使用消息来处理键盘响应

C,按下键盘上的一个键,不可能同时产生按键消息和字符消息

D,WinMain函数的消息循环中的TranslateMessage函数用于把按键消息转换为字符消息

 

7. 下列关于Windows应用程序对鼠标响应的说法,正确的是:B

A,只有活动窗口才能接受鼠标事件

B,可以调用函数SetCapture()实现对鼠标的捕捉,且捕捉鼠标后系统的键盘功能暂时失效

C,用户只能调用系统定义的鼠标的光标形状,不能自定义光标

D,可以通过相应单一类型的鼠标消息来响应鼠标的拖动事件

E,不知道

 

8.在Windows API开发的应用程序框架中,下列哪种方法不能加载菜单:D

A,在窗口类的定义时,把结构体WNDCLASS的lpszMenuName设置为合适的菜单名

B,在创建窗口时,首先调用LoadMenu获得菜单句柄,然后调用函数CreateWindow加载该菜单

C,在应用程序中调用LoadMenu获得菜单句柄后,调用函数SetMenu动态加载菜单

D,在窗口处理函数中,针对菜单消息设置合适的消息响应

E,不知道

 

9.下列API中,能将消息投递到一个窗口而不等待窗口处理完毕就返回的是:A

A.SendMessage

B.PostMessage

C.SendThreadMessage

D.PostThreadMessage

E.不知道

 

10. 下列API中,可以用来打开设备句柄的是:A

A.CreateFile

B.OpenProcess

C.OpenClipboard

D.OpenMutex

E.不知道

 

四、MFC

1.在CView中可以获得文档对象指针的函数是(  GetDocument  )

2. CDialog类继承自(CWnd )类

3. CListBox类中,得到被用户选择串的索引的成员函数是(  GetCurSel )

4. CDialog类中,获得具有指定ID的子控件的指针的成员函数是( GetDlgItem )

5.CString类中,能在一个较大的字符串中查找字符或子字符串的成员函数是(Find  )

6.MFC中,用来创建新线程的全局函数是( AfxBeginThread)

7.所有COM组件都必须要实现的一个接口是(   IUnknown

8.MFC中,从(CCmdTarget  )类派生的类都可以有消息映射。

9.一个COM组件,如果要支持自动化,必须实现的接口是(IDispatch )

10.基于MFC的win32可执行程序,有且仅有一个从(CWinApp  )类派生的应用程序类的对象,该对象代表该应用程序本身。

11.MFC中,文本框对应的类是CEdit,那么工具条对应的类是(  CScrollBar )

12.MFC中,已知某按钮的指针是CButton* p; 那么将此按钮设置为灰色禁用状态可以调用函数(EnableWindow   )

13.令窗口重绘的消息是(WM_PAINT   )

 

 

五、高级编程/其它

1.      要对绝对地址0x100000赋值,我们可以用 *(int*)0x100000 = 1234;

那么要是想让程序跳转到绝对地址0x100000去执行,应该怎么做?请写出代码

       *((void(*)())0x100000)();   采用函数指针做跳转

2.已知0x64是键盘的数据端口,当键盘上某个键被按下时,将可以从数据端口读取到被按下键的扫描码。某程序员在VS2008中的MFC对话框程序下编写了如下代码,试图获取键盘的输入信息,然而他失败了,请问这是为什么?如何解决?

#include <conio.h>

……                 

BYTE ReadDataFromKeyboard()

{

       return_inp(0x64);

}

 

3.对于一个字节(8bit)的数据,求其中二进制位“1”的个数,要求算法的执行效率尽可能的高。

 

 

4. 交换int型变量a和b的值,要求不使用临时变量。

 

5. 请默写冒泡排序算法。函数签名为void Sort(int pData[],int Count);

 

6.下面哪一本C++参考书最厚?

A.《Think in C++》     B.《深入浅出MFC》

C.《C++ Primer》      D.《Effective C++》

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。