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