2013搜狗校园招聘笔试题


第一题:以下程序的输出是___________________

class Base
{
public:
 Base(int j):i(j){}
 virtual ~Base(){}
 void func1(){i *= 10; func2();}
 int getValue(){return i;}
protected:
 virtual void func2(){i++;}
protected:
 int i;
};

class Child:public Base
{
public:
 Child(int j):Base(j){}
 void func1(){i *= 100; func2();}
protected:
 void func2(){i += 2;}
};

int main()
{
 Base* pb = new Child(1);
 pb->func1();

 cout<<pb->getValue()<<endl;
 
 delete pb;

 return 0;
}

 

此题输出:12.(在非虚函数中调用虚函数,将调用实际的虚函数)

 

第三题:以下程序的输出是___________________

int main()
{
 char num;
 for(num = 0;num < 255;)
  num += num;

 cout<<num<<endl;

 return 0;
}

 

此题是死循环,无输出。(for循环中将num赋值为0了,在for循环上面是一个随机的值。所以num+num还是0,此题说明无论在什么情况下一定要坚持自己的判断)。

 

第四题:程序出错在什么阶段:

#include
using namespace std;

int main()
{
 http://www.bkjia.com
 cout<<"welcome to bkjia"<<endl;

 return 0;
}

A:编译时;B:运行时;C:编译和运行时都出错;D程序运行正常

选D。因为http://www.bkjia.com中//后面是注释,前面是标签(类似goto的标签)。(坑爹啊)

第五题:下面程序的执行结果是【说明:x86_64环境】(*间接访问的优先级大于-)

int a[4][4] = {
  {1,2,3,4},
  {50,60,70,80},
  {900,1000,1100,1200},
  {13000,14000,15000,16000}
 };

 int (*p1)[4] = a;
 int (*p2)[4] = &a[0];
 int *p3 = &a[0][0];

 cout<<*(*(a + 1) - 1)<<"  "<<*(*(p1 + 3) - 2) + 1
  <<" "<<*(*(p2 - 1) + 16) + 2<<" "
  <<*(p3 + sizeof(p1) - 3)<<endl;

 输出结果为:4  1101 13002 2。

p1为指向一维数组的指针,所以a + 1指向{50,60,70,80}这一维的地址。减一则为4的地址;同理第二个输出1101。同理,由于数组的列是4,所以*(p2 - 1) + 16就相当于*(p2) + 12,所以第三个输出13002。

第四个由于p1是指针,所以sizeof(p1)为4,所以第四个输出2。

  • 1
  • 2
  • 3
  • 下一页

相关内容