牛客网练习,某公司校园招聘。大数字 2014年

本文是牛客网编程练习及某公司校园招聘的C++面试题解析,涵盖变量构造顺序、内存管理、指针操作、二分查找、排序算法稳定性、哈希表冲突解决、字节序理解、代码生成阶段任务等多个知识点,适合C++初学者和面试准备者复习巩固。
摘要由CSDN通过智能技术生成

牛客网练习,某公司校园招聘。大数字 2014年

第一题:在函数F中,本地变量a和b的构造函数(constructor)和析构函数(destructor)的调用顺序是:  ( a构造 b构造 b析构 a析构  )
    Class A;
    Class B;
    void F() {
            A a;
            B b;
    }

    调用函数的时候用栈来记录局部的变量和对象。按照变量声明的顺序入栈,
    如果是对象就按顺序调用构造函数,函数调用结束后,后进栈的先弹出,
    对于对象就是后声明的对象先调用析构函数。


第二题:假定指针变量p定义为“int *p=new int(100);”,要释放p所指向的动态内存,应使用语句( A )
      delete p;
    delete *p;
    delete &p;
    delete []p;

    解答:
    小括号是赋值,[]才是数组,题目中是 new int(100);
    int* p = new int (100) 是创建一个int型的内存,并赋值为100; 
    int *p = new int[100] 是创建100个int型的内存;
    一般用法是new一个数组的话一般是delete [] 其他的直接delete即可。
    但是其实对于内置数据类型,其实是delete[] 和delete都可以的。

第三题: 选择填空,选D
    #include
    void test(void *data) {
        unsigned int value = (此处应填入)
        printf("%u", value);
    }
    using namespace std;
    int main() {
        unsigned int value = 10;
        test(&value);
        return 0;
    }    
    A. *data
    B. (unsigned int)(*data)
    C. (unsigned*)data
        D. *((unsigned int *)data)
    解释:
            第一行中 void test(void *data)
    注意,参数类型是void,  所以先要进行指针转换:(unsigned int *)然后再取值。

第四题: 在C++, 下列哪一个可以做为对象继承之间的转换,选B
    static_cast
        dynamic_cast
    const_cast
    reinterpret_cast

    解释:
    dynamic_cast : 
    继承体系安全向下转型或跨系转型;找出某对象占用内存的起始点
    static_cast:
    同旧式C转型,如int 到double
    const_cast:
    常用于去除某个对象的常量性
    reinterpret_cast
    不具备移植性,常见用途是转化函数指针类型

第七题: 用二分法查找长度为10的、排好序的线性表,查找不成功时,最多需要比较多少次?
        答案:4次  2^4=16 
    解释:二分查找,可以用二叉判定树,
     依据:查找不成功的次数不超过判定树的深度,而树的深度为(下取整) |_log2n_|  +1

第八题: 辗转相除法,假设x,y中最大的那个数的长度为n,x>y,
    规定基本运算时间复杂度为O(1),那么该程序的时间复杂度为的时间复杂度?   O(logy)

    解释:根据定理 如果 m > n , m mod n < m/2 ,
       每次递归y的变为原来的1/2不到,所以递归次数小于logn,其最坏时间复杂度为O(logn);

第九题:  一棵有124个叶节点的完全二叉树,最多有( 248 )个节点。
   
    解释: 由题目可知124个叶节点,由定理可知 度为2的节点有 123个。
            二叉树

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值