2006年9月全國計算機(jī)等級考試二級C++筆試試題及答案

字號:

為大家收集整理了《2006年9月全國計算機(jī)等級考試二級C++筆試試題及答案》供大家參考,希望對大家有所幫助?。?!
    一、選擇題((1)~(35)每小題2分,共70分) 下列各題A)、B)、C)、D)四個選項中,只有一個選項是正確的,請將正確選項涂
    寫在答題卡相應(yīng)位置上,答在試卷上不得分。
    (1)下列選項不屬于結(jié)構(gòu)化程序設(shè)計方法的是
    A.自頂向下
    B.逐步求精
    C.模塊化
    D.可復(fù)用
    (2)兩個或兩個以上模塊之間關(guān)聯(lián)的緊密程度稱為
    A.耦合度
    B.內(nèi)聚度
    C.復(fù)雜度
    D.?dāng)?shù)據(jù)傳輸特性
    (3)下列敘述中正確的是
    A.軟件測試應(yīng)該由程序開發(fā)者來完成
    B.程序經(jīng)調(diào)試后一般不需要再測試
    C.軟件維護(hù)只包括對程序代碼的維護(hù)
    D.以上三種說法都不對
    (4)按照“后進(jìn)先出”原則組織數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)是
    A.隊列
    B.棧
    C.雙向鏈表
    D.二叉樹
    (5)下列敘述中正確的是
    A.線性鏈表是線性表的鏈?zhǔn)酱鎯Y(jié)構(gòu)
    B.棧與隊列是非線性結(jié)構(gòu)
    C.雙向鏈表是非線性結(jié)構(gòu)
    D.只有根結(jié)點(diǎn)的二叉樹是線性結(jié)構(gòu)
    (6)對如下二叉樹,進(jìn)行后序遍歷的結(jié)果為
    A.ABCDEF
    B.DBEAFC
    C.ABDECF
    D.DEBFCA
    (7)在深度為7的滿二叉樹中,葉子結(jié)點(diǎn)的個數(shù)為
    A.32
    B.31
    C.64
    D.63
    (8)“商品”與“顧客”兩個實體集之間的聯(lián)系一般是
    A.一對一
    B.一對多
    C.多對一
    D.多對多
    (9)在E-R圖中,用來表示實體的圖形是
    A.矩形
    B.橢圓形
    C.菱形
    D.三角形
    (10)數(shù)據(jù)庫DB、數(shù)據(jù)庫系統(tǒng)DBS、數(shù)據(jù)庫管理系統(tǒng)DBMS之間的關(guān)系是
    A.DB包含DBS和DBMS
    B.DBMS包含DB和DBS
    C.DBS包含DB和DBMS
    D.沒有任何關(guān)系
    (11)下列關(guān)于C++函數(shù)的說明中,正確的是
    A.內(nèi)聯(lián)函數(shù)就是定義在另一個函數(shù)體內(nèi)部的函數(shù)
    B.函數(shù)體的最后一條語句必須是return語句
    C.標(biāo)準(zhǔn)C++要求在調(diào)用一個函數(shù)之前,必須先聲明其原型
    D.編譯器會根據(jù)函數(shù)的返回值類型和參數(shù)表來區(qū)分函數(shù)的不同重載形式
    (12)由于常對象不能被更新,因此
    A.通過常對象只能調(diào)用它的常成員函數(shù)
    B.通過常對象只能調(diào)用靜態(tài)成員函數(shù)
    C.常對象的成員都是常成員
    D.通過常對象可以調(diào)用任何不改變對象值的成員函數(shù)
    (13)下列關(guān)于虛函數(shù)的說明中,正確的是
    A.從虛基類繼承的函數(shù)都是虛函數(shù)
    B.虛函數(shù)不得是靜態(tài)成員函數(shù)
    C.只能通過指針或引用調(diào)用虛函數(shù)
    D.抽象類中的成員函數(shù)都是虛函數(shù)
    (14)運(yùn)算符重載是對已有的運(yùn)算符賦予多重含義,因此
    A.可以對基本類型(如int類型)的數(shù)據(jù),重新定義“+”運(yùn)算符的含義
    B.可以改變一個已有運(yùn)算符的優(yōu)先級和操作數(shù)個數(shù)
    C.只能重載C++中已經(jīng)有的運(yùn)算符,不能定義新運(yùn)算符
    D.C++中已經(jīng)有的所有運(yùn)算符都可以重載
    (15)模板對類型的參數(shù)化提供了很好的支持,因此
    A.類模板的主要作用是生成抽象類
    B.類模板實例化時,編譯器將根據(jù)給出的模板實參生成一個類
    C.在類模板中的數(shù)據(jù)成員都具有同樣類型
    D.類模板中的成員函數(shù)都沒有返回值
    (16)下列關(guān)于C++流的說明中,正確的是
    A.與鍵盤、屏幕、打印機(jī)和通信端口的交互都可以通過流類來實現(xiàn)
    B.從流中獲取數(shù)據(jù)的操作稱為插入操作,向流中添加數(shù)據(jù)的操作稱為提取操作
    C.cin是一個預(yù)定義的輸入流類
    D.輸出流有一個名為open的成員函數(shù),其作用是生成一個新的流對象
    (17)下列符號中可以用作C++標(biāo)識符的是
    A._radius
    B.foo~bar
    C.else
    D.3room
    (18)下列語句中,錯誤的是
    A.const int buffer=256;
    B.const int temp;
    C.const double *point;
    D.const double *rt =new double(5.5);
    (19)有如下程序:
    int x=3;
    do{
    x -= 2;
    cout<
    }while(!(--x));
    執(zhí)行這個程序的輸出結(jié)果是
    A. 1
    B.3 0
    C. l-2
    D.死循環(huán)
    (20)有如下程序:
    #include
    using namespace std;
    int main()
    {
    int *p;
    *p = 9;
    cout<<"The value at p:"<<*p;
    return 0;
    }
    編譯運(yùn)行程序?qū)⒊霈F(xiàn)的情況是
    A.夠編譯時出現(xiàn)語法錯誤,不能生成可執(zhí)行文件
    B.運(yùn)行時一定輸出:The value at p: 9
    C.運(yùn)行時一定輸出:The value at p: *9
    D.運(yùn)行時有可能出錯
    (21)有如下程序:
    #include
    using namespace std;
    int main()
    {
    void function(double val);
    double val;
    function(val);
    cout<
    return 0;
    }
    void function(double val)
    {
    val = 3;
    }
    編譯運(yùn)行這個程序?qū)⒊霈F(xiàn)的情況是
    A.編譯出錯,無法運(yùn)行
    B.輸出:3
    C.輸出:3.0
    D.輸出一個不確定的數(shù)
    (22)有如下類定義:
    class AA
    {
    int a;
    public:
    int getRef() const{return &a;} //①
    int getvalue() const{return a;} //②
    void set(int n) const{a=n;} //③
    friend void show(AA aa) const {cout< //④
    };
    其中的四個函數(shù)定義中正確的是
    A.①
    B.②
    C.③
    D.④
    (23)有如下程序:
    #include +
    using namespace std;
    #include
    using namespace std;
    class Base
    {
    public:
    void fun(){cout<<"Base::fun"<
    };
    class Derived:public Base
    {
    public:
    void fun()
    {
    cout<<"Derived::fun"<
    }
    };
    int main()
    {
    Derived d;
    d.fun();
    return 0;
    }
    已知其執(zhí)行后的輸出結(jié)果為:
    Base::fun
    Derived::fun
    則程序中下劃線處應(yīng)填入的語句是
    A.Base.fun();
    B.Base::fun()
    C.Base->fun()
    D.fun();
    (24)下面是重載為非成員函數(shù)的運(yùn)算符函數(shù)原型,其中錯誤的是
    A.Fraction operator + (Fraction, Fraction);
    B.Fraction operator - (Fraction);
    C.Fraction& operator = (Fraction&, Fraction);
    D.Fraction& operator += (Fraction&, Fraction);
    (25)有如下函數(shù)模板:
    template
    T cast(U u){return u;}
    其功能是將U類型數(shù)據(jù)轉(zhuǎn)換為T類型數(shù)據(jù)。已知i為int型變量,下列對模板函數(shù)cast的調(diào)用中正確的是
    A.cast(i);
    B.cast<>(i);
    C.cast(i);
    D.cast (i);
    (26)若磁盤上已存在某個文本文件,其全路徑文件名為d:\ncre\test.txt,下列語句中不 能打開該文件的是
    A.ifstream file("d:\ncre\test.txt");
    B.ifstream file("d:\ncre\test.txt");
    C.ifstream file; file.open("d:\ncre\test.txt");
    D.ifstream* pFile=new ifstream("d:\ncre\test.txt");
    (27)有如下類定義:
    class Foo
    {
    public:
    Foo(int v):value(v){} //①
    ~Foo(){} //②
    private:
    Foo(){} //③
    int value = 0; //④
    };
    其中存在語法錯誤的行是
    A.①
    B.②
    C.③
    D.④
    (28)有如下類定義:
    class Point
    {
    int x_, y_;
    public:
    Point():x_(0), y_(0){}
    Point(int x, int y = 0):x_(x),y_(y){}
    };
    若執(zhí)行語句
    Point a(2), b[3], *c[4];
    則Point類的構(gòu)造函數(shù)被調(diào)用的次數(shù)是
    A.2次
    B.3次
    C.4次
    D.5次
    (29)有如下類定義:
    class Test
    {
    public:
    Test(){ a = 0; c = 0;} //①
    int f(int a)const{this->a = a;} //②
    static int g(){return a;} //③
    void h(int
    B.{Test::b = b;}; //④
    private:
    int a;
    static int b;
    const int c;
    };
    int Test::b = 0;
    在標(biāo)注號碼的行中,能被正確編譯的是
    A.①
    B.②
    C.③
    D.④
    (30)有如下程序:
    #include
    using namespace std;
    class A
    {
    public:
    A(){cout<<"A";}
    ~A(){cout<<"~A";}
    };
    class B:public A
    {
    A* p;
    public:
    B(){cout<<"B"; p = new A();}
    ~B(){cout<<"~B"; delete p;}
    };
    int main()
    {
    B obj;
    return 0;
    }
    執(zhí)行這個程序的輸出結(jié)果是
    A.BAA~A~B~A
    B.ABA~B~A~A
    C.BAA~B~A~A
    D.ABA~A~B~A
    (31)有如下程序:
    #include
    using namespace std;
    class Base
    {
    private:
    void funl() const{cout<<"funl";}
    protected:
    void fun2() const{cout<<"fun2";}
    public:
    void fun3() const{cout<<"fun3";}
    };
    class Derived:protected Base
    {
    public:
    void fun4() const{cout<<"fun4";}
    };
    int main()
    {
    Derived obj;
    obj.funl(); //①
    obj.fun2(); //②
    obj.fun3(); //③
    obj.fun4(); //④
    return 0;
    }
    其中有語法錯誤的語句是
    A.①②③④
    B.①②③
    C.②③④
    D.①④
    (32)有如下程序:
    #include
    using namespace std;
    class Base
    {
    public:
    void funl(){cout<<"Base\n";}
    virtual void fun2(){cout<<"Base\n";}
    };
    class Derived:public Base
    {
    public:
    void funl(){cout<<"Derived\n";}
    void fun2(){cout<<"Derived\n";}
    };
    void f(Base &
    B.{b.funl();b.fun2();}&, lt;, /P>
    int main()
    {
    Derived obj;
    f(obj);
    return 0;
    }
    執(zhí)行這個程序的輸出結(jié)果是
    A.Base
    B.Base
    C.Derived
    D.Derived
    Base Derived Base Derived
    (33)有如下程序:
    #include
    using namespace std;
    class Complex
    {
    double re, im;
    public:
    Complex(double r, double i):re(r), im(i){}
    double real() const{return re;}
    double image() const{return im;}
    Complex& operator +=(Complex a)
    {
    re += a.re;
    im += a.im;
    return *this;
    }
    };
    ostream &operator<<(ostream& s,const Complex& z)
    {
    return s<<'('<
    }
    int main()
    {
    Complex x(1, -2), y(2, 3);
    cout<<(x += y)<
    return 0;
    }
    執(zhí)行這個程序的輸出結(jié)果是
    A.(1, -2)
    B.(2, 3)
    C.(3, 5)
    D.(3, 1)
    (34)有如下程序:
    #include
    #include
    using namespace std;
    int main()
    {
    cout.fill('*');
    cout<
    return 0;
    }
    執(zhí)行這個程序的輸出結(jié)果是
    A.123*OK
    B.123*OK**
    C.*123OK
    D.*123**OK
    (35)有如下類聲明:
    class SAMPLE
    {
    int n;
    public:
    SAMPLE (int i = 0): n(i){}
    void setvalue(int n0);
    };
    下列關(guān)于setvalue成員函數(shù)的實現(xiàn)中,正確的是
    A.SAMPLE::setvalue(int n0){n = n0;}
    B.void SAMPLE::setvalue(int n0){n = n0;}
    C.void setvalue(int n0){n = n0;}
    D.setvalue(int n0){n = n0;}
    二、填空題(每空2分,共30分)
    請將每一個空的正確答案寫在答題卡【1】~【15】序號的橫線上,答在試卷上不得分。
    (1)對長度為10的線性表進(jìn)行冒泡排序,最壞情況下需要比較的次數(shù)為 【1】 。
    (2)在面向?qū)ο蠓椒ㄖ校?【2】 描述的是具有相似屬性與操作的一組對象。
    (3)在關(guān)系模型中,把數(shù)據(jù)看成是二維表,每一個二維表稱為一個 【3】 。
    (4)程序測試分為靜態(tài)分析和動態(tài)測試。其中 【4】 是指不執(zhí)行程序,而只是對程序 文本進(jìn)行檢查,通過閱讀和討論,分析和發(fā)現(xiàn)程序中的錯誤。
    (5)數(shù)據(jù)獨(dú)立性分為邏輯獨(dú)立性與物理獨(dú)立性。當(dāng)數(shù)據(jù)的存儲結(jié)構(gòu)改變時,其邏輯結(jié)構(gòu) 可以不變,因此,基于邏輯結(jié)構(gòu)的應(yīng)用程序不必修改,稱為 【5】 。
    (6)有一種只在循環(huán)語句或switch語句中使用的流程控制語句,表示該語句的關(guān)鍵字是 【6】 。
    (7)程序中有如下語句
    for(int i = 0; i<5; i++)cout<<*(p + i)<<",";
    能夠依次輸出int型一維數(shù)組DATA的前5個元素。由此可知,變量p的定義及初始 化語句是 【7】 。
    (8)若下面程序運(yùn)行時輸出結(jié)果為
    1, A, 10.1
    2, B, 3.5
    請將程序補(bǔ)充完整。,
    #include
    using namespace std;
    int main()
    {
    void test(int, char,double 【8】 );
    test(1,'A',10.1);
    test(2,'B');
    return 0;
    }
    void test(int a, char b, double
    C.
    {
    cout<
    }
    (9)有如下類聲明:
    class MyClass
    {
    int i;
    private: int j;
    protected:int k;
    public:int m, n;
    };
    其中,私有成員的數(shù)量為 【9】 。
    (10)有如下程序:
    #include
    using namespace std;
    class Con
    {
    char ID;
    public:
    Con():ID('A'){cout<<1;}
    Con(char I
    D.:ID(I
    D.{cout<<2;}
    Con(Con&
    C.:ID(c.getID()){cout<<3;}
    char getID() const{return ID;}
    };
    void show(Con
    C.{cout<
    int main()
    {
    Con c1;
    show(c1);
    Con c2('B');
    show(c2);
    return 0;
    }
    執(zhí)行上面程序的輸出是 【10】 。
    (11)有如下程序:
    #include
    using namespace std;
    class ONE
    {
    public:
    virtual void f(){cout<<"l";}
    };
    class TWO:public ONE
    {
    public:
    TWO(){cout<<"2";}
    };
    class THREE:public TWO
    {
    public:
    virtual void f(){TWO::f(); cout<<"3";}
    };
    int main()
    {
    ONE aa, *p;
    TWO bb;
    THREE cc;
    p = &cc;
    p->f();
    return 0;
    }
    執(zhí)行上面程序的輸出是 【11】 。
    (12)有如下程序:
    #include
    using namespace std;
    class PARENT
    {
    public:
    PARENT(){cout<<"PARENT";}
    };
    class SON:public PARENT
    {
    public:
    SON(){cout<<"SON";}
    };
    int main()
    {
    SON son;
    PARENT *p;
    p = &son;
    return 0;
    }
    執(zhí)行上面程序的輸出是 【12】 。
    (13)若以非成員函數(shù)形式,為類Bounce重載“!”運(yùn)算符,其操作結(jié)果為一bool型數(shù)據(jù),則該運(yùn)算符重載函數(shù)的原型是 【13】 。
    (14)下面是復(fù)數(shù)類complex的定義,其中重載的運(yùn)算符“+”的功能是返回一個新的復(fù) 數(shù)對象,其實部等于兩個操作對象實部之和,其虛部等于兩個操作對象虛部之和;請補(bǔ)充完整:
    class complex
    {
    double real; //實部
    double imag; //虛部
    public:
    complex(double r,double i):real(r),imag(i){}
    complex operator+(complex a)
    {
    return complex( 【14】 );
    }
    };
    (15)已知一個函數(shù)模板定義為
    template T1, typename T2>
    T1 FUN(T2 n) {return n * 5.0;}
    若要求以int型數(shù)據(jù)7為函數(shù)實參調(diào)用該模板函數(shù),并返回一個double型數(shù)據(jù),則該 調(diào)用應(yīng)表示為 【15】 。