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++》

时间: 2024-10-13 19:16:07

windows/mfc面试题一套的相关文章

Windows MFC 全局模态 实现 (二)

上一篇 Windows MFC 全局模态 实现 介绍了一下第一种方法,但是这个方法有个问题是,即使在对话框外不能点击,框外点击鼠标,当前需要操作的窗口也是失去了焦点的.这样用户体验影响比较严重.而且还有个问题是,如果要适配32位.64位系统,要达到全局模态(禁止鼠标效果)需要32.64位两种库,而且要分别被32.64位系统调用.使用条件限制比较严格. 所以这里记录一下使用透明窗口的实现方法: 1.工程中插入一个对话框 2.设置对话框属性 去掉Title bar的勾 3.增加一个OnInitDia

Windows/MFC,C++中的TCHAR体系/char体系/WCHAR体系及其相互转换

</pre><pre> Windows/MFC,C++编程中经常遇到UNICODE.ANSI字符串,并需要对这些字符串进行转换,本文对这些体系与其转换进行了总结. 第一篇:基础篇 3大体系常用函数及解析详见博文:http://blog.csdn.net/u010003835/article/details/47344775  此外,接下来我书写的函数以Windows对char*,TCHAR*,const  TCHAR*的命名规则来书写 不熟悉的童鞋可以参考博文: http://bl

Windows MFC HTTP GET请求 函数流程

Windows MFC HTTP GET请求 函数流程 1 CString m_strHttpUrl(_T("http://10.200.80.86:8090/course/upload")) 2 CInternetSession * pInternetSession = NULL; 3 CHttpConnection * pHttpConnection = NULL; 4 CHttpFile * pHttpFile = NULL; 5 6 7 //建立连接 8 pInternetSe

Windows MFC HTTP 函数流程

Windows MFC HTTP 函数流程 1 //建立连接 2 pInternetSession = new CInternetSession(AfxGetAppName()); 3 4 5 6 //根据HttpUr解析 7 CString strServer; 8 CString strObject; 9 DWORD dwServiceType; 10 INTERNET_PORT nPort; 11 AfxParseURL(m_strHttpUrl, dwServiceType, strSe

Windows MFC HTTP POST请求 函数流程

Windows MFC HTTP POST请求 函数流程 1 CString m_strHttpUrl(_T("http://10.200.80.86:8090/course/upload")) 2 CInternetSession * pInternetSession = NULL; 3 CHttpConnection * pHttpConnection = NULL; 4 CHttpFile * pHttpFile = NULL; 5 6 7 8 //建立连接 9 pInterne

大学数学专业试题499套及部分解答

这是目录. 链接见"跟锦考研" 微信公众号. 2020年02月16日发表的. 资料 考研竞赛教案2020.01-2022.07 华东师范大学数学分析第五版习题讲解 第1章; 第2章; 第3章; 第4章. 北京大学2009级解析几何期末试题 北京大学2010级解析几何期末试题 北京大学2020年数学分析3期末试题 北京大学2018-2019-1年数学分析期中试题 (第1套) 北京大学2018-2019-1年数学分析期中试题 (第2套) 北京大学2016-2017-1年高等代数期末试题 北

Windows MFC 全局模态 实现

windows本身没有提供针对整个桌面全局模态对话框的实现方式,需要自己实现. 两种方法: 1.弹出一个全屏幕透明的对话框,再在它的基础上弹出模态框 2.当鼠标在弹出框外时,禁用键盘.鼠标所有功能 第一种不好的是可能有闪一下的效果,影响体验:而且还要让修改密码框在它上面,还要考虑到这个窗口的释放. 第二种相对来说较方便,但是需要多一个动态库来实现全局钩子. 笔者只实现了第二种方法. 实现方法: // 用此函数判断是否在内,以决定是否使能鼠标 BOOL CMFC_MouseMoveTest2Dlg

Windows常见面试题——进程、线程

1.什么是进程,什么是线程,请谈谈你的理解 答:进程和线程是操作系统中一个很重要的概念.进程是指操作系统中运行的应用程序,而线程是指程序中独立完成某一任务.实现某一功能所需的单元.进程就像一个工厂,可以完成某种产品的生产,而线程就像是工厂不同的部门,可以互补干扰独立的完成某项工作.一个进程至少运行着一个线程. 2.如何在不同进程中访问同一个内核对象.请说出至少三种方法 答:要访问内核对象,那么就需要在进程的句柄表中都有一个句柄项是指向此内核对象的.a.由父进程继承给子进程,当父进程创建子进程时,

Linux运维工程师面试题第一套

1)Linux启动大致过程? 加载BIOS–>读取MBR–>Boot Loader–>加载内核–>用户层init依据inittab文件来设定系统运行的等级(一般3或者5,3是多用户命令行,5是界面)–>init进程执行rc.syninit–>启动内核模块–>执行不同级别运行的脚本程序–>执行/etc/rc.d/rc.local(本地运行服务)–>执行/bin/login,就可以登录了. [评析]基本看过<鸟哥私房菜>的目录就能知道,这是第五