2015年計(jì)算機(jī)二級(jí)《C++》上機(jī)考前提升題

字號(hào):

一、選擇題(每小題1分,共40分)
    1、有如下程序:
    #inClude using namespaCe std; Class B{
    publiC:
    virtual void show(){Cout<<”B”;} };
    Class D:publiC B{ . publiC:
    void show(){Cout<<”D”;} };
    void funl(B * ptr){ptr一>show();} void fUN2(B&ref){ref.show();}
    voidfhIl3(B B.{b.show();} int main()
    {
    B b,* P=new D; D d;
    funl(P); fun2(B.; fun3(D);
    delete P; return 0; }
    執(zhí)行這個(gè)程序的輸出結(jié)果是( )。
    A.BBB
    B.BBD
    C.DBB
    D.DBD
    2、下面描述中錯(cuò)誤的是( )。
    A.系統(tǒng)總體結(jié)構(gòu)圖支持軟件系統(tǒng)的詳細(xì)設(shè)計(jì)
    B.軟件設(shè)計(jì)是將軟件需求轉(zhuǎn)換為軟件表示的過(guò)程
    C.?dāng)?shù)據(jù)結(jié)構(gòu)與數(shù)據(jù)庫(kù)設(shè)計(jì)是軟件設(shè)計(jì)的任務(wù)之一
    D.PAD圖是軟件詳細(xì)設(shè)計(jì)的表示工具
    3、已知函數(shù)FA調(diào)用函數(shù)FB,若要把這兩個(gè)函數(shù)定義在同一個(gè)文件中,則( )。
    A.FA必須定義在FB之前
    B.FB必須定義在FA之前
    C.若FA定義在FB之后,則FA的原型必須出現(xiàn)在FB的定義之前
    D.若FB定義在FA之后,則FB的原型必須出現(xiàn)在FA的定義之前
    4、有如下函數(shù)定義:
    void funC(int a,int&B. {a++;b++;}
    若執(zhí)行代碼段:
    int x=0,Y = 1; funC(X,Y);
    則變量x和y的值分別是( ?。?BR>    A.0和1
    B.1和1
    C.0和2
    D.1和2
    5、下面程序的輸出結(jié)果是( )。
    #include
    class example
    {
    int a;
    public:
    example(int B.{a=b++;}
    void print(){a=a+1;eout< void print()const{cout< };
    void main()
    {
    example x(3);
    const example Y(2);
    A print();
    B print();
    }
    A.2 2
    B.4 3
    C.4 2
    D.3 2
    6、下列有關(guān)類繼承的敘述中,錯(cuò)誤的是( )。
    A.繼承可以實(shí)現(xiàn)軟件復(fù)用
    B.虛基類可以解決由多繼承產(chǎn)生的二義性問(wèn)題
    C.派生類構(gòu)造函數(shù)要負(fù)責(zé)調(diào)用基類的構(gòu)造函數(shù)
    D.派生類沒(méi)有繼承基類的私有成員
    7、下面程序的運(yùn)行結(jié)果是( )。
    #include
    int fun(int a[],int n) {
    int resuh=1;
    for(inl i=1;i<11;1‘++)
    result=result * a[i];
    retum result;
    } void main()
    int a[3]={3,4,5}:
    cout< }
    A.12
    B.15
    C.20
    D.60
    8、下列敘述中正確的是( )。
    A.在棧中,棧中元素隨棧底指針與棧頂指針的變化而動(dòng)態(tài)變化
    B.在棧中,棧頂指針不變,棧中元素隨棧底指針的變化而動(dòng)態(tài)變化
    C.在棧中,棧底指針不變,棧中元素隨棧頂指針的變化而動(dòng)態(tài)變化
    D.以上說(shuō)法都不正確
    9、在滿足實(shí)體完整性約束的條件下( )。
    A.一個(gè)關(guān)系中應(yīng)該有一個(gè)或多個(gè)候選關(guān)鍵字
    B.一個(gè)關(guān)系中只能有一個(gè)候選關(guān)鍵字
    C.一個(gè)關(guān)系中必須有多個(gè)候選關(guān)鍵字
    D.一個(gè)關(guān)系中可以沒(méi)有候選關(guān)鍵字
    10、下面關(guān)于c+十語(yǔ)言變量的敘述錯(cuò)誤的是( )。
    A.c++語(yǔ)言中變量分為aut0、static、extem和register4種存儲(chǔ)類型
    B.自動(dòng)變量和外部變量的作用域?yàn)檎麄€(gè)程序
    C.內(nèi)部靜態(tài)變量的作用域是定義它的函數(shù)
    D.外部靜態(tài)變量的作用域是定義它的文件
    11、 下面程序的運(yùn)行結(jié)果是( )。
    #include void main()
    {
    int num=1:
    int&ref=num; ref=ref+2:
    cout< }
    A.13
    B.16
    C.36
    D.33
    12、 有以下程序:
    #include float tun(int X,int Y) {return(X+Y);} void main()
    {int a=2,b=5,c=8;
    cout< 程序運(yùn)行后的輸出結(jié)果是( )。
    A.編譯出錯(cuò)
    B.9
    C.21
    D.9.0
    13、 下列運(yùn)算符中,不能被重載的是( ?。?。
    A.&&
    B.!=
    C..
    D.++
    14、 算法的空間復(fù)雜度是指( )。
    A.算法在執(zhí)行過(guò)程中所需要的計(jì)算機(jī)存儲(chǔ)空間
    B.算法所處理的數(shù)據(jù)量
    C.算法程序中的語(yǔ)句或指令條數(shù)
    D.算法在執(zhí)行過(guò)程中所需要的臨時(shí)工作單元數(shù)
    15、 c++語(yǔ)言類體系中,不能被派生類繼承的有( )。
    A.轉(zhuǎn)換函數(shù)
    B.構(gòu)造函數(shù)
    C.虛函數(shù)
    D.靜態(tài)成員函數(shù)
    16、 對(duì)C++編譯器區(qū)分重載函數(shù)無(wú)任何意義的信息是( )。
    A.參數(shù)類型
    B.參數(shù)個(gè)數(shù)
    C.返回值類型
    D.常成員函數(shù)關(guān)鍵字Const
    17、 對(duì)類成員訪問(wèn)權(quán)限的控制,是通過(guò)設(shè)置成員的訪問(wèn)控制屬性實(shí)現(xiàn)的,下列不是訪問(wèn)控制屬性的是( )。
    A.公有類型
    B.私有類型
    C.保護(hù)類型
    D.友元類型
    18、 下列程序的運(yùn)行結(jié)果為( ?。?。
    #include int i=0;
    class A{ public: A(){i++;}
    };
    void main() {
    A a,b[3],*C; C=b;
    cout< }
    A.2
    B.3
    C.4
    D.5
    19、 以下關(guān)鍵字不能用來(lái)聲明類的訪問(wèn)權(quán)限的是( ?。?BR>    A.publiC
    B.statiC
    C..proteCted
    D.private
    20、 設(shè)有定義int a=1;float f=1.2;char C='a';,則下列表示錯(cuò)誤的是( )。
    A.++a;
    B.f一一;
    C.c++;
    D.8++;
    21、 下列不是描述類的成員函數(shù)的是( )。
    A.構(gòu)造函數(shù)
    B.析構(gòu)函數(shù)
    C.友元函數(shù)
    D.復(fù)制構(gòu)造函數(shù)
    22、 有如下程序:
    int x=3:
    do{
    x-=2;
    COU[< }while(!(--X));
    執(zhí)行這個(gè)程序的輸出結(jié)果是( )。
    A.1
    B.3 0
    C.1—2
    D.死循環(huán)
    23、 下列選項(xiàng)中屬于面向?qū)ο笤O(shè)計(jì)方法主要特征的是( )。
    A.繼承,
    B.自頂向下
    C.模塊化
    D.逐步求精
    24、 對(duì)于類定義 class A{
    public:
    void func2(){}
    };
    class B:public A{ public:
    w)id funcl()| cout<<"class B func l”< virtual voiIl fimc2(){cout<<"class B func 2" < };
    下面正確的敘述是( )。
    A.A::rune2()和B::funcl()都是虛函數(shù)
    B.A::func2()和B::funel()都不是虛函數(shù)
    C.B::funcl()是虛函數(shù),而A::func2()不是虛函數(shù)
    D.B::funcl()不是虛函數(shù),而A::func2()是虛函數(shù)
    25、 語(yǔ)句ofstream f(”SALARY.DAT”,ios::app|ios::binary);的功能是建立流對(duì)象f,試圖打開文件SALA-RY.DAT并與之連接,并且( )。
    A.若文件存在,將文件寫指針定位于文件尾;若文件不存在,建立一個(gè)新文件
    B.若文件存在,將其置為空文件;若文件不存在,打開失敗
    C.若文件存在,將文件寫指針定位于文件首;若文件不存在,建立一個(gè)新文件
    D.若文件存在,打開失敗;若文件不存在,建立一個(gè)新文件
    26、 下列有關(guān)繼承和派生的敘述中,正確的是(  )。
    A.如果一個(gè)派生類公有繼承其基類,則該派生類對(duì)象可以訪問(wèn)基類的保護(hù)成員
    B.派生類的成員函數(shù)可以訪問(wèn)基類的所有成員
    C.基類對(duì)象可以賦值給派生類對(duì)象
    D.如果派生類沒(méi)有實(shí)現(xiàn)基類的一個(gè)純虛函數(shù),則該派生類是一個(gè)抽象類
    27、 下列符號(hào)中可以用做C++標(biāo)識(shí)符的是( )。
    A._radius
    B.f00~bar
    C.else
    D.3room
    28、有如下程序:
    #include
    using namespace std;
    classBase{
    public:
    void fun(){
    __________________
    cout<<”Base::fun”< };
    class Derived:public Base{
    public:
    voidfun(){
    cout<<”Derived::fun”< }
    };
    int main(){
    Derived d;
    A fun();
    return 0;
    }
    已知其執(zhí)行后的輸出結(jié)果為:
    Base::fun
    Derived::fun
    則程序中下畫線處應(yīng)填入的語(yǔ)句是( ?。?。
    A. Base.fun();
    B.Base::fun();
    C.Base—>fun();
    D.fun();
    29、 以下各選項(xiàng)組中,均是C++語(yǔ)言關(guān)鍵字的組是( )。
    A.public operator this
    B.shod string static
    C.it while>=
    D.prirate cout printf
    30、 要想使23.78965421的輸出為23.7887,應(yīng)用的語(yǔ)句是( )。
    A.cout<<23.78965421;
    B.cout    D.cout<
    31、 在軟件開發(fā)中,需求分析階段產(chǎn)生的主要文檔是( )。
    A.軟件集成測(cè)試計(jì)劃
    B.軟件詳細(xì)設(shè)計(jì)說(shuō)明書
    C.用戶手冊(cè)
    D.軟件需求規(guī)格說(shuō)明書
    32、 下列關(guān)于類定義的說(shuō)法中,正確的是( )。
    A.類定義中包括數(shù)據(jù)成員和函數(shù)成員的聲明
    B.類成員的缺省訪問(wèn)權(quán)限是保護(hù)的
    C.?dāng)?shù)據(jù)成員必須被聲明為私有的
    D.成員函數(shù)只能在類體外進(jìn)行定義
    33、 下列關(guān)于數(shù)據(jù)庫(kù)設(shè)計(jì)的敘述中,正確的是( )。
    A.在需求分析階段建立數(shù)據(jù)字典
    B.在概念設(shè)計(jì)階段建立數(shù)據(jù)字典
    C.在邏輯設(shè)計(jì)階段建立數(shù)據(jù)字典
    D.在物理設(shè)計(jì)階段建立數(shù)據(jù)字典
    34、 下列選項(xiàng),不正確的是( )。
    A.for(int a=1;a<=10;a++);
    B.int a=1;
    do
    {
    a++:
    }while(a<=10);
    C.int a=1;
    while(a<=10)
    {
    a++:
    }
    D.for(int a=1;a<=10;a++)a++;
    35、 下列關(guān)于棧敘述正確的是( )。
    A.棧頂元素最先能被刪除
    B.棧頂元素最后才能被刪除
    C.棧底元素永遠(yuǎn)不能被刪除
    D.棧底元素最先被刪除
    36、 下列關(guān)于運(yùn)算符重載的描述中,正確的是( )。
    A.運(yùn)算符重載為成員函數(shù)時(shí),若參數(shù)表中無(wú)參數(shù),重載的是一元運(yùn)算符
    B.一元運(yùn)算符只能作為成員函數(shù)重載
    C.二元運(yùn)算符重載為非成員函數(shù)時(shí),參數(shù)表中有一個(gè)參數(shù)
    D.c++中可以重載所有的運(yùn)算符
    37、 下面關(guān)于C++語(yǔ)言的描述錯(cuò)誤的是( )。
    A.C++語(yǔ)言支持?jǐn)?shù)據(jù)封裝
    B.C++語(yǔ)言中引入友元,沒(méi)有破壞封裝性
    C.C++語(yǔ)言允許函數(shù)名和運(yùn)算符重載
    D.C++語(yǔ)言支持動(dòng)態(tài)聯(lián)編
    38、 在c++語(yǔ)言程序中,對(duì)象之間的相互通信通過(guò)( )。
    A.繼承實(shí)現(xiàn)
    B.調(diào)用成員函數(shù)實(shí)現(xiàn)
    C.封裝實(shí)現(xiàn)
    D.函數(shù)重載實(shí)現(xiàn)
    39、 下列敘述中正確的是( )。
    A.循環(huán)隊(duì)列是隊(duì)列的一種鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)
    B.循環(huán)隊(duì)列是隊(duì)列的一種順序存儲(chǔ)結(jié)構(gòu)
    C.循環(huán)隊(duì)列是非線性結(jié)構(gòu)
    D.循環(huán)隊(duì)列是一種邏輯結(jié)構(gòu)
    40、 下面不屬于需求分析階段任務(wù)的是( )。
    A.確定軟件系統(tǒng)的功能需求
    B.確定軟件系統(tǒng)的性能需求
    C.需求規(guī)格說(shuō)明書評(píng)審
    D.制定軟件集成測(cè)試計(jì)劃
    二、基本操作題(18分)
    41、
    請(qǐng)使用VC6或使用【答題】菜單打開考生文件夾progl下的工程progl,該工程中包含程序文件main. cpp,其中有Salary(“工資”)類和主函數(shù)main的定義。程序中位于每個(gè)“//ERROR ****found****”之后的一行語(yǔ)句行有錯(cuò)誤,請(qǐng)加以改正。改正后程序的輸出結(jié)果應(yīng)為:
    應(yīng)發(fā)合計(jì):3500應(yīng)扣合計(jì):67.5實(shí)發(fā)工資:3432.5
    注意:只修改每個(gè)“//ERROR ****found****”下的那一行,不要改動(dòng)程序中的其他內(nèi)容。
    #include
    using namespace std; class Salary{
    public:
    Salary(const char *id,double the_base,double the bonus,double the_tax) //ERROR **********found**********
    :the_base(base),the_bonus(bonus),the_tax(tax) {
    staff_id=new char[strlen(id)+1]; strcpy(staff_id,id);
    }
    //ERROR **********found********** ~Salary(){delete * staff_id;}
    double getGmssPay()const{retum base+bonus;}//返回應(yīng)發(fā)項(xiàng)合計(jì)
    double getNetPay()const}retum getGmssPay()-tax;}//返回實(shí)發(fā)工資額 private:
    char * staff id;//職工號(hào) double base;//基本工資 double bonus;//獎(jiǎng)金
    double tax;//代扣個(gè)人所得稅 };
    int main(){
    Salary pay(”888888”,3000.0,500.0,67.50);
    cout<<”應(yīng)發(fā)合計(jì):”< cout<<”應(yīng)扣合計(jì):”< //ERROR**********found**********
    cout<<”實(shí)發(fā)工資:”< return 0;
    }
    三、簡(jiǎn)單應(yīng)用題(24分)
    42、
    請(qǐng)使用VC6或使用【答題】菜單打開考生文件夾proj2下的工程proj2,此工程包含有一個(gè)源程序文件proj2.cpp,其中定義了Stack類和ArrayStack類。
    Stack是一個(gè)用于表示數(shù)據(jù)結(jié)構(gòu)“?!钡念?,棧中的元素是字符型數(shù)據(jù)。Stack為抽象類,它只定義了棧的用戶接口,如下所示:
    公有成員函數(shù) 功能
    push 入棧:在棧頂位置添加一個(gè)元素
    pop 退棧:取出并返回棧頂元素
    ArrayStack是Stack的派生類,它實(shí)現(xiàn)了Stack定義的接口。ArrayStack內(nèi)部使用動(dòng)態(tài)分配的字符數(shù)組作為棧元素的存儲(chǔ)空間。數(shù)據(jù)成員maxSize表示的是棧的容量,top用于記錄棧頂?shù)奈恢谩3蓡T函數(shù)push和pop分別實(shí)現(xiàn)具體的入棧和退棧操作。
    請(qǐng)?jiān)诔绦蛑械臋M線處填寫適當(dāng)?shù)拇a,然后刪除橫線,以實(shí)現(xiàn)上述功能。此程序的正確輸出結(jié)果應(yīng)為:
    a,b,C
    C,b,a
    注意:只在指定位置編寫適當(dāng)代碼,不要改動(dòng)程序中的其他內(nèi)容,也不要?jiǎng)h除或移動(dòng)“//****料found****”。
    //proj2.cpp
    #include
    using namespacc std;
    class Stack{
    public:
    virtual void push(char C)=0;
    virtual char pop()=0;
    };
    class ArrayStack:public Stack{
    char*P;
    int maxSizc;
    int top;
    public:
    ArravStack(int s)
    {
    top=0;
    maxSize=s:
    //*********found*********
    P=______;
    }
    ~ArrayStack()
    {
    //*********found*********
    _______;
    }
    void push(char c)
    }
    if(top==maxSize){
    cerr<<”O(jiān)verflow! \n”:
    return;
    }
    //*********found*********
    _______;
    top++:
    }
    char pop()
    {
    if(top==0){
    cerr<<”Underflow!、n”;
    return‘\0’;
    }
    Top--;
    //*********found*********
    ______;
    }
    };
    void f(Stack&sRef)
    {
    char ch[]={‘a(chǎn)’,‘b’,‘c’};
    cout< sRef.push(oh[0]);sRef.push(ch[1]);sRef.push(ch[2]);
    cout< cout< cout< }
    int main()
    {
    ArrayStack as(10);
    f(as):
    return 0:
    }
    四、綜合應(yīng)用題(18分)
    43、
    請(qǐng)使用【答題】菜單命令或直接用VC6打開考生文件夾下的工程prog3,其中聲明了ValArray類,該類在內(nèi)部維護(hù)一個(gè)動(dòng)態(tài)分配的整型數(shù)組。ValArray類的復(fù)制構(gòu)造函數(shù)應(yīng)實(shí)現(xiàn)對(duì)象的深層復(fù)制。請(qǐng)編寫ValArray類的復(fù)制構(gòu)造函數(shù)。在main函數(shù)中給出了一組測(cè)試數(shù)據(jù),此種情況下程序的輸出應(yīng)該是:
    ValArray vl={1,2,3,4,5} ValArray v2={1,2,3,4,5} 要求:
    補(bǔ)充編制的內(nèi)容寫在“//*********333*********”與“//*********666*********”之間,不得修改程序的其他部分。
    注意:程序最后將結(jié)果輸出到文件out.dat中。輸出函數(shù)write To File已經(jīng)編譯為boj文件,并且在本程序中調(diào)用。
    //ValArray.h
    #include using namespace std; class ValArray{
    int *v: int size; public:
    ValArray(const int * P,int n):size(n) {
    v=new int[size];
    for(int i=0;i