百度---2011年校园招聘笔试题 C++类题目

一、选择题

1.下列关于对象初始化的叙述中,正确的是
  A 定义对象的时候不能对对象进行初始化
  B 定义对象之后可以显式地调用构造函数进行初始化
  C 定义对象时将自动调用构造函数进行初始化
  D 在一个类中必须显式地定义构造函数实现初始化

2.下列关于基类和派生类关系的叙述中,正确的是
  A 每个类最多只能有一个直接基类
  B 派生类中的成员可以访问基类中的任何成员
  C 基类的构造函数必须在派生类的构造函数体中调用
  D 派生类除了继承基类的成员,还可以定义新的成员

3.下列关于赋值运算符“=”重载的叙述中,正确的是
  A 赋值运算符只能作为类的成员函数重载
  B 默认的赋值运算符实现了“深层复制”功能
  C 重载的赋值运算符函数有两个本类对象作为形参
  D 如果己经定义了复制(拷贝 构造函数,就不能重载赋值运算符

4.下列选项中,正确的C++标识符是
  A6_group   B group~6   C age+3   D_group_6
5. 下列循环语句中有语法错误的是
  A int i;for( i=1;i<10;i++)cout<<‘*‘;
  B int i,j;for(i=1,j=0;i<10;i++,j++)cout<<‘*‘;
  C int i=0;for(;i<10;i++)cout<<‘*‘;
  D for(1)cout<<‘*‘;

6. 下列定义语句中,错误的是
  A intpx*;   B char*acp[10];   Cchar(*pac)[10];  D int(*p)();
7. 若MyClass为一个类,执行“MyClass a[4],*p[5];”语句时会自动调用该类构造函数的次数是
  A2 B5 C4 D 9
8. 有如下程序:
  #include<iostream>
  #include<cmath>
  usingstd::cout;
  classPoint{
  public:
  frienddouble distance(const Point &p); //p距原点的距离
  Point(int xx=0,int yy=0):x (xx),Y(YY){}//①
  private:
  Int x,Y;  };
  doubledistance(const Point &p) { //②
  returnsqrt(p.x*p.x+p.Y*p.Y);  }
  int main(){
  Point p1(3,4);
  cout<<distance(p1); //③
  return 0;  }  下列叙述中正确的是
  A 程序编译正确   B 程序编译时语句①出错

  C 程序编译时语句②出错   D程序编译时语句③出错

9. 下列哪两个是等同的 

int b;
   const int *a =&b;    ‚ const * int a = &b;
  ƒ const int*const a = &b;   „ int const* const a = &b; 

A „ B ‚ C ƒ„ ` D ‚ƒ

10. 有如下语句序列:
  charstr[10];cin>>str;
  当从键盘输入”I lovethis game”时,str中的字符串是
  A"I love this game"  B "I love thi"   C"I love"   D "I"
11. 有函数模板声明和一些变量定义如下:
  template<class Tl,class T2,class T3>T1 sum(T2,T3);
  doubledl,d2;

  则下列调用中,错误的是

  Asum<double,double,double>(dl,d2);  B sum<double;double>(d1,d2);
  Csum<double>(d1,d2);   D sum(d1,d2);

12. 以下程序段完全正确的是
  A int*p; scanf("%d",&p);   B int *p; scanf(“%d”,p);
  C int k,*p=&k; scanf("%d",p);   D int k,*p:; *p= &k; scanf(“%d”,p);

13. 有定义语句:int *p[4];以下选项中与此语句等价的是
  Aint p[4];   B int **p;   C int *(p「4」);   Dint (*p)「4」;
14. 若要重载+、=、<<、=和[]运算符,则必须作为类成员重载的运算符是
  A +和=   B =和<<   C ==和<<   D =和[]
15. 下列说法正确的是( )
  A 内联函数在运行时是将该函数的目标代码插入每个调用该函数的地方
  B 内联函数在编译时是将该函数的目标代码插入每个调用该函数的地方
  C 类的内联函数必须在类体内定义
  D 类的内联函数必须在类体外通过加关键字inline定义

16. 下面对于友元函数描述正确的是( )
  A 友元函数的实现必须在类的内部定义
  B 友元函数是类的成员函数
  C 友元函数破坏了类的封装性和隐藏性
  D 友元函数不能访问类的私有成员

17. 在公有派生情况下,有关派生类对象和基类对象的关系,下列叙述不正确的是( )
  A 派生类的对象可以赋给基类的对象
  B 派生类的对象可以初始化基类的引用
  C 派生类的对象可以直接访问基类中的成员
  D 派生类的对象的地址可以赋给指向基类的指针

18. 下列关于多态性的描述,错误的是( )
  A C++语言的多态性分为编译时的多态性和运行时的多态性
  B 编译时的多态性可通过函数重载实现
  C 运行时的多态性可通过模板和虚函数实现
  D 实现运行时多态性的机制称为动态绑定

19. 如果友元函数重载一个运算符时,其参数表中没有任何参数则说明该运算符是( )
A 一元运算符 B二元运算符 C 选项A 和选项B 都可能 D 重载错误
20. 在下列关于C++函数的叙述中,正确的是( ) 

A 每个函数至少要有一个参数 B 每个函数都必须返回一个值 

C 函数在被调用之前必须先声明 D 函数不能自己调用自己

21. 如果进栈序列为el,e2,e3,e4,则可能的出栈序列是 ( )
  A e3,el,e4,e2   B e2,e4,e3,el    C e3,e4,e1,e2  D 任意顺序
22. 下面关于模板的描述,错误的是 ( )
  A 函数模板和类模板的参数可以是任意的数据类型
  B 类模板不能直接使用,必须先实例化为相应的模板类.然后定义了模板类的对象
  C 函数模板不能直接使用,需要实例化为模板函数后才能使用
  D 类模板的成员函数都是模板函数

23. 下面对静态数据成员的描述中,正确的是( )
  A 静态数据成员可以在类体内进行初始化
  B 静态数据成员不可以被类的对象调用
  C 静态数据成员不能受private控制符的作用
  D 静态数据成员可以直接用类名调用

24. 对类成员访问权限的控制,是通过设置成员的访问控制属性实现的,下列不是访问控制属性的是( )
  A 公有类型    B私有类型    C 保护类型    D友元类型
25.抽象基类是指( )

A 嵌套类    B 派生类  C含有纯虚函数 D 多继承类

26.如果已定义了一个C++类CMyList并有以下语句:

CMyList list(3);

以下说法正确的是()。

A 该语句会创建一个CMyList类的一个对象; 

B 该语句会创建一个CMyList类的3个对象;

C 必须为类CMyList定义一个构造函数; 

D 必须为类CMyList定义一个析构函数;

E 必须定义函数CMyListlist(int);

27. 以下说法正确的是( )。

A内联(inline)函数改善了函数调用的执行效率。

B类A的友元(friend)函数可以访问类A的私有成员。

C类A的友元(friend)类B可以访问类A的私有成员。

D类A的静态数据成员为类A的所有对象所共享。

E类A的静态成员函数没有传递this 指针作为参数。

28.类B从类A派生,则类B可以访问类A中的( )成员。

A public成员 B private成员 Cprotected成员 D数据成员   E函数成员

29. 面向对象的程序设计语言具有()等共同特性。

A封装性 B多态性 C简单性 D复杂性 E继承性

30. 现有一个程序如下:

#i nclude

class A

{ public:
void f(){ cout<< “A::f()”;}
};

class B

{ public:
void f(){ cout<< “B:f()”;}void g(){ cout<< “B:g()”;}
};

class C : public A, public B

{ public:
void g(){cout<<”C::g()”;}
void h()
{cout<<”C::h()”;
f(); //语句1

}

};

void main()

{ C obj;

obj.f();    //语句2

obj.A::f();//语句3

obj.B::f();//语句4

obj.g();   //语句5

}

则编译时会产生错误的语句有()

A语句1     B语句2   C语句3 D语句4    E语句5

二、 填空题

1. int func(x)

{
int countx = 0;
while(x)
{
countx ++;
x = x&(x-1);
}
return countx;
} 

假定x = 9999。 函数的运行结果为_____

2. 一个栈的初始状态为空。首先将元素5,4,3,2,1 依次入栈,然后退栈一次,再将元素A,B,C,D依次入栈,之后将所有元素全部退栈,则所有元素退栈(包括中间退栈的元素)的顺序为_______________。

3. 一棵二叉树有10个度为1的结点,7个度为2的结点,则该二叉树共有个_____结点。

4. 一个双目运算符作为类的成员函数重载时,重载函数的参数表中有_ _个参数。

5. #defineDOUBLE(x) x+x ,i= 5*DOUBLE(5); i的值为_ _。

6. switch()中不允许的数据类型是____。

7. 某32位系统下, C++程序void *p = malloc( 100 ); sizeof (p) = ____。

8. int a = 4;(++a) += a;执行后a的值为___。

9. 派生类中的成员函数可以直接访问基类中的公有成员和____成员。

10. C++语言的参数传递机制包括传值和________两种。

三、 阅读题

1.写出函数Test的运行结果

voidTest(void){

char*str = (char *) malloc(100);

strcpy(str,“hello”);

free(str);

if(str!= NULL){

strcpy(str,“world”);

printf(str);

}

}

2.写出程序的运行结果

#include<iostream>
  using namespace std;
  class Base{
  Int x;
  Public:
  Base(int b):x(b){}
  virtual void display(){cout<<x;}

  };

  class Derived:public Base{
  Int y;
  public:
  Derived(int d):Base(d),y(d){}
  void display(){cout<<y;}  };
  int main(){
  Base b(1);Derived d(2);
  Base*p=&d;
  b .display();d.display();p一>display();
  return 0;

  }

3.下面的函数实现在一个固定的数上加上一个数,有什么错误,改正
int add_n(int n) { static int i=100; i+=n; return i;
}

4.i最后等于多少?
int i = 1;int j = i++;
if((i>j++) && (i++ == j)) i+=j;

5.#include…

constint SIZE=10;

classstack

{char stck[SIZE];

inttop;

public:

voidinit();

voidpush(char ch);

charpop();

};

voidstack::init()

{top=0; }

voidstack:push(char ch)

{if(top==SIZE)

 { cout<<”Stack is full.\n”;

return ; }

stck[top++]=ch;

}

charstack:pop()

{if(top==0)

   { cout<<”Stack is empty.\n”;

   return 0;}

return stck[--top];

}

voidmain()

{stack s1, s2;

 s1.init();

 s2.init();

 s1.push(‘a’);

 s1.push(‘b’);

 s1.push(‘c’);

 s2.push(‘x’);

 s2.push(‘y’);

 s2.push(‘z’);

 for(int i=0; i<3; i++)
cout<<”Pop s1:”<< s1.pop();
 for(i=0; i<3; i++)

cout<<”Pop s2:”<< s2.pop();

}

四、附加题: 

写一个Singleton。Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、选择题(每题1分,共30分) 下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项的标记写在题干后的括号内。 1.下列语句序列执行后,k 的值是( )。 int m=3, n=6, k=0; while( (m++) < ( -- n) ) ++k; A) 0 B) 1 C) 2 D) 3 2.设 i、j 为int型变量名,a 为int型数组名,以下选项中,正确的赋值语句是( )。 A) i = i + 2 B) a[0] = 7; C) i++ - --j; D) a(0) = 66; 3.Java语言的类间的继承关系是( )。 A) 多重的 B) 单重的 C) 线程的 D) 不能继承 4.设有定义 int i = 6 ;,则执行以下语句后,i 的值为( )。 i += i - 1; A) 10 B) 121 C) 11 D) 100 5.下列选项中,用于在定义子类时声明父类名的关键字是( )。 A)interface B) package C) extends D) class 6.若已定义 byte[ ] x= {11,22,33,-66} ; 其中0≤k≤3,则对x数组元素错误的引用是( )。 A) x[5-3] B) x[k] C) x[k+5] D) x[0] 7.下列语句序列执行后,ch1 的值是( )。 char ch1='A',ch2='W'; if(ch1 + 2 < ch2 ) ++ch1; A) ‘A' B) ‘B' C) ‘C' D) B 8.下列语句序列执行后,i 的值是( )。 int i=8, j=16; if( i-1 > j ) i--; else j--; A) 15 B) 16 C) 7 D) 8 9.下列语句序列执行后,k 的值是( )。 int i=10, j=18, k=30; switch( j - i ) { case 8 : k++; case 9 : k+=2; case 10: k+=3; default : k/=j; } A) 31 B) 32 C) 2 D) 33 10.下面语句执行后,i 的值是( )。 for( int i=0, j=1; j < 5; j+=3 ) i=i+j; A) 4 B) 5 C) 6 D) 7 11.设有定义 float x=3.5f, y=4.6f, z=5.7f;则以下的表达式中,值为true的是( )。 A) x > y || x > z B) x != y C) z > ( y + x ) D) x < y & ! ( x < z ) 12.下列语句序列执行后,i的值是( )。 int i=16; do { i/=2; } while( i > 3 ); A) 16 B) 8 C) 4 D) 2 13.以下由 for 语句构成的循环执行的次数是( )。 for ( int i = 0; true ; i++) ; A) 有语法错,不能执行 B) 无限次 C) 执行1次 D) 一次也不执行 14.定义类头时能使用的修饰符是( )。 A) private B) static C) abstract D) protected 15.设int 型变量 a、b,float 型变量 x、y,char 型变量 ch 均已正确定义并赋值, 正确的switch语句是( )。 A) switch (x + y) B) switch ( ch + 1 ) { ...... } { ...... } C) switch ch D) switch ( a + b ); { ...... } { ...... } 16. 下列最终属性 i 的定义中,正确的是( )。 A) static final int i=100; B) final int i=1.2; C) final i='w'; D) final char i; 17. 下列类定义中,不正确的是( )。 A) class x { .... } B) class x extends y { .... } C) static class x implements y1,y2 { .... } D) public class x extends Applet { .... } 18. 设 x、 y为已定义的类名,下列声明x类的对象x1的语句中正确的是( )。 A) static x x1; B) public x x1=new x(int 123); C) y x1; D) x x1=x( ); 19. 设 i、j、k 为类 x 中定义的 int 型变量名,下列类 x 的构造函数中不正确的是( )。 A) x( int m){ ... } B) void x( int m){ ... } C) x( int m, int n){ ... } D) x( int h,int m,int n){ ... } 20. 下列方法定义中,正确的是( )。 A) int x( ){ char ch='a'; return (int)ch; } B) void x( ){ ...return true; } C) int x( ){ ...return true; } D) int x( int a, b){ return a+b; } 21. 用于定义类成员的访问控制权的一组关键字是( )。 A) class, float, double, public B) float, boolean, int, long C) char, extends, float, double D) public, private, protected 22. 不能构成循环的语句是( )。 A) for 语句 B) while 语句 C) switch 语句 D) do__while 语句 23. 下列程序段执行后 b3 的结果是( )。 boolean b1=true, b2, b3; b3= b1 ? b1 : b2; A) 0 B) 1 C) true D) false 24. 下面数据结构中,属于非线性的是( )。 A) 线性表 B) 树 C) 队列 D) 堆栈 25. 设有定义 int i=123; long j=456; 下面赋值不正确的语句是( )。 A) j=i; B) j=(long)i; C) i=(int)j; D) i=j; 26. 现有一整型数组a[4],它的所有数组元素是( )。 A) a0, a1, a2, a3 B) a[0], a[1], a[2], a[3] C) a[1], a[2], a[2], a[4] D) a[0], a[1], a[2], a[3], a[4] 27. 定义 Java Applet程序时,必须有的 import语句是( )。 A) import java.applet.Applet; B) import java.io.*; C) import java.awt.event; D) import java.lang.*; 28.现有两个类A、B,以下描述中表示B继承自A的是( )。 A) class A extends B B) class B implements A C) class A implements B D) class B extends A 29. 下列算法中,不能用来排序的算法是( )。 A) 冒泡法 B) 插入排序 C) 选择排序 D) 对分法 30. 堆栈操作的原则是( )。 A) 先进先出 B) 后进先出 C) 只能进 D) 只能出 二、填空题(每空1分,共15分) 请将正确答案填写在答题纸相应位置上,答在试卷上不得分。 1. 构造函数______有返回值。 2. Java语言中的浮点型数据根据数据存储长度和数值精度的不同,进一步分为float和 __________两种具体类型。 3. 创建类对象的运算符是___________。 4. 当整型变量n的值不能被13除尽时,其值为 false 的Java语言表达式是_____________ 。 5. 在Java语言中,所有的数组都有一个lenght属性,这个属性存储了该数组的__________。 6. 定义类就是定义一种抽象的____________,它是所有具有一定共性的对象的抽象描述。 7. 在Java语言中,使用_____、______等技术,实现软件重用。 8. Java的复合数据类型有 : 类、数组和_______等。 9. 表达式3/6 * 5的计算结果是________ 。 10.定义初值为10的10次方的长整型变量 lvar 的语句是:__________________________。 11. 顺序结构、分支结构(或称选择结构)、____________是结构化程序设计的三种基本流程控制结构。 12. 以下方法 m 的功能是求两参数之积的整数部分。 int m ( float x, float y ) { __________________; } 13. Java 源程序文件编译后产生的文件称为________文件,其扩展名为 ___________ 。 三、判断题( 每小题1分,共15分 ) 下列各题中,你认为正确的就在其题干后的括号内打"√",错误的打"×"。 1.Java 和 c++都是面向对象的程序设计语言。( ) 2.字符串 "\'a\'" 的长度是5。( ) 3. 同一个类中定义多个参数列表不同的同名方法,叫做方法的重载。( ) 4. 一个类的定义包括定义类头和定义类体两个部分。( ) 5.一个程序里可以有多个父类,也可以有多个主类。( ) 6. 一个子类可以重新定义从父类那里继承来的同名方法,而且允许它们有不同的返回值。( ) 7.抽象方法只能存在于抽象类中。( ) 8. 在父类中声明为 final 的方法,也可以在其子类中被重新定义(覆盖)。( ) 9. 接口中所有方法均为抽象方法。( ) 10. False 是合法的 Java 标识符。( ) 11. 子类的类成员变量不能与其父类的类成员变量同名。( ) 12. static 变量不能是 private 变量。( ) 13. 保留字 this 代表当前对象。( ) 14. 类的构造函数名必须和类名相同。( ) 15. 子类的对象能直接向其父类对象赋值。( ) 四、程序填空( 每空2分,共20分 ) 阅读程序,根据程序功能,在指定的空白处填上适当的语句或语法成分,使程序完整。 1.下面是一个类的定义: public class ____________ { int x, y; Myclass ( int i, _______) // 构造函数 { x=i; y=j; } } 2.下面是用户程序对 Applet 类中方法 paint( ) 的重新定义。 public void paint(Graphics ____ ) { int i=689; a.drawString ( ________+ i ,20,60); } 3.下面是一个Java Application 的主类的定义,其功能是输出所有命令行参数。 import java.io.*; public class MyClass { public static void main(String args[ ]) { if( args.length !=___) for(int i=0; i < args.length; i++) System.out.println(___________); else System.out.println("没有命令行参数"); } } 4.下面是一个小程序的主类myprogram的定义, 其中A、B是该主类所在源程序中已定义的另两个类的类名: import java awt.*; import java applet.*; public class myprogram extends Applet//定义小程序的主类 { A a; B b; public ________ init( ) { a=new A( ); b=_____ B( ); } } 5.下面程序的功能是输出数组各元素的和。 import java.awt.Graphics; import java.applet.Applet; public class SumArray extends Applet { float[] a; a= new _______[6]; float sum=0.0f; public void init( ) { for ( int j = 0; j < a.length; j++ ) a[j] = j+1; for ( int i = 0 ; i < a.length; i++ ) sum+= a[i]; } public void paint( Graphics g ) { g.drawString( "Total of array elements: " + ________ , 25, 25 ); } } 五、简答题( 每1问2分,共20分 ) 阅读程序(或程序片段)并回答问题 。 1. import java.awt.*; import java.applet.*; public class Test51` extends Applet { float[ ] x = {1.2, 3.4, 5.6, 7.8}; public void paint(Graphics g) { int s=0; for( int i = 0; i < x.length; i++ ) s += (int)x[i]; g.drawString(" " + s, 30, 60); } } 问题: 1)程序的输出结果是什么? 2)方法paint()中的循环体 s += (int)x[i]; 能写为 s +=x[i]; 吗? 为什么? 2. public class Test52 { String str1="Hello, Java world! \t"; String str2="Hello, students! "; public static void main(String args[]) { System.out.print(str1); System.out.println(str2); } } 问题:1)这是哪种形式的 Java 程序 ? 2)程序的输出是什么?输出的结果在 Applet 窗口中吗? 3. 设ch1, ch2是 char 型变量: if ( ch1 == ‘a' ) { if ( ch2 == ‘b' ) System.out.print(" ch1=\'a\' , ch2=\'b\' "); } else System.out.print(" ch1!=\'a\' "); System.out.println(" end "); 问题: 1)若执行前 ch1 的值为 ‘a', ch2 的值为 'c' 该程序段输出是什么? 2)若执行前 ch1 的值为 'w', ch2 的值为 'b' 该程序段输出是什么? 3)若执行前 ch1 的值为 'a', ch2 的值为 'b' 该程序段输出是什么? 4.有如下源程序: import java.awt.*; import java.applet.*; public class Test54 extends Applet { B b; public void init( ) { b=new B( 'f', 87.6f, 69.1f); } public void paint(Graphics g) { g.drawString("序号 "+"性别 "+"成绩1 " +"成绩2 ",20,50); b.Print(g); } } class A { static int n=100; char ch; A( ) { n++; } A( char c){ this( ); ch=c; } void Print(Graphics g) { g.drawString(" "+n+" "+ch,20,70); } } class B extends A { float s1, s2; B(float r1,float r2){ s1=r1; s2=r2; } B( char c, float r1, float r2) { super(c); s1=r1; s2=r2; } void Print(Graphics g) { super.Print(g); g.drawString(" "+s1+" "+s2,40,70); } } 问题: 该程序的输出是什么? 5.已知菲波那契数列的数学表达式为: fibonacci(n)=n, n=0,1; fibonacci(n)=fibonacci(n-1)+fibonacci(n-2), n≥2; 设 m 是 long 型变量,下面是用递归算法求菲波那契数列的方法: long fibonacci(long n) { if(n==0||n==1) return n; else return (fibonacci(n-1)+fibonacci(n-2)); } 问题: 当语句 m=fibonacci(3); 执行时,方法 fibonacci( )被调用了几次? 6. 下面是一个排序的程序: import java.io.*; public class Test56_Sort { public static void main(String args[ ]) { int[] a={42,99,5,63,95,36,2,69,200,96}; System.out.println("排序前的数据序列:"); ShowArray(a); Sort(a); System.out.println("排序后的数据序列:"); ShowArray(a); } public static void Sort(int[] x) { int w; for(int i=1; i<x.length; i++) { for(int j=0; j<x.length-1; j++) if(x[j]>x[j+1]) { w=x[j]; x[j]=x[j+1]; x[j+1]=w; } /* if(i==1||i==2) ShowArray(x); if(i==2) break; */ } } public static void ShowArray(int b[]) { for(int i=0; i<b.length; i++) System.out.print(" "+b[i]); System.out.println(" "); } } 问题: 如果将方法Sort( )中的一对注释符(/* */)去掉,程序输出的结果是什么?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值