网上的微软笔试试题和答案

 

(ccnupq(CCNU)     http://blog.csdn.net/ccnupq/)

以下试题为自己所做和网上收集,有不对的地方望各位网友给出指导

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

 

1. 关于virtual void Draw()=0,下面说法正确的有几个C

 

(1)它是纯虚函数()

 

(2)它在定义它的类中不能实现()

 

(3)定义它的类不可实例化()

 

(4)如果一个类要继承一个ADT类,必须要实现其中的所有纯虚函数()//可以不实现,派生之后的类仍旧作为一个抽象类.

 

A. 1                                B. 2

 

C. 3                                D. 4

 

2. 下面哪一个不是C++的标准数据类型? D

 

A. int                              B. char

 

C. bool                             D. real

 

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

 

A. for语句                          B. switch语句

 

C. if语句                           D. while语句

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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底层的实现是什么?   B

 

A. VirtualAlloc()                    B. HeapAlloc()

 

C. GlobalAlloc()                     D. AllocateUserPhysicalPages()

 

12. 当调用Windows API函数InvalidateRect,将会产生什么消息A

 

A. WM_PAINT                      B. WM_CREATE  

 

C. WM_NCHITTEST              D. WM_SETFOCUS

 

 

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

 

1. 以下说法正确的是? ABC

 

A. 头文件中的 ifndef/define/endif 是为了防止该头文件被重复引用。

B. 对于#include  <filename.h> ,编译器从标准库路径开始搜索 filename.h

   对于#include  “filename.h” ,编译器从用户的工作路径开始搜索 filename.h

C. C++语言支持函数重载,C语言不支持函数重载。函数被C++编译后在库中的名字与C语言的不同。假设某个函数的原型为: void foo(int x, int y); 该函数被C编译器编译后在库中的名字为_foo,而C++编译器则会产生像_foo_int_int之类的名字。C++提供了C连接交换指定符号extern“C”来解决名字匹配问题。

D. fopen函数只是把文件目录信息调入内存。//,fopen是把整个文件读入内存

 

2. vector::iterator重载了下面哪些运算符?           C

A. ++                                 B. >>

C. *(前置)                          D. ==

 

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

 

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

 

C. 文件改名File.rename                D. 删除文件--DeleteFile()

 

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

 

A. HINSTANCE(实例句柄)                       B. HWND(窗口句柄)

 

C. HDC(设备描述表句柄)                       D. HFONT(字体句柄)

 

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

A. GL_FOG(雾化处理,不是绘图模式)       

B. GL_LINE_STRIP(不闭合折线)

C. GL_POINTS(单个顶点集)              

D. GL_TRIANGLE_FAN(扇形连续填充三角形串)

 

6. 下面哪些运算符不能被重载?                      B

A. 做用域运算符“::”(可以)

B. 对象成员运算符“.”(不可以)

C. 指针成员运算符“->”(可以)               

D. 三目运算符“? :”(可以)

不能重载‘.’,因为‘.’在类中对任何成员都有意义,已经成为标准用法。

 

 

 

 

三、填空题:(共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. SendMessagePostMessage都会向窗体发送一个消息,但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;

    //填空1

    cout << "" << i << "点:X = " << 5.0+( (dRadius * sin(dAngle/2) * 2) * cos(dAngle/2) );

    //填空2

    cout<< ", Y = " <<1.0+( (dRadius * sin(dAngle/2) * 2) * sin(dAngle/2) )<< endl;

 

}

 

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

 

1. 一个类必须要有一个不带参数的构造函数.//,可以带参数

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

3. 类里面所有的函数都是纯虚函数时才是纯虚类。 //至少有一个成员函数为<纯虚函数>的类是纯虚类

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

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

6. char *p = "Test"; p[0] = 'R';//, p[0] = ‘T’                          

7. cout << "Test"; //                                       

8. stl::list不支持随机访问叠代器。 //,因为它是链表结构的                       

9. stl::vector的效率比stl::list高。//,list效率高

10. VCVC++是一回事,而VC++是一种比C++更难一些的语言.//

11. 理论上,newmalloc造成的内存泄露都会由操作系统回收.//

12. C++structclass的差别很大,所以从语法上不能混用.//

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

 

1. 请简述PeekMessageGetMessage的区别。

PeekmessageGetmessage都是向系统的消息队列中取得消息,两个函数的不同在于取不到消息的时候,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,2小题7分,第3小题13分,第4小题18分)

 

 1. 深度优先遍历二叉树。

 

struct Node

{

    Node *Parent;

 

    Node *Left, *Right;

};

 

void Through(Node *Root)

{//实质上是后序遍历

Through(Root-> Left);

Through(Root-> Right);

Visit(Root);

}

2. 二分法查找。

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

{

    int m;

    m=Count/2;

    if(m<1)

      return -1;//找不到返回-1;

    else if(Value==Array[m])

      return Value;//找到了就返回这个找到了数值

    else if(Value>Array[m])

      return DicFind(&Array[m]+1,m,Value);

    else

      return DicFind(Array,m,Value);

}

3.请求出50!,并输出结果(请仔细考虑)

//考虑大数的问题,要用数组来存储数据

int factorial(int n)

{

    int a[1000];    //确保保存最终运算结果的数组足够大

    int carry;//进位

    int digit = 1;//位数

    a[0] = 1;//将结果先初始化为1

    int temp;//阶乘的任一元素与临时结果的某位的乘积结果

    int i,j;

    for(i = 2; i <= n; ++i)//开始阶乘,阶乘元素从2开始依次登场

    {//按最基本的乘法运算思想来考虑,将临时结果的每位与阶乘元素相乘   

        for(j = 1, carry = 0; j <= digit; ++j)     

        {

temp = a[j-1] * i + carry;//相应阶乘中的一项与当前所得临时结果的某位相乘(加上进位)       

            a[j-1] = temp % 10;//更新临时结果的位上信息  

            carry = temp / 10; //看是否有进位 

        } 

        while(carry)//如果有进位 

        {

            a[++digit-1] = carry % 10;//新加一位,添加信息。位数增1  

            carry /= 10;//看还能不能进位

        }

    }

    printf("结果是:/n%d ! = ",n);//显示结果

 

    for(i = digit; i >=1; --i)

    {

        printf("%d",a[i-1]);

    }

    return 0;

}

4. 写出字符串类String的默认构造函数、析构函数和重载赋值运算符(请尽量写的强壮)。未做

已知类String的原型为:

 

class String

 

{

public:

 

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

 

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

 

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

 

private:

 

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

};

你可能感兴趣的:(thread,C++,String,vc++,微软,编译器)