2006年3月全國計算機等級考試二級C語言筆試試題及答案

字號:

為大家收集整理了《2006年3月全國計算機等級考試二級C語言筆試試題及答案》供大家參考,希望對大家有所幫助?。?!
    一、選擇題(每小題2 分,共70 分)下列各題A)、B)、C)、D)四個選項中,只有一個選項是正確的,請將正確選項涂寫在答題卡相應(yīng)位置上,答在試卷上不得分。
    (1)下列選項中不符合良好程序設(shè)計風(fēng)格的是______。
    A)、源程序要文檔化
    B)、數(shù)據(jù)說明的次序要規(guī)范化
    C)、避免濫用goto 語句
    D)、模塊設(shè)計要保證高耦合,高內(nèi)聚
    (2)從工程管理角度,軟件設(shè)計一般分為兩步完成,它們是______。
    A)、概要設(shè)計與詳細(xì)設(shè)計
    B)、數(shù)據(jù)設(shè)計與接口設(shè)計
    C)、軟件結(jié)構(gòu)設(shè)計與數(shù)據(jù)設(shè)計
    D)、過程設(shè)計與數(shù)據(jù)設(shè)計
    (3)下列選項中不屬于軟件生命周期開發(fā)階段任務(wù)的是______。
    A)、軟件測試
    B)、概要設(shè)計
    C)、軟件維護
    D)、詳細(xì)設(shè)計
    (4)在數(shù)據(jù)庫系統(tǒng)中,用戶所見的數(shù)據(jù)模式為______。
    A)、概念模式
    B)、外模式
    C)、內(nèi)模式
    D)、物理模式
    (5)數(shù)據(jù)庫設(shè)計的四個階段是:需求分析、概念設(shè)計、邏輯設(shè)計和______。
    A)、編碼設(shè)計
    B)、測試階段
    C)、運行階段
    D)、物理設(shè)計
    (6)設(shè)有如下三個關(guān)系表下列操作中正確的是
    A)、T=R∩S
    B)、T=R∪S
    C)、T=R×S
    D)、T=R/S
    (7)下列敘述中正確的是
    A)、一個算法的空間復(fù)雜度大,則其時間復(fù)雜度也必定大
    B)、一個算法的空間復(fù)雜度大,則其時間復(fù)雜度必定小
    C)、一個算法的時間復(fù)雜度大,則其空間復(fù)雜度必定小
    D)、上述三種說法都不對
    (8)在長為64 的有序線性表中進行順序查找,最壞情況下需要比較的次數(shù)為______。
    A)、63
    B)、64
    C)、6
    D)、7
    (9)數(shù)據(jù)庫技術(shù)的根本目標(biāo)是要解決數(shù)據(jù)的______。
    A)、存儲問題
    B)、共享問題
    C)、安全問題
    D)、保護問題
    (10)對下列二叉樹: 進行中序遍歷的結(jié)果是______。
    A)、ACBDFEG
    B)、ACBDFGE
    C)、ABDCGEF
    D)、FCADBEG
    (11)下列有關(guān)內(nèi)聯(lián)函數(shù)的敘述中,正確的是______。
    A)、內(nèi)聯(lián)函數(shù)在調(diào)用時發(fā)生控制轉(zhuǎn)移
    B)、內(nèi)聯(lián)函數(shù)必須通過關(guān)鍵字inline 來定義
    C)、內(nèi)聯(lián)函數(shù)是通過編譯器來實現(xiàn)的
    D)、內(nèi)聯(lián)函數(shù)體的最后一條語句必須是rennin 語句
    (12)下列情況中,不會調(diào)用拷貝構(gòu)造函數(shù)的是______。
    A)、用一個對象去初始化同一類的另一個新對象時
    B)、將類的一個對象賦予該類的另一個對象時
    C)、函數(shù)的形參是類的對象,調(diào)用函數(shù)進行形參和實參結(jié)合時
    D)、函數(shù)的返回值是類的對象,函數(shù)執(zhí)行返回調(diào)用時
    (13)下列有關(guān)繼承和派生的敘述中,正確的是______。
    A)、如果一個派生類私有繼承其基類,則該派生類對象不能訪問基類的保護成員
    B)、派生類的成員函數(shù)可以訪問基類的所有成員
    C)、基類對象可以賦值給派生類對象
    D)、如果派生類沒有實現(xiàn)基類的一個純虛函數(shù),則該派生類是一個抽象類
    (14)下列運算不能重載為友元函數(shù)的是______。
    A)、= ( ) [] ->
    B)、+ - ++ --
    C)、> < >= <=
    D)、+= -= *= /=
    (15)關(guān)于在調(diào)用模板函數(shù)時模板實參的使用,下列表述正確的是______。
    A)、對于虛類型參數(shù)所對應(yīng)的模板實參,如果能從模板函數(shù)的實參中獲得相同的信息,則都可以省略
    B)、對于虛擬類型參數(shù)所對應(yīng)的模板實參,如果它們是參數(shù)表中的最后的若干個參數(shù),F(xiàn)C EA DBG則都可以省略
    C)、對于虛擬型參數(shù)所對應(yīng)的模板實參,若能夠省略則必須省略
    D)、對于常規(guī)參數(shù)所對應(yīng)的模板實參,任何情況下都不能省略
    (16)下列關(guān)于輸入流類成員函數(shù)getline( )的描述中,錯誤的是______。
    A)、該函數(shù)是用來讀取鍵盤輸入的字符串的
    B)、該函數(shù)讀取的字符串長度是受限制的
    C)、該函數(shù)讀取字符串時,遇到終止符便停止
    D)、該函數(shù)讀取字符串時,可以包含空格
    (17)下列符號中,正確的C++標(biāo)識符是______。
    A)、enum
    B)、2b
    C)、foo-9
    D)_32
    (18)下列語句中,錯誤的是______。
    A)、const int buffer=256;
    B)、const double*point;
    C)、int const buffer=256;
    D)、double*const point;
    (19)if 語句的語法格式可描述為
    格式1:if(<條件>)<語句>
    或
    格式2:if(<條件>)<語句1>else<語句2>
    關(guān)于上面的語法格式,下列表述中錯誤的是
    A)、<條件>部分可以是一個if 語句,例如if(if(a =0)?)?
    B)、<條件>部分可以是一個if 語句,例如if(?)if(?)?
    C)、如果在<條件>前加上邏輯非運算符!并交換<語句1>和<語句2>的位置,語句功能不變
    D)、<語句>部分可以是一個循環(huán)語句,例如if(?)while(?)?
    (20)有如下說明
    int a [10]={1,2,3,4,5,,6,7,8,9,10},*p=a;
    則數(shù)值為9 的表達式是______。
    A)、*p+9`
    B)、*(p+8)
    C)、*p+=9
    D)、p+7
    (21)或下面的函數(shù)調(diào)用
    fun(a+b,3,max(n-1)b)
    則fun 的實參個數(shù)是______。
    A)、3
    B)、4
    C)、5
    D)、6
    (22)以下關(guān)鍵字不能用來聲明類的訪問權(quán)限的是______。
    A)、public
    B)、static
    C)、protected
    D)、private
    (23)在公有繼承的情況下,允許派生類直接訪問的基類成員包括______。
    A)、公有成員
    B)、公有成員和保護成員
    C)、公有成員、保護成員和私有成員
    D)、保護成員
    (24)關(guān)于運算符重載,下列表述中正確的是______。
    A)、C++已有的任何運算符都可以重載
    B)、運算符函數(shù)的返回類型不能聲明為基本數(shù)據(jù)類型
    C)、在類型轉(zhuǎn)換符函數(shù)的定義中不需要聲明返回類型
    D)、可以通過運算符重載來創(chuàng)建C++中原來沒有的運算符
    (25)關(guān)于關(guān)鍵字class 和typename,下列表述中正確的是______。
    A)、程序中的typename 都可以替換為class
    B)、程序中的class 都可以替換為typename
    C)、在模板形參表中只能用typename 來聲明參數(shù)的類型
    D)、在模板形參表中只能用class 或typename 來聲明參數(shù)的類型
    (26)有如下程序
    #include
    #include
    using namespace std;
    int main(){
    count  return 0;
    }
    若程序的輸出是:
    **12.345**34.567
    則程序中下劃線處遺漏的操作符是______。
    A)、setprecision(3)
    B)、fixed
    C)、setfill(*)
    D)、stew(8)
    (27)有如下程序
    #include
    #include
    using namespace std;
    class MyClass{
    public:
    MyClass(){cout<<’A”;}
    MyClass(char c {cout<~MyClass(){sout<<’B”;}
    };
    Int main(){
    MyClassp1,*p2
    p2=new MyClass(‘X’);
    delete p2;
    return 0;
    }
    執(zhí)行這個程序幕上將顯示輸出______。
    A)、ABX
    B)、ABXB
    C)、AXB
    D)、AXBB
    (28)有如下程序
    #include
    using namespace std;
    int i=1;
    class Fun{
    public;
    static int i;
    int value(){return i-1}
    int value ()const{return i+1;}
    };
    int Fun;;i=2;
    int main(){
    int i=3;
    Fun Fun1
    const Fun fun2;
    return 0;
    }
    若程序的輸出結(jié)果是:
    123
    則程序中下劃線處遺漏的語句是______。
    A)、cout<
    B)、cout<
    C)、cout<
    D)、cout<
    (29)有如下程序
    #include
    using namespace std;
    class Obj{
    static int i;
    public:
    Obj(){i++;}
    ~Obj(){i--;}
    static int getVal(){teturn i;}
    };
    int Obj::i=0;
    void f (){Obj ob2;cout  Obj obl;
    F();
    Obj*ob3=new Obj;cout  Delete ob3;cout  }
    程序的輸出結(jié)果是______。
    A)、232
    B)、231
    C)、222
    D)、221
    (30)有如下程序
    #include
    using namespace std;
    class Base{
    protected;
    Base(){cout<<’A’;}
    Base(char c){cout<};
    class Derived; public Base{
    public:
    Derived(char c ){cout <};
    int main(){
    Derived d1(‘B’);
    return 0;
    }
    執(zhí)行這個程序屏幕上將顯示輸出______。
    A)、B
    B)、BA
    C)、AB
    D)、BB
    (31)有如下類定義:
    class MyBase{
    int k;
    public;
    MyBase(int n=0):k(n){}
    int value()const{return k;}
    };
    class MyDerived; MyBase{
    int j;
    public;
    MyDerived(int i): j(i){}
    int getK()const {return k;}
    int gutj()const{return j;}
    };
    編譯時發(fā)現(xiàn)有一處語法錯誤,對這個錯誤準(zhǔn)確的描述是
    A)、函數(shù)getK 試圖訪問基類的私有成員變量K
    B)、在類MyDerived 的定義中,基類名MyBase 前缺少關(guān)鍵字public、protected 或private
    C)、類MyDerived 缺少一個無參的構(gòu)造函數(shù)
    D)、類MyDerived 的構(gòu)造的數(shù)沒有對基數(shù)數(shù)據(jù)成員K 進行初始化
    (32)在一個派生類對象結(jié)束其生命周期時
    A)、先調(diào)用派生類的析構(gòu)函數(shù)后調(diào)用基類的析構(gòu)函數(shù)
    B)、先調(diào)用基類的析構(gòu)函數(shù)后調(diào)用派生類的析構(gòu)函數(shù)
    C)、如果基數(shù)沒有定義析構(gòu)函數(shù),則只調(diào)用派生類的析構(gòu)函數(shù)
    D)、如果派生類沒有定義析構(gòu)函數(shù),則只調(diào)用基類的析構(gòu)函數(shù)
    (33)有如下的運算重載函數(shù)定義:
    Double operator+(int i, int k){return double(i+k);}
    但定義有錯誤,對這個錯誤的最準(zhǔn)確的描述是______。
    A)、+只能作為成員函數(shù)重載,而這里的+是作為非成員函數(shù)重載的
    B)、兩個int 型參數(shù)的和應(yīng)該是int 型,而這里將+的返回類型聲明為double
    C)、沒有將運算符重載函數(shù)聲明為某個類的友元
    D)、C++已經(jīng)提供了求兩個int 型數(shù)據(jù)之和運算符+,不能再定義同樣的運算符
    (34)語句ofstreamf(“SALARY.DAT”,ios_base::app)的功能是建立流對象f,并試圖打開文件SALARY.DAT 與f 關(guān)聯(lián),而且______。
    A)、若文件存在,將其置為空文件;若文件不存在,打開失敗
    B)、若文件存在,將文件指針定位于文件尾;若文件不存在,建立一個新文件
    C)、若文件存在,將文件指針定位于文件首;若文件不存在,打開失敗
    D)、若文件存在,打開失敗;若文件不存在,建立一個新文件
    (35)有如下程序
    #include
    using namespace std;
    class A{
    public:
    virtual Void funcl(){cout<< “A1”;}
    void fune2(){cout<< “A2”;}
    };
    class B: public A{
    public:
    void func1(){cout<< “B1”;}
    void func2(){cout<< “B2”;}
    };
    Int main(){
    A*p=new B;
    p->funcl();
    p->func2();
    retum0;
    }
    運行程序,屏幕上將顯示輸出______。
    A)、B1B2
    B)、A1A2
    C)、B1A2
    D)、A1B2
    二、填空題(每空2 分,共30 分)請將每一個空的正確答案寫在答題卡[1]~[15]序號的橫線上,答在試卷上不得分。
    (1)下列軟件系統(tǒng)結(jié)構(gòu)圖的寬度為 [1] 。
    (2) [2] 的任務(wù)是診斷和改正程序中的錯誤。
    (3)一個關(guān)系表的行為 [3] 。
    (4)按“行進后出”原則組織數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)是 [4] 。
    (5)數(shù)據(jù)結(jié)構(gòu)分為線性結(jié)構(gòu)和非線性結(jié)構(gòu),帶鏈的隊列屬于 [5] 。
    (6)若有定義語句:int*a,b;,則變量b 的數(shù)據(jù)類型是 [6] 。
    (7)已知數(shù)組a 中的元素個數(shù)為n,下列語句的作用是將下標(biāo)為i 的元素移動到下標(biāo)為i-1 的單元,其中1≤i<n。例如,當(dāng)n=4,a 中原有數(shù)據(jù)為1,2,3,4 時,則移動后a中元素為2,3,4,4。請將語句補充完整:
    For(int i=0;i(8)已知遞歸函數(shù)f 的定義如下:
    int f (int n)
    {
    If(n<=1)return 1;//遞歸結(jié)束情況
    else return n*f(n-2);//遞歸}則函數(shù)調(diào)用語句f(5)的返回值是 [8] 。
    (9)創(chuàng)建對象數(shù)組時,對數(shù)組的每一個元素都將調(diào)用一次構(gòu)造函數(shù),如果沒有顯式給出數(shù)組元素的初值,則調(diào)用缺省構(gòu)造函數(shù),下列程序涉及到對象數(shù)組的創(chuàng)建和單個對象的創(chuàng)建,其輸出結(jié)果是 [9] 。
    #include
    using namespace std;
    class Foo{
    public:
    Foo(int X){cout <<’A”}
    Foo(){}
    };
    int main()
    Foo f[3],g(3);
    return 0;
    }
    (10)習(xí)慣性在下列程序的輸出結(jié)果是42,請將畫線處缺失的部分補充完整。
    #include
    Using namespace atd;
    Class Foo{
    int value;
    public:
    Foo():value(0){}
    Void setvalue(int value)
    { [10] =value; //給Foo 的數(shù)據(jù)成員value 賦值}void print(){cout<};
    Int main()
    {
    Foo f;
    f.setvalue(42);
    f.print();
    retum0;
    }
    (11)如果不能使用多態(tài)機制,那么通過基類的指針雖然可以指向派生類對象,但是只能訪問從基數(shù)繼承的成員,下列程序沒有使用多態(tài)機制,其輸出結(jié)果是 [11] 。
    #include
    using namespace std;
    class Base{
    public:
    Void print(){cout<< ‘B’;}};
    class Derived: public Base{
    public
    void print(){cout<< ‘D’;}}
    int main()
    {
    Derived*pd=new Dreived);
    Base*pb=pd;
    pb->print();
    pd->print();
    delete pd;
    return 0;
    }
    (12)在聲明派生類時,如果不顯式地給出繼承方式,缺省的類繼承方式是私有繼承
    private。已知有如下類定義:
    class Base{
    protected:
    void fun(){}
    };
    Class Derived: Base{};
    則Base 類中的成員函數(shù)fun(),在Derived 類中的訪問權(quán)限是 [12] (注意:要求填寫private、protected 或public 中的一項)。
    (13)在MyClass 類的定義中,對賦值運算符=進行重載。請將畫線處缺失的部分補充完整。
    [13] MyClass::operator=(const MyClass rhs)
    {
    if(this=&rhs)return*this;
    value=rhs. value;
    return*this;
    }
    (14)插入排序算法的主要思想是:每次從未排序序列中取出一個數(shù)據(jù),插入到已排序序列中的正確位置,InsertSort 類的成員函數(shù)sort()實現(xiàn)了插入排序算法,請將畫線處缺失的部分補充完整。
    class InsertSort{
    public:
    InsertSort(int*a0,int n0):a(a0),n(n0){}//參數(shù)組首地址,n 是數(shù)組元素個數(shù)
    void sort()
    {//此函數(shù)假設(shè)已排離序列初始化狀態(tài)只包含a[0],未排序序列初始為a[1]?a[n-1]
    for (int i=1;iint j;
    for( [14] j>0;--j){
    if(t>a[j-1])break;
    a[j]=a[j-1];}
    a[j]=t;}}
    protected:
    int*a,n;//指針a 用于存放數(shù)組首地址,n 用于存放數(shù)組元素個數(shù)
    };
    (15)下列程序的輸出結(jié)果是 [15]
    #include
    using namespace std;
    class A{
    int a
    public:
    A():a(9){}
    virtual void print() const {cout<};
    class B:public A{
    char b;
    public:
    B(){b= ‘S’;}
    void print()const{cout<};
    void show(Aa&X){X,print()}
    int main()
    { Ad1;*p;
    Bd2;
    p=&d2;
    d1,print();
    d2,print();
    p->print();
    show(d1);
    show(d2);
    return 0;}
    一、 選擇題:
    01—05 DACBD 06—10 CDBBA
    11—15 ADDAD 16—20 CCBBC
    21—25 DACBC 26—30 ABCDC
    31—35 ADBAD 36—40 BBADC
    41—45 CBBCD 46—50 BABDC
    二、 填空題:
    1、3
    2、調(diào)試
    3、元組
    4、棧
    5、線性
    6、12346.0
    7、10 11
    8、1
    9、 7 4
    10、n=n/10
    11、(x+8)
    12、sin(x)
    13、0
    14、i%2==0
    15、s--
    16、*s++
    17、18
    18、16 11
    19、->data
    20、”rb”