某公司面试题

来源:互联网 发布:seo外链软件 编辑:程序博客网 时间:2024/05/16 10:00
1.下列程序的输出结果为
#include <iostream.h>
void main()
{
     char *a[] = {"hello", "the", "world"};
     char **pa = a;
     pa++;
     cout << *pa << endl;
}
A.  the world       B. the          C. ello                    D ellotheworld
 
答案B  
 
2.已知二叉树的后序遍历序列是bfegcda,中序遍历序列是badefcg,它的前序遍历序列是
A  abcdefg         B  abdcefg     C adbcfeg        D abecdfg
 
解答:由后序a是根,由中序b是a的左子树,由后序d是a的右子树的根,由中序d无左子树,由后序d的右子树的根是c,由中序c的左右子树分别是ef和g,由后序e是c的左子树的根,由中序f是e的右子树
 
        a
b              d
                         c
               e                 g
                      f
 
前序序列是abdcefg 答案B
 
3.栈和队列的共同特点是:
A 都是先进现出 B 都是后进先出  C 只允许在端点插入和删除  D 没有共同点
 
答案 C
 
4.下面程序的运行结果为:
#include <iostream.h>
void main()
{
 int a, x;
 for (a = 0, x = 0; a <=1 && !x++; a++)
 {
  a++;
 }
 cout << a << x << endl;
}
A 21      B 22          C 32      D 41
答案 A
 
5.下列选项不正确的是
A  for (int a =1; a <=10; a++);
B  int a = 1;
     do
     {
          a++;
     } while(a<=10)
C. int a=1;
     while (a<=10)
     {
           a++;
     }
D. for(int a =1; a<=10; a++) a++;
这题ms答案是D,但经"路过^^"网友提示应为B,while后没有";"
 
6.下面数组初始化正确的是
A  char str[2] = {"a", "b"};
B. char str[2][3] = {"a", "b"};
C. char str[2][3] = {{'a', 'b'}, {'e','d'}, {'e','f'}};
D. char str[] = {"a", "b"};
答案 B 这题教难,"a","b"是字符串,相当于一维字符数组
 
7.下列说法正确的是:
A 内联函数在运行时是将该函数的目标代码插入每个调用该函数的地方
B 内联函数在编译时是将该函数的目标代码插入每个调用该函数的地方
C 类的内联函数必须在类内定义
D 类的内联函数必须在类外通过加关键字inline定义
答案:B
 
8. 下面对静态数据成员的描述正确的是:
A 静态数据成员可以在类内进行初始化
B 静态成员函数不可以被类的对象调用
C 静态成员函数不能受private控制符的作用
D 静态成员函数可以直接用类名调用
答案:D
 
9.下列运算符中,在c++中不能重载的是
A.  *    B. >=     C.::     D. delete
答案:C,C++中不能重载的运算符6个:::,.,.*,? : ,sizeof,typeid
 
10. 下列关于多态性的描述,错误的是
A C++语言的多态性分为编译时的多态性和运行时的多态性
B 编译时的多态性可通过函数重载实现
C 运行时得多态性可通过模板和虚函数实现
D 实现运行时多态性的机制称为动态绑定
答案:C 这题较难,模板是编译时多态,虚函数是运行是多态
11.如果进栈顺序为e1,e2,e3,e4,e5,则可能的出栈顺序是
A) e3,e2,e5,e4,e1   B) e2,e3,e5,e4,e1  C) e3,e2,e4,e5,e1 D)以上都有可能
答案:D
解答:设push为入栈,pop为出栈
A:push(e1) push(e2) push(e3) pop() pop() push(e4)  push(e5) pop() pop() pop()
B:push(e1) push(e2) pop() push(e3) pop() push(e4) push(e5) pop() pop() pop()
C:push(e1) push(e2) push(e3) pop() pop() push(e4) pop() push(e5) pop() pop()

12. 下面关于类和对象的描述错误的是
A) 类就是C语言中的结构体类型,对象就是C语言中的结构体变量
B) 类和对象之间的关系是抽象和具体的关系
C) 对象是类的实例,一个对象必须属于一个一已的类
D) 类是具有共同行为的若干对象的统一描述体
答案:A

13.下面关于数组的描述错误的是
A) 在C++语言中数组的名字就是指向该数组第一个元素的指针
B) 长度为n的数组,下标的范围是0-n-1
C) 数组的大小必须在编译时确定
D) 数组只能通过值参数和引用参数两种方式传递给函数
答案:D
数组通过值参数和地址参数两种方式传递参数

14.引用标准库时,下面说法正确的是
A) 语句#include "stdlib.h"是正确的,但会影响程序的执行速度
B) 语句#include <stdlib.h>是正确的,而且程序执行速度比#include "stdlib.h"要快
C) 语句#include "stdlib.h"和#include <stdlib.h>都正确,程序执行速度没有区别
D) 语句#include "stdlib.h"是错误的
答案:B
#include "stdlib.h"先在当前源文件所在的目录下查找再找系统设定的包含目录,#include <stdlib.h>直接在系统包含目录下查找

15.设a、b、c、d、m、n均为int型变量,且a=5、b=6、c=7、d=8、m=2、n=2,则逻辑表达式(m=a>b)&&(n=c>d)运算后,n的值为:
A) 0               B) 1               C) 2               D) 7
答案:C
a>b为false,m=0,&&前半段为假后半段不执行

