长春径点笔试C++常见概念题

  先给大家分享几道有关C++常考的概念性笔试题,大多是我参加大连金山西山居公司的笔试题,该公司是个游戏公司,有游戏开发相关经验的同学会有很大优势:

1.什么是面向对象?面向程序?

面向对象其实是现实世界模型的自然延伸。把数据和数据的操作方法放一起,作为一个相互依存的整体——对象,对同类对象抽出共性形成类,类中的大多数数据,只能用本类的方法进行处理。类通过一个简单的外部接口与外界发生关系,对象与对象之间通过消息进行通信。程序流程由用户在使用中决定。

2.纯虚析构函数作用?

析构函数的纯虚性唯一效果就是保证抽象类的实例化。

 

3.指针与引用的区别?分别用在什么地方?

(1)指针是一个变量,只不过这个变量存储的是一个地址;而引用跟原来的变量实质上上同一个东西,只不过是原变量的一个别名

(2)可以有const指针,但是没有const引用。

(3)指针可以有多级,而引用没有

(4)指针可以为空而引用的值不能为NULL,并且引用在定义时必须初始化。

(5)指针和引用的自增++运算含义不一样。

(6)指针的值初始化后可以改变,而引用在初始化后就不会再改变了。

(7)“sizeof引用”得到的是所指向的变量的大小,而“sizeof指针”得到的是指针本身的大小。

使用地方:

       指针作为参数传递时;

       将引用作为函数的参数进行传递

      

4.C++11有什么新特性?

 

5.说出几个设计模式,并且说出他们作用?

状态模式,观察者模式,职责链模式,工厂模式,中介者模式,备忘录模式,装饰模式,桥接模式,享元模式,代理模式,外观模式,建造者模式,单例模式,适配器模式,策略模式。

 

6.inline函数的作用?

引入内联函数的目的是为了解决程序中函数调用的效率问题。减少函数的目标代码,实现程序代码和数据的共享。但是如何函数调用也会带来降低效率的问题。

7.字符数组和标准库函数中std::string的区别?

 

下面进入正题——长春径点笔试题:(该公司主要是做微软的业务,面试的时候面试官告诉我主要开发语言是C#)

8.编写一个ToInt()函数实现字符串转换数字?

 

public int toint(String str)

{

       int a[]=str.toCharArray();

       int sum=0;

       for(int i=0;i

       {

              char c=a[i];

              int val=(int)Math.Pow(10,str.length()-(i+1));

              sum=sum+(c-48)*val;

       }

       return sum;

}

 

9.用递归遍历二叉树,返回它的深度。

int FindTreeDeep(Bintree BT)

{

       int deep=0;

       if(BT)

       {

              int left=FindTreeDeep(BT->lChild);

              int right=FindTreeDeep(BT->rChild);

              deep=lchilddeep>=rchilddeep?lchilddeep+1:rchilddeep+1;

      }

       return deep;

 

}

非递归

 int TreeDeep(BinTree BT ){

     int treedeep=0;

     stack S;

     stack tag;

     BinTree p=BT;

     while(p!=NULL||!isEmpty(S)){

         while(p!=NULL){

             push(S,p);

             push(tag,0);

             p=p->lchild;

         }

         if(Top(tag)==1){

             deeptree=deeptree>S.length?deeptree:S.length;

             pop(S);

             pop(tag);

             p=NULL;

         }else{

             p=Top(S);

             p=p->rchild;

             pop(tag);

             push(tag,1);

         }

     }

     return deeptree;

 }

 

10.在一组无序的数列中找出其中第K大的数字,要求使用一个FOR循环。

#include   

 using namespace std;   

int FindNum(int *a, int left, int right, int k) 

 //以快速排序的思想解决此题。因为一趟快速排序可以找到一个元素最终的位置。  

 int low = left; 

 int high = right; 

 int temp = a[low]; 

 int flag = 0;//标记若为0表示high指针往low端滑动,若为1表示low指针往high端滑动。    

while (low < high) 

 

  if (0 == flag)//high指针往low端滑动  

 

   if (a[high] > temp) 

  

    high--; 

  

   else 

  

    a[low++] = a[high]; 

    flag = 1;//修改标记已指示下次滑动方向  

25.  

26. 

27.  else 

 

   if (a[low] < temp) 

 

   low++; 

  

  else 

  

   a[high--] = a[low]; 

   flag = 0;//修改标记已指示下次滑动方向  

 

   

 //一趟快速排序结束,则找出了temp元素所对应的位置low,如果k==low则,temp为第k个大的元素。  

 //如果K>low则进行递归调用FindNum(a, low+1, right, k).  

//如果K

 if (k == low) 

 

 return temp; 

 

 else if (k > low) 

 

  return FindNum(a, low+1, right, k); 

 else 

return FindNum(a, left, low-1, k); 

  

int main(void) 

 int a[10] = {9, 4, 8, 2, 6, 1, 0, 3, 7, 5}; 

 cout<<FindNum(a, 0, 9, 3)<<endl; 

 return 0; 

 

11.有2个无序的字符串数组,要求按字典序排序合并输出一个字符串。

Int[] merge(int a[],int b[])

{

       Int a_index=0;

       Int b_index=0;

       Int c=new Int[a.length+b.length];

       While(a_index

              {

                     If(a[a_index]

                            C[c_index++]=a[a_index++];

                     Else

                            C_[c_index++]=b[b_index++];

              }

       If(a_index

              {

                     C[c_index++]=a[a_index++];

}

       If(b_index

              {

                     C[c_index++]=a[b_index++];

}

Return c;

}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值