Win32/C++程序员面试考试题(转)

Win32/C++程序员面试考试题(转)

一、单项选择题:(共12题,每题2分,共24分)

1. 下面哪一个不是C++的标准数据类型?              (C)

A. int                              B. char

C. bool                             D. real

2. break关键字在哪一种语法结构中不能使用?       (C)

A. for语句                          B. switch语句

C. if语句                           D. while语句

3. 类的继承方式有几种?                           (B)

A. 两种                             B. 三种

C. 四种                             D. 六种

4. extern关键字的作用是什么?                     (D)

A. 声明外部链接                     B. 声明外部头文件引用

C. 声明使用扩展C++语句              D. 声明外部成员函数、成员数据。

5. C库函数strstr的功能是?                        (A)

A. 查找子串                         B. 计算字符串长度

C. 字符串比较                       D. 连结字符串

6. stl::deque是一种什么数据类型?                 (?)

A. 动态数组                         B. 链表

C. 堆栈                             D. 树

7. STL库里含有下面的哪一种泛型算法?              (D)

A. KMP查找                          B. 折半查找

C. 冒泡排序                         D. 快速排序

8. 现在最快且最通用的排序算法是什么?             (A)

A. 快速排序                         B. 冒泡排序

C. 选择排序                         D. 外部排序

9. Win32下的线程的哪一种优先级最高?              (C)

A. THREAD_PRIORITY_HIGHEST           B. THREAD_PRIORITY_IDLE

C. THREAD_PRIORITY_TIME_CRITICAL     D. THREAD_PRIORITY_ABOVE_NORMAL

10. 下面四个选项中,哪一个不是WinMain函数的参数? (D)

A. HINSTANCE                         B. INT

C. LPSTR                             D. WPARAM

11. VC++的编译器中,运算符new底层的实现是什么?   (?)A?B?

A. VirtualAlloc()                    B. HeapAlloc()

C. GlobalAlloc()                     D. AllocateUserPhysicalPages()

12. 下面哪一本C++参考书最厚?                     (C)

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

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

注:(C>A>B>D,Think In C++没看过,Think in Java比C++ Primer薄)

二、不定项选择题:(共6题,每题3分,共18分,多选、错选、漏选均不给分)

1. vector::iterator重载了下面哪些运算符?          (?)

A. ++                                 B. >>

C. *(前置)                          D. ==

2. CreateFile( )的功能有哪几个?                   (AB)

A. 打开文件                           B. 创建新文件

C. 文件改名                           D. 删除文件

3. 下面哪些是句柄(HANDLE)?                      (ABCD)

A. HINSTANCE                          B. HWND

C. HDC                                D. HFONT

4. 下面哪些不是OpenGL标准几何元素的绘制模式?      (A)

A. GL_FOG                              B. GL_LINE_STRIP

C. GL_POINTS                           D. GL_TRIANGLE_FAN

5. 下面哪些运算符不能被重载?                      (B)

A. 做用域运算符“::”                  B. 对象成员运算符“.”

C. 指针成员运算符“->”                D. 三目运算符“? :”

注:什么叫做运算符号重载?

6. 下面哪些人曾参与了世界上第一个C++编译器的开发? (?)

A. Bill Gates                          B. Stanley Lippman

C. Anderson Hejlsberg                  D. Bjarne Stroustrup

三、填空题:(共8题,每题3分,共24分)

1. 一个大小为320 X 192,颜色为灰度索引色的设备相关位图有 [ ] 字节。如果此位图颜色为24位真彩色,则它的大小有 [ ] 字节。

2. Windows API的中文意义是 [Windows 应用程序接口]。

3. 计算反正弦的库函数是 [asin()];计算浮点数绝对值的库函数是 [fabs()];计算浮点数n次方的库函数是 [pow()];将浮点数转化为字符

串的库函数是 [fcvt()]。

4. 如果i等于5,那么( ++i ) - -的返回值是 [6] 。

5. API LoadBitmap()的功能是从 [ 指定的模块和或应用程序实例 ] 中读取位图数据到内存。

6. new和 [delete] 对应,malloc和 [free] 对应,他们之间 [不能] 交叉混用。calloc的功能是 [为数组动态分配内存],realloc的功能是

[改变原有内存区域的大小]。

7. SendMessage和PostMessage都会向窗体发送一个消息,但SendMessage____将一条消息发送到指定窗口,立即处理_____
而PostMessage______将一条消息投递到指定窗口的消息队列,不需要立即处理______。

8. 输出指定圆心、半径、边数的圆上的点:

const int nCount = 12;

const double dOrgX = 5.0,

dOrgY = 3.0;

const double dRadius = 2.0;

for( int i = 0; i < nCount; i++ )

{

    double dAngle = M_PI * 2.0 / (double)nCount * i;

    cout << "第" << i << "点:X = " << ________; cout << ", Y = " << __________ << endl;

}

三、判断题:(共12题,每题2分,共24分)

1. 一个类必须要有一个不带参数的构造函数。                  □错

2. 你不能写一个虚的构造函数。                              □对

3. 类里面所有的函数都是纯虚函数时才是纯虚类。              □错

4. const成员函数对于任何本类的数据成员都不能进行写操作。   □对

5. 函数中带默认值的参数必须位于不带默认值的参数之后。      □???

6. char *p = "Test"; p[0] = 'R';                           □错

7. cout << "Test";                                         □???

8. stl::list不支持随机访问叠代器。                         □对

9. stl::vector的效率比stl::list高。                        □错

10. VC和VC++是一回事,而VC++是一种比C++更难一些的语言。    □错