16.不能作为重载函数的调用的依据是:
A) 参数个数                              B) 参数类型
C) 函数类型                              D) 函数名称
答案:C


17.下列程序的输出结果为:
#include< iostream. h>
int func(int n)
{
  ifn<1)return 1;
else return n+func(n-1);
return 0;
}
void main()
{
cout<<func(5)<<endl;
}
A) 0        B)10             C)15            D)16
答案:D

18. 建立派生类对象时,3种构造函数分别是a(基类的构造函数)b(成员对象的构造函数)c(派生类的构造函数)3种构造函数的调用顺序为:
A)abc                                                                B)acb
C)cab                                                                     D)cba
答案:A
测试程序如下:
#include <iostream>
using namespace std;
class cBase
{
public:
 cBase()
 {
  cout << "cbase" << endl;
 }
};
class cMember
{
public:
 cMember()
 {
  cout << "cMember" << endl;
 }
};
class cCreate : public cBase
{
private:
 cMember omember;
public:
 cCreate()
 {
  cout << "cCreate" << endl;
 }
};

int main()
{
  cCreate oCreate;
  return 0;
}
输出:
cBase
cMember
cCreate

19. 如果友元函数重载一个运算符时,其参数表中没有任何参数则说明该运算符是:
A)一元运算符                                                      B)二元运算符
C)选项A)和选项B)都可能                               D)重载错误
答案:D
友元函数重载一元运算符要有一个参数,重载二元运算符要有两个参数

20. 有以下程序段:
#define F(X,Y)   (X)--; (Y)++ (X)*(Y);
int i, a = 3, b = 4;
for( i = 0; i<5; i++)   F(a,b)
printf(“%d, %d”, a, b);
输出结果是:()
A) 3, 4                                       B) 3, 5
C) -2, 5                                     D) -2, 9
答案:C
这题比较难:注意F(a,b)后没有“;”宏替换后应为:
for (i = 0; i < 5; i++) x--; y++; x*y;
(21)下列for循环的循环体执行次数为
for (int i(10), j(1); i = j = 0; i++, j--)
  cout << "execute" << endl;
A) 0      B) 1          C)无限          D)以上都不对
答案:A
判断条件i = j =0 值是零假值
 
(22)下面程序的输出结果是
 
char *p1 = "123", *p2 = "ABC", str[50] ="xyz";
 strcpy(str + 2, strcat(p1, p2));
 printf("%s", str);
A) xyz123ABC         B) z123ABC          C) xy123ABC          D) 出错
答案:D
strcat(char * p1, char  *p2) 连接两个字符串,要求p1的长度足够长容纳*p1,*p2
 
(23)下面函数的执行结果是输出:
 char str[] = "xunlei";
 char *p = str;
 int n = 10;
 printf("%d, %d, %d", sizeof(str), sizeof(p), sizeof(n));
A) 4, 4, 4     B) 7, 4, 4    C) 6, 4, 4    D) 6, 6, 4
答案:B
指针占四个字节,字符串结尾有�
 
(24)下面函数的执行结果是输出:
void func(char para[100])
{
 void *p = malloc(100);
 printf("%d, %d", sizeof(para), sizeof(p));
}
A) 4, 4        B) 100, 4         C) 4,100        D) 100,100
答案:A
传给函数的是指向字符数组的指针
 
(25)能用二分法进行查找的是
A) 顺序存储的有序线性表  B) 线性链表   C)二叉链表  D) 有序线性链表
答案:A
二分查找必须有序并且顺序存储,否则没法折半
 
(26) 某棵完全二叉树上有698个节点,则该二叉树的叶子节点数为:
A) 349   B) 350  C) 255  D) 351
答案:A
任何二叉树叶子节点数为n0,度为2的节点数为n2,则有n0 = n2+1
由完全二叉树的定义以及节点总数698得该树必有唯一一个度为1的节点,就是最后一个叶子节点的双亲
所以有:n0-1+n0+1 = 698,得n0=349
 
(27)若有说明:int *p1, *p2, m = 5, n;你认为以下赋值语句完全正确的是
A) p1 = &m; p2 = &p1   B) p1 = &m; p2 = &n; *p1 = *p2
C) p1 = &m; *p1 = *p2; D) p1 = &m; *p2 = *p1
答案:B
指针变量需要初始化
 
(28) 下面程序的功能是把316表示为两个加数的和,使两个加数分别能被13和11整除,在划线处应填入的选项是
#include <iostream>
int main()
{
int i = 0, j, k;
 do
 {
  i++;
  k = 316 - 13 * i;
 } while(____);
j = k/11; 
 cout << "316=13*" << i << "+11*" << j;
}
A) k/11   B) k%11   C) k/11 == 0    D) k%11 ==0
答案:B
 
(29)以下函数的功能是()
int func(BTNode *t)
{
    int n = 0;
    if (t==NULL)
          return 0;
    else if (t->lchild != NULL || t->rchild !=NULL)
          n = 1;
    return (func(t->lchild) + func(t->rchild) +n);
}
A) 求所有叶子节点个数  B) 求所有节点个数
C)求所有分支节点个数 D)以上都不对
答案:C
对于分支节点n =1,对于叶子节点n = 0
 
(30)以下对枚举类型名的定义正确的是
A) enum a={one, two, three};  B) enum a {one = 9, tow = -1, three};
C) enum a={"one", "two", "three"}; D) enum a {"one", "two", "three"};
答案:B
原创粉丝点击