2007年9月全國計算機等級考試二級C++筆試試題及答案

字號:

為大家收集整理了《2007年9月全國計算機等級考試二級C++筆試試題及答案》供大家參考,希望對大家有所幫助?。?!
    一、選擇題(每小題2分,共70分) 下列各題A)、B)、C)、D)四個選項中,只有一個選項是正確的。請將正確選項涂寫在答題卡相應(yīng)位置上,答在試卷上不得分。
    (1)下列敘述中正確的是 。
    A)算法的效率只與問題的規(guī)模有關(guān),而與數(shù)據(jù)的存儲結(jié)構(gòu)無關(guān).
    B)算法的時間復雜度是指執(zhí)行算法所需要的計算工作量
    C)數(shù)據(jù)的邏輯結(jié)構(gòu)與存儲結(jié)構(gòu)是一一對應(yīng)的.
    D)算法的時間復雜度與空間復雜度一定相關(guān).
    (2)在結(jié)構(gòu)化程序設(shè)計中,模塊劃分的原則是 。
    A) 各模塊應(yīng)包括盡量多的功能
    B) 各模塊的規(guī)模應(yīng)盡量大
    C)各模塊之間的聯(lián)系應(yīng)盡量緊密
    D) 模塊內(nèi)具有高內(nèi)聚度,模塊間具有低耦合度
    (3)下列敘述中正確的是 。
    A)軟件測試的主要目的是發(fā)現(xiàn)程序中的錯誤.
    B)軟件測試的主要目的是確定程序中錯誤的位置.
    C)為了提高軟件測試的效率,由程序編制者自己來完成軟件測試的工作
    D)軟件測試是證明軟件沒有錯誤
    (4) 下面選項中不屬于面向?qū)ο蟪绦蛟O(shè)計特征的是 。
    A)繼承性
    B)多態(tài)性
    C)類比性
    D)封裝性
    (5) 下列對列的敘述正確的是 。
    A) 隊列屬于非線性表
    B) 隊列按”先進后出”的原則組織數(shù)據(jù)
    C)隊列在隊尾刪除數(shù)據(jù)
    D) 隊列按“先進先出”原則組織數(shù)據(jù)
    (6)對下列二叉樹
    進行前序遍歷的結(jié)果為
    A)DYBEAFCZX
    B)YDEBFZXCA
    C)ABDYECFXZ
    D)ABCDEFXYZ
    (7)某二叉樹中有n個度為2的結(jié)點則該二叉樹中的葉子結(jié)點數(shù)為
    A)n+1
    B)n-1
    C)2n
    D)n/2
    (8)在下列關(guān)系運算中,不改變關(guān)系表中的屬性個數(shù)但能減少元組個數(shù)的是 。
    A)井
    B)交
    C)投影
    D)笛卡兒乘積
    (9)在E-R圖中,用來表示實體之間是聯(lián)系的圖形是 。
    A) 矩形
    B)橢圓形
    C)菱形
    D)平行四邊形
    (10)下列敘述中錯誤的是 。
    A) 在數(shù)據(jù)庫系統(tǒng)中,數(shù)據(jù)的物理結(jié)構(gòu)必須與邏輯結(jié)構(gòu)一致.
    B)數(shù)據(jù)庫技術(shù)的根本目標是要解決數(shù)據(jù)的共享問題
    C)數(shù)據(jù)庫設(shè)計是指在已有數(shù)據(jù)庫管理系統(tǒng)的基礎(chǔ)上建立數(shù)據(jù)庫
    D)數(shù)據(jù)庫系統(tǒng)需要操作系統(tǒng)的支持
    (11)為了取代C中帶參數(shù)的宏,在C++中使用
    A)重載函數(shù)
    B)內(nèi)聯(lián)函數(shù)
    C)遞歸函數(shù)
    D)友元函數(shù)
    (12)下列關(guān)于類定義的說法中,正確的是
    A)類定義中包括數(shù)據(jù)成員和函數(shù)成員的聲明
    B)類成員的缺省訪問權(quán)限是保護的
    C) 數(shù)據(jù)成員必須被聲明為私有的
    D)成員函數(shù)只能在類體外進行定義
    (13)下列關(guān)于派生類構(gòu)造函數(shù)和析構(gòu)函數(shù)的說法中,錯誤的是
    A)派生類的構(gòu)造函數(shù)會隱含調(diào)用基類的構(gòu)造函數(shù)
    B)如果基類中沒有缺省構(gòu)造函數(shù),那么派生類必須定義構(gòu)造函數(shù)
    C)在建立派生類對象時,先調(diào)用基類的構(gòu)造函數(shù),再調(diào)用派生類的構(gòu)造函數(shù)
    D)在銷毀派生類對象時,先調(diào)用基類的析構(gòu)函數(shù),再調(diào)用派生類的析構(gòu)函數(shù)
    (14)通過運算符重載,可以改變運算符原有的
    A)操作數(shù)類型
    B)操作數(shù)個數(shù)
    C)優(yōu)先級
    D)結(jié)合性
    (15)有如下函數(shù)模板:
    template T souare(T x) (retumx * x ;)
    基中T是
    A)函數(shù)形參
    B)函數(shù)實參
    C)模板形參
    D)模板實參
    (16)使用輸入輸出操作符setw,可以控制
    A)輸出精度
    B)輸出寬度
    C)對齊方式
    D)填充字符
    (17)下列字符串中,不可以用作C++標識符的是
    A)y_2006
    B)____TEST__H
    C)Retum
    D)switch
    (18)字面常量42、4.2、42L的數(shù)據(jù)類型分別是
    A)long、double int
    B)long、float、int
    C)int、double、long
    D)int、float、long
    (19)執(zhí)行下列語句段后,輸出字符“*”的個數(shù)是
    for(int i =50;I>1;— i )cout<<”*”
    A)48
    B)49
    C)50
    D)51
    (20)有如下程序段
    int i =0, j=1;
    int &r=i ; // ①
    r =j; //②
    int*p=&i ; //③
    *p=&r ; //④
    基中會產(chǎn)生編譯錯誤的語句是
    A)④
    B)③
    C)②
    D)①
    (21)有如下函數(shù)定義:
    void func (int a,int&b) {a++; b++;}
    若執(zhí)行代碼段:
    int x=0 ,y=1
    func(x,y);
    則變量x和y值分別是
    A)0和1  
    B)1和1
    C)0和2
    D)1和2
    (22)有如下程序:
    #include
    using namespace std;
    class A{
    public
    static int a;
    void init(){a=1;}
    A(int a=2) {init();a++;}
    };
    int A:;a=0
    A obj;
    Int main()
    {
    cout<  retum0;
    }
    運行時輸出的結(jié)果是
    A)0
    B)1
    C)2
    D)3
    (23)下列有關(guān)繼承和派生的敘述中,正確的是
    A) 派生類不能訪問基類的保護成員
    B)作為虛基類的類不能被實例化
    C)派生類應(yīng)當向基類的構(gòu)造函數(shù)傳遞參數(shù)
    D)虛函數(shù)必須在派生類中重新實現(xiàn)
    (24)下列運算符中,不能被重載的是
    A)&&
    B)!=
    C).
    D)++
    (25)下列函數(shù)模板的定義中,合法的是
    A) template Tabs(T x) {return x <0 – x: x;}
    B)template class Tabs(Tx){retumx<0 -x;x;}
    C)template Tabs(T x){retum x<0 -x;x;}
    D)template T abs(T x){returm x<0 -x;x;}
    (26)在語句cin>>data;中,cin是
    A)C++的關(guān)鍵字
    B)類名
    C)對象名
    D)函數(shù)名
    (27)有如下程序:
    #include
    using namespace std;
    class test {
    private:
    int a;
    public:
    test(){cout<<”constructor”<  test(int a){cout<  test(const test&_test)
    {
    a=_testa;
    cout<<”copy constructor”<  }
    test(){cout<<”destructor”<  };
    int main()
    }
    test A(3)
    return0;
    運行時輸出的結(jié)果是
    A)3
    B)constructor
    destruclor
    C)copy constructor
    D)3
    dstructor destruclor
    (28)若有如下類聲明
    class My Class {
    public:
    MyClass() {cout<<1;}
    };
    執(zhí)行下列語句
    MyClass a,b[2],*P[2];
    以后,程序的輸出結(jié)果是
    A)11
    B)111
    C)1111
    D11111
    (29)有如下程序:
    #include
    using namespace std;
    class point {
    public:
    static int number;
    public:
    point(){number++;
    ~point(){number-;}
    };
    imt point::number=0;
    void main(){
    point*ptr;
    printA,B;
    {
    point*ptr_point=new point{3};
    ptr=ptr_point;
    }
    pointC;
    cout<  delete[]ptr;
    }
    運行時輸出的結(jié)果是
    A)3
    B)4
    C)6
    D)7
    (30)如果不使用多態(tài)機制,那么通過基類的指針雖然可以指向派生類對象,但是只能訪問從基類繼承的成員,有如下程序,沒有使用多態(tài)機制。
    #include
    using namespace std;
    class Base{
    int a,b;
    public:
    Bace(int x ,int y) { a=x; b=y;}
    Void show(){ cout<  }
    clsaa Derived:public Base {
    int c ,d;
    public:
    Derived(int x,int y,int z,int m):Base(x,y){c=z; d=m;}
    Void show(){ cout<  };
    int main()
    {
    Base B1(50,50),*pb;
    Derived DI(10,20,30,40);
    Pb=&D1;
    Pb->show();
    Return 0;
    }
    運行時輸出的結(jié)果是
    A)10,20
    B)30,40
    C)20,30
    D)50,50
    (31)有如下程序:
    #include
    using namespace std;
    class A
    {
    public;
    A(int i ){x= i ;}
    Void sispa(){cout<  Private:
    int x ;
    };
    class B;publicA
    {
    public;
    B(int i):A(i +10) {x =i ;}
    voud dispb() {dispa();cout<  Private:
    Int x;
    };
    int main()
    {
    B b(2);
    b.dispb()
    retum 0:
    }
    運行時輸出的結(jié)果是
    A)10,2
    B)12,10
    C)12,2
    D)2,2
    (32)虛函數(shù)支持多態(tài)調(diào)用,一個基類的指針可以指向派生類的對象,而且通過這樣的指針調(diào)用虛函數(shù)時,,被調(diào)用的是指針所指的實際對象的虛函數(shù),而非虛函數(shù)不支持多態(tài)調(diào)用。有如下程序:
    #include
    using namespace std;
    class Base
    {
    public:
    virtual void f(){cout<<”f0+”;}
    void g() {cout<<”g0+”;}
    };
     class Derived:public Base
    {
    public:
    void f() {cout<<”f+”;}
    void g() {cout<<”g+”;}
    };
    int main()
    {
    Derived d;
    Base*p=&d;
    p->f(); p->g();
    return 0:
    }
    運行時輸出的結(jié)果是
    A)f+g+
    B)f0+g+
    C)f+g0+
    D)f0+g0+
    (33)下面程序中對一維坐標點類Point進行運算符重載
    #include
    using namespace std;
    class point {
    public:
    point (int vaI) {x=val;}
    point& operator++(){x++;retum*this;}
    print operator++(int) {point old=*this,++(*this);retum old;}
    int GetX() const {retum x;}
    private:
    int x;
    };
    int main()
    {
    point a(10);
    cout<<(++a).GetX();
    cout<  retum();
    }
    編譯和運行情況是
    A)運行時輸出1011
    B)運行時輸出1111
    C)運行時輸出1112
    D)編譯有錯
    (34)有如下程序:
    #include
    using namespace std;
    int main()
    {
    char str[100],*p;
    cout<<”please input a string:”;
    cin>>str;
    p=str;
    for(int i =0;*p!=”\0”;p++, i ++);
    cout<< i <  retum 0;
    }
    運行這個程序時,若輸入字符串為
    abcdefg abcd
    則輸出結(jié)果是
    A)7
    B)12
    C)13
    D)100
    (35)有如下程序::
    #include
    using namespace std:
    class Sample
    {
    friend long fun (Sample s);
    public:
    Sample (long a ){x=a;}
    Private:
    long x;
    };
    long fun (Sample s)
    {
    if(s.x<2)retum 1;
    retum s.x*fun(Sample(s.x-a));
    }
    int main()
    {
    int sum=0
    for(int i =0; i <6; i ++) { sum+=fun(Sample( i );) }
    cout<  retum 0;
    }
    運行時輸出的結(jié)果是
    A)120
    B)16
    C)154
    D)34
    二、填空題(每空2分,共30分)
    請將每一個空的正確答案寫在答題卡【1】~【15】序號的橫線上,答在試卷上不得分。
    (1)在深度為7的滿二叉樹中,度為2的結(jié)點個數(shù)為 【1】 。
    (2)軟件測試分為白箱(盒)測試和黑箱(盒)測試,等價類劃分法屬于 【2】 測試。
    (3)在數(shù)據(jù)庫系統(tǒng)中,實現(xiàn)各種數(shù)據(jù)管理體制功能的核心軟件稱為 【3】 。
    (4)軟件生命周期可分為多個階段,一般分為定義階段、開發(fā)和維護階段。編碼和測試屬于 【4】 階段。
    (5)在結(jié)構(gòu)化分析使用的數(shù)據(jù)流圖(DFD)中,利用 【5】 對其中的圖形元素進行確切解釋。
    (6)C++中只有兩個邏輯常量:true和 【6】 。
    (7)若要訪問指針變量p所指向的數(shù)據(jù),應(yīng)使用表達式 【7】 。
    (8)已知一個函數(shù)的原型是:
    int fn(double x);
    若要以5.27為實參調(diào)用該函數(shù),應(yīng)使用表達式 【8】 。
    (9)有如下定義:
    class MA{
    int value;
    public:
    MA(int n=0):valut(n){}
    };
    MA*ta,tb;
    其中MA類的對象名標識符是 【9】 。
    (10)如下類定義中包含了構(gòu)造函數(shù)和拷貝數(shù)的原型聲明請在橫線處寫正確的內(nèi)容,使拷貝構(gòu)造函數(shù)的聲明完整。
    Class my Class{
    Private:
    Int data:
    Public:
    MyClass(int value); //構(gòu)造函數(shù)
    MyClass(const 【10】 another Object); //拷貝構(gòu)造函數(shù)
    }
    (11)用來派生新類的稱為 【11】 ,而派生出的新類稱為它的子類或派生類。
    (12)有如下程序:
    #include
    using namespace std;
    clsaa CA{
    public:
    CAD{cout<  };
    class CB ;private CA{
    public;
    CB(){cout<  };
    int main(){cout<  };
    int main(){
    CA a;
    CB b; 
    retum0;
    }
    這個程序的輸出結(jié)果是 【12】 。
    (13)若將一個二元運算符重載為類的成員函數(shù),其形參個數(shù)應(yīng)該是 【13】 個。
    (14)有如下程序:
    #include
    using namespace std;
    class DA{
    int k;
    public:
    DA(int x=1): k (x){}
    ~DA(){cout<  };
    int main(){
    DA d[]={DA(3),DA(3),DA(3)};
    DA* p=new DA[2];
    delete[]p;
    return0;
    }
    這個程序的輸出結(jié)果是 【14】 。
    (15)C++語言中的多態(tài)性分為編譯時的多態(tài)性和 【15】 時的多態(tài)性。
    選擇題:
    1-5BDACD
    6-10CABCA
    11-15BADAC
    16-20BCDBA
    21-25CCCCA
    26-30CDBDA
    30-35CBBBC
    填空:
    1、63
    2、黑盒
    3、DBMS
    4、開發(fā)
    5、數(shù)據(jù)字典
    6、false
    7、 *P
    8、fn(5.27)
    9、tb
    10、myclass&
     11、基類
    12、AAB
    13、1個
    14、11333
    15、運行