笔试题刷题记录(c++)

  • 下面的程序可以从0....n-1中随机等概率的输出m个不重复的数。这里我们假设n远大于m 
knuth(int n, int m)
{ 
    srand((unsigned int)time(0)); 
    for (int i = 0; i < n; i++) { 
        if (rand() % (n-i) < m) { 
            cout << i << endl;
            (m--);
        }
     }
}

由这个for循环循环n次,且在满足条件时才输出i,可知,输出m个不同值的要求已满足,因为每次输出的都是i值,而i值每次都是不一样的,m--保证了程序在输出了m个值后就停止循环。

在i=0时,rand()%(n-i)的取值范围为0到n-1,共n个数,此时要输出0只需要rand()%(n-i)小于m,故i=0被输出的概率为m/n;

在i=1时,rand()%(n-i)的取值范围为0到n-2,共n-1个数,若i=0没有被输出,则m--未被执行,此时i=1被输出的概率为m/(n-1),若i=0已经被输出了,则m变为m-1,此时i=1被输出的概率为(m-1)/(n-1);由概率论的知识,可知此时i=1被输出的概率为P=(1-m/n)*(m/(n-1))+m/n*((m-1)/(n-1))=m/n;以此类推,可知每个数被输出的概率都为m/n

 

  • 以下prim函数的功能是分解质因数。括号内的内容应该为?
void prim(int m, int n)
 {
     if (m >= n)
     {
         while (m % n) n++;
         (m/=n);
         prim(m, n);
         cout << n << endl;
     }
 }
  • 在32位机器中,如下代码:
    void example(char acWelcome[]){
        printf("%d",sizeof(acWelcome));
        return;
    }
    void main(){
        char acWelcome[]="Welcome to Huawei Test";
        example(acWelcome);
        return;
    }

    这题的正确答案应该是32位系统是4 64位系统是8,数组作为函数的参数是会退化为函数指针的,想想看,数组作为函数参数的时候经常是需要传递数组大小的

  • 设已经有A,B,C,D4个类的定义,程序中A,B,C,D析构函数调用顺序为?

    C c;
    void main()
    {
        A*pa=new A();
        B b;
        static D d;
        delete pa;
    }

    而之所以是先释放 D 在释放 C的原因是, 程序中首先调用的是 C的构造函数,然后调用的是 D 的构造函数,析构函数的调用与构造函数的调用顺序刚好相反。

  • 若char是一字节,int是4字节,指针类型是4字节,代码如下:

    class CTest
    {
        public:
            CTest():m_chData(‘\0’),m_nData(0)
            {
            }
            virtual void mem_fun(){}
        private:
            char m_chData;
            int m_nData;
            static char s_chData;
    };
    char CTest::s_chData=’\0’;

    问:

    (1)若按4字节对齐sizeof(CTest)的值是多少?

    (2)若按1字节对齐sizeof(CTest)的值是多少?

若按4字节对齐sizeof(CTest)的值是12; 

若按1字节对齐sizeof(CTest)的值是9 

解释:

在类中,如果什么都没有,则类占用1个字节,一旦类中有其他的占用空间成员,则这1个字节就不在计算之内,如一个类只有一个int则占用4字节而不是5字节。

如果只有成员函数,则还是只占用1个字节,因为类函数不占用空间

虚函数因为存在一个虚函数表,需要4个字节,数据成员对象如果为指针则为4字节,注意有字节对齐,如果为13字节,则进位到16字节空间。

 

猜你喜欢

转载自blog.csdn.net/weixin_38196217/article/details/88353959
0条评论
添加一条新回复