zoukankan      html  css  js  c++  java
  • 《C/C++工程师综合练习卷》

    前言

    前天拿这个《C/C++工程师综合练习卷》练习了一下,现将错题以及精题分析总结。

    错题分析与总结

    2 . 下面的程序可以从1….n中随机等概率的输出m个不重复的数。这里我们假设n远大于m,填充空缺语句。

    knuth(int n, int m)
    { 
        srand((unsigned int)time(0)); 
        for (int i = 0; i < n; i++) { 
            if ( ) { 
                cout << i << endl;
                ( );
            }
         }
    }

    A. rand()%(n-i) <= m m–
    B. rand()%(n-i) < m m–
    C. rand()%(n-i) >= m m++
    D. rand()%(n-i) > m m++

    分析:

    总结:

    3 . 以下prim函数的功能是分解质因数。括号内的内容应该为?

    void prim(int m, int n)
     {
         if (m > n)
         {
             while (        ) n++;
             (     );
             prim(m, n);
             cout << n << endl;
         }
     }

    A . ram/n m/=n
    B . m/n m%=n
    C . m%n m%=n
    D . m%n m/=n

    分析:分解质因数是将一个数差分为几个质数相乘,首先找到一个n可以被m整除,整除就是余数为0才能跳出循环,而如果只是做除法,只有当m < n的时候才会出现等于0。这与if的条件判断相互冲突。

    答案:D

    总结:错选C

    7 . 下面关于虚函数和函数重载的叙述不正确的是?
    A . 虚函数不是类的成员函数
    B . 虚函数实现了C++的多态性
    C . 函数重载允许非成员函数,而虚函数则不行
    D . 函数重载的调用根据参数的个数、序列来确定,而虚函数依据对象确定

    分析:虚函数是类内定义的成员函数,所以A的说法明显不对;
    虚函数和函数重载都实现了C++的多态性,但是表现形式不同,函数重载调用根据参数个数、参数类型等进行区分,而虚函数则是根据动态联编来确定调用什么,故,BD说法正确;
    函数重载既可以是类的成员函数也可以是非成员函数,比如:

    int fun(int a);
    int fun(int a, int b);

    这就是非成员重载,但是虚函数就必须是成员函数,否则就会失效,所以C选项也是正确的。

    答案:A

    总结:错选了C

    10 . 下面程序运行后的结果为?

    char str[] = "glad to test something";
    char *p = str;
    p++;
    int *p1 = static_cast<int *="">(p);
    p1++;
    p = static_cast<char *="">(p1);
    printf("result is %s
    ", p);

    A . glad to test something
    B . ad to test something
    C . test something
    D . to test something

    分析:该题的关键是要认清楚强制类型转换后指针的类型,p的类型是char * , p++后p指向str数组的第二个元素,即字母l的位置。
    p1的类型是int * , p1++后p1指向的位置增加4个细节,指向str数组中的第6个元素,即t的位置。
    因此最后p的内容为“to test something“

    答案:D

    总结:错选B

    13 . 在Java中,以下关于方法重载和方法重写描述正确的是?
    A . 方法重载和方法的重写实现的功能相同
    B . 方法重载出现在父子关系中,方法重写是在同一类中
    C . 方法重载的返回值类型必须一致,参数项必须不同
    D . 方法重写的返回值类型必须相同。(或是其子类)

    分析:方法重载的返回值的类型可以不同,因为判断方法重载的方法主要是根据方法的参数不同来判定;方法重写的返回值类型需要相同,重写就是子类继承了父类的方法,并在此方法上重写属于自己的特征,既然是继承过来的,那么它的返回值类型就必须要相同。

    答案:D

    总结:错选C

    16 . In the main() function, after ModifyString(text) is called, what’s the value of ‘text’?

    int FindSubString( char* pch )
    {
        int   count  = 0;
        char  * p1   = pch;
        while ( *p1 != '' )
        {   
            if ( *p1 == p1[1] - 1 )
            {
                p1++;
                count++;
            }else  {
                break;
            }
        }
        int count2 = count;
        while ( *p1 != '' )
        {
            if ( *p1 == p1[1] + 1 )
            {
                p1++;
                count2--;
            }else  {
                break;
            }
        }
        if ( count2 == 0 )
            return(count);
        return(0);
    }
    void ModifyString( char* pText )
    {
        char  * p1   = pText;
        char  * p2   = p1;
        while ( *p1 != '' )
        {
            int count = FindSubString( p1 );
            if ( count > 0 )
            {
                *p2++ = *p1;
                sprintf( p2, "%i", count );
                while ( *p2 != '' )
                {
                    p2++;
                }
                p1 += count + count + 1;
            }else  {
                *p2++ = *p1++;
            }
        }
    }
    void main( void )
    {
        char text[32] = "XYBCDCBABABA";
        ModifyString( text );
        printf( text );
    }  

    A . XYBCDCBABABA
    B . XYBCBCDAIBAA
    C . XYBCDCBAIBAA
    D . XYBCDDBAIBAB

    分析:FindSubString()中
    用到了“回文段落跳过”
    *p1 == p1[1] - 1,即看该字符串是不是递增的,即x后面是y,y后面是z,然后用count记录
    *p1 == p1[1] + 1,即看该字符串是不是递减的,即z后面是y,y后面是x,然后用count2递减
    若回文则返回 回文子串长度,若不回文则返回0

    ModifyString()中
    过滤XY,找到第一个回文字段的开始,即BCDCB 中的B,然后跨过回文段
    到ABABA,进入FindSubString() 得 ABA,即count=1;
    sprintf( p2, “%i”, count );把B换成1,即A1,然后 *p2++=*p1++ A1BAA

    答案:C

    总结:错选B,没仔细做,蒙的,汗颜。。。

    19 . 下面程序运行时的输出结果是?

    #include<iostream>
    using namespace std;
    class MyClass
    {
    public:
        MyClass(int i = 0)
        {
            cout << i;
        }
        MyClass(const MyClass &x)  //拷贝构造函数
        {
            cout << 2;
        }
        MyClass &operator=(const MyClass &x)  //赋值构造函数
        {
            cout << 3;
            return *this;
        }
        ~MyClass()
        {
            cout << 4;
        }
    };
    int main()
    {
        MyClass obj1(1), obj2(2);
        MyClass obj3 = obj1;
        return 0;
    }

    A . 11214444
    B . 11314444
    C . 122444
    D . 123444

    分析:首先程序中存在三个MyClass对象;
    前两个对象构造时分别输出1,2;
    第三个对象是这样构造的MyClass obj3 = obj1;这里会调用拷贝构造函数,输出2;
    然后三个对象依次析构,输出444;
    所以最终输出122444;

    答案:C

    总结:错选D

    精题收藏

    4 . 问x的值等于?

    enum string{    
        x1,    
        x2,    
        x3=10,    
        x4,    
        x5,    
    } x;

    A . 5
    B . 12
    C . 0
    D . 随机值

    分析:在C语言中,函数外变量定义相当于全局变量,程序初始化为0;函数内变量定义相当于局部变量,程序初始化为随机值。

    答案:C

  • 相关阅读:
    nmon监控Linux服务器系统资源
    日志处理(二) 日志组件logback的介绍及配置使用方法(转)
    PreparedStatement是如何大幅度提高性能的
    【声援团视频合集!!!保存转发进行扩散!!】
    换主题
    Octave 常用命令
    【DSP】TMS320F28335的GPIO
    Oauth2 初步
    arm汇编几个经典例题
    JavaScript关键字之super()
  • 原文地址:https://www.cnblogs.com/shine-yr/p/5214945.html
Copyright © 2011-2022 走看看