11. 理论上,new和malloc造成的内存泄露都会由操作系统回收。 □错

12. 在C++中struct和class的差别很大,所以从语法上不能混用。 □对

四、简述题(共3题,每题5分,共15分)

1. 请简述PeekMessage和GetMessage的区别。

答: Peekmessage和Getmessage都是向系统的消息队列中取得消息,两个函数的不同在于取不到消息的时候,若Getmessage()向消息队列中取

不到消息,则程序的主线程会被OS(操作系统)挂起,等到有合适的消息时才返回;若是用Peekmessage()在消息队列中取不到消息,则程序会

取得OS控制权,运行一段时间。
另外,在处理消息的时候,GetMessag()会将消息从队列中删除,而PeekMessage()可以设置最后一个参数wRemoveMsg来决定是否将消息保留在队列

中。


2. 请列出你所知道的在Windows SDK平台上,实现计时功能的方法。

答:可以使用SetTimer函数创建一个计时器,SetTimer的函数原型如下:
UINT_PTR   SetTimer( HWND hWnd, UINT_PTR nIDEvent, UINT uElapse, TIMERPROC lpTimerFunc )

3. 请简述你所知道的const的各种用法。

const 常量
const 修饰类的数据成员
const 修饰指针
const 应用在函数声明中
const 应用在类成员函数

 

五、编程题:(共3题,第1小题7分,第2小题14分,第3小题24分)

1. 深度遍历二叉树。

struct Node

{

    Node *Parent;

    Node *Left, *Right;

};

void Through(Node *Root)

{

}

答案:
void Through(Node* Root){
        if(Root){
                Through(Root->Left);
                Through(Root->Right);
                //visit Root.
        }
}

 

2. 二分法查找。

int DicFind( int *Array, int Count, int Value )

{

}

答案:
int DicFind(int* Array, int Count, int Value){
        int start = 0;
        int end = Count-1;
        int mid = 0;
        while(start <= end){
                mid = (start+end)/2;
                if(Array[mid] > Value){
                        end = mid-1;
                }else if(Array[mid] < Value){
                        start = mid+1;
                }else{
                        return mid;
                }
        }
       
        return -1;
}

 

3. 写出字符串类String的默认构造函数、析构函数和重载赋值运算符。

已知类String的原型为:

class String

{

public:

    String( const char *pStr = NULL ); // 默认构造函数

    ~String( void ); // 析构函数

    String &operate = ( const String &Source ); // 重载赋值运算符

private:

    char *m_pData; // 指向字符串的指针

};

答案:
String::String( const char *pStr = NULL )
:m_pData(NULL)
{
        if(pStr){
                int nLen = strlen(pStr);
                m_pData = new char[nLen+1];
                if(m_pData){
                        memcpy(m_pData, pStr, (nLen+1)*sizeof(char));
                }
        }
}
String::~String( void ){
        if(m_pData){
                delete[] m_pData;
                m_pData = NULL;
        }
}
String &String :: operator= ( const String &Source )
{
        if(&Source == this)
                return *this;
               
        if(m_pData){
                delete[] m_pData;
                m_pData = NULL;
        }
               
        if(Source.m_pData){
                int nLen = strlen(pStr);
                m_pData = new char[nLen+1];
                if(m_pData){
                        memcpy(m_pData, pStr, (nLen+1)*sizeof(char));
                }
        }
}

答案仅供参考!!!!

安装.NET Framework失败后上网找的卸载工具,亲测卸载后可以完成安装.NET Framework。 一下位介绍: ====================== 分享可以完美卸载.NET Framework 1.0~4.5的framework卸载工具。.NET Framework几乎是系统比不可少的运行组件,特别是现在越来越多的软件都需要.NET Framework运行库的支持。例如本站给大家分享的coreldraw x6安装程序,就必须要.NET Framework 3.5、.NET Fra...... yinshu 分享可以完美卸载.NET Framework 1.0~4.5的framework卸载工具。.NET Framework几乎是系统比不可少的运行组件,特别是现在越来越多的软件都需要.NET Framework运行库的支持。例如本站给大家分享的coreldraw x6安装程序,就必须要.NET Framework 3.5、.NET Framework 4.0运行库的支持才可以安装及运行。 但最近有一台电脑,.NET Framework 4.0死活安装不上(可能是以前不完整安装造成的),想把Framework卸载了重新安装,结果系统自带的卸载工具还卸载不了,甚是头疼,后来找到这款专业的.net framework卸载工具:cleanup_tool才终于把net framework请出电脑,然后再次安装.NET Framework 4.0成功。 NET Framework卸载工具 .NET Framework Cleanup Tool软件简介 .NET Framework Cleanup Tool是一个专用于卸载、清除掉计算机中不同版本.NET框架的免费小软件。支持所有语言的.NET。它能删除与.NET相关的文件,并且还能自动将对应的文件夹、注册表项目和Windows Installer文件全部删除。 使用.NET Framework Cleanup Tool,基本可以将电脑还原到未安装.NET框架时的状态。因此,当你发现.NET不能正常更新,或是无法删除、甚至于重新安装不起作用时,试试这个小软件。 如何卸载framework cleanup_tool支持.NET Framework 1.0~4.5卸载,虽然是英文版的,不过使用简单,只要运行后选择你需要清除的.net framework版本(或者选择卸载全部.NET Framework版本),然后点击“cleanup now”按钮即可开始执行清除作业,过程会持续一到两分钟即可完成framework卸载。 特别注意:net framework框架并不是无用的东西,现在很多程序都需要net framework环境才能运行,所以建议你只有当.NET Framework损坏或者安装不上新版本时才考虑卸载重装。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值