20091206微软笔试题目

来源:互联网 发布:淘宝全球购入口 编辑:程序博客网 时间:2024/04/20 10:49

1)  MS笔试题目之一:C++类继承直接的重载问题virtual

判断下面程序的输出结果

class A

{

public:

    virtual void P(){cout<<"A"<<endl;}

};

class B:public A

{

public:

    void P(){cout<<"B"<<endl;}

};

class C:public B

{

public:

    void P(){cout<<"C"<<endl;}

};

 

void main(){

    C* pC = new C();

    ((A*)pC)->P();

    ((B*)pC)->P();

    ((C*)pC)->P();

}

 

输出结果为:

C

C

C/

 

注意:如果class A中的P函数不是vtrual的,那么输出结果就是:

A

B

C

可见,virtural的作用是当用基类的指针指向子类的函数时,调用子类的函数。

 

2)  MS笔试题目之二:

编写一个简单的语言语法检查器:

a)          变量名称以字母开头的任意字符组成;但是关键字LoopEnd不能作为变量名称;

b)        只有int数据类型,并且无限大,没有溢出的可能;

c)         有四种操作类型:

                        i.              ZeroSetV1=0

                      ii.              ValueAssignmentV1=V2

                    iii.              AddOne V1++

                     iv.              Loop

Loopv

       A++;

       B=A

End

可以嵌套,并且嵌套中的v变化并不影响loop参数中的v变化,比如:

Loop(v1)

       Loop(v2)

              v2++;

       End;

End;

其中v1=2,v2=2,那么此里外两个循环均运行两次,里面的v2++并没有影响外面的循环次数。

d)        无非零的常量;

e)         无比较和if语句。

 

Q1:编写一个语法检查函数

Bool TaoGrammarChecker(int statementCount, char* codes[])

此函数参数分别是:statementCount记录的是codes数组的大小;codes数组中记录的是每条语句。

其中有已存在的函数,来检查四个操作

Bool IsValidZeroSetStatementchar* codes;

Bool IsValidValueAssignmentStatement(char* codes);

Bool IsValidAddOneStatement(char* codes);

Bool IsValidLoopStartStatement(char* codes);

Bool IsValidLoopEndStatement(char* codes);

比如IsValidZeroSetStatement函数,作用是如果codes语句是ZeroSet操作,则返回true;否则返回false

       Q2:编写test cases来对上面的程序进行测试,注意case的分类

       Q3:利用Tao语言来编写自减函数,比如输入是a,则返回a-1的值。如果a0,则返回0

       Q4:假设已经存在“--”,类似c语言中的功能。利用Tao语言来编写“-=”函数,类似c语言中的-=,比如“a-=b”。如果a小于b则返回0

       Q5:假设“-=”存在,利用Tao语言编写ab整除的功能。不用考虑b为零的情况。