2015年計(jì)算機(jī)二級(jí)C++上機(jī)考前沖刺題(4)

字號(hào):

一、選擇題(每小題1分,共40分)
    1、有如下程序:
    #include
    using namespace std;
    class Base{
    protected:
    Base(){cout<<’A’;}
    Base(char C){cout< };
    class Derived:public Base{
    public:
    Derived(char C){tout< };
    int main(){
    Derived dl(’B’);
    retum 0;
    }
    執(zhí)行這個(gè)程序的輸出結(jié)果是( ?。?BR>    A.B
    B.BA
    C.AB
    D.BB
    2、下列符號(hào)中能夠作為C++標(biāo)識(shí)符的是( )。
    A.Coflst
    B.2a
    C._shape
    D..Count
    3、有如下程序:
    #include
    using namespace std;
    class Base
    {
    private:
    void funl()const{tout<<”funl”;}
    protected:
    void fun2()const{tout<<”fun2”;}
    public:
    void fun3()const{cout<<”fhll3”;}
    };
    class Derived:protected Base
    {
    public:
    void fhn4()const{cout<<”filn4”;}
    };
    int main()
    {
    Derived obj;
    obj.funl();//①
    obj.fun2();//②
    obj.furd();//③
    obj.fun4();//④
    return U:
    }
    其中有語法錯(cuò)誤的語句是( ?。?BR>    A.①②③④
    B.①②③
    C.②③④
    D.①④
    4、有如下程序:
    #include
    using namespace std;
    class Instrument{
    public:
    virtual void Display()=0;
    };
    class Pian0:public Instrument}
    public:
    void Display(){/*函數(shù)體略*/}
    };
    intmain(){
    Instrument S;
    Instrument*P=0:
    //…;
    return 0;
    }
    下列敘述中正確的是(  )。
    A.語句“Insturment*P=0;”編譯時(shí)出錯(cuò)
    B.語句“Instnunent s;”編譯時(shí)出錯(cuò)
    C.類Pian0中的Display函數(shù)不是虛函數(shù)
    D.類Instrument是一個(gè)虛基類
    5、如下函數(shù)模板:
    templateT square(T x){return x*x;} 其中T是( ?。?。
    A.函數(shù)形參
    B.函數(shù)實(shí)參
    C.模板形參
    D.模板實(shí)參
    6、為了提高函數(shù)調(diào)用的實(shí)際運(yùn)行速度,可以將較簡單的函數(shù)定義為( )。
    A.內(nèi)聯(lián)函數(shù)
    B.重載函數(shù)
    C.遞歸函數(shù)
    D.函數(shù)模板
    7、有如下程序:
    #inClude using namespaCe std; Class Point{
    publiC:
    statiC int number;
    publiC:
    Point( ?。﹖.number++;} ~Point( ?。﹞number--;}
    }; , int P0int::number=0;
    int main( ?。﹞
    Point *ptr:
    Point A,B; Point*ptr_point=new Point[3]; ptr=ptr_point;’
    }
    Point C;
    Cout< return 0; }
    執(zhí)行這個(gè)程序的輸出結(jié)果是( ?。?。
    A.3
    B.4
    C.6
    D.7
    8、有三個(gè)關(guān)系R、S和T如下.
    由關(guān)系R和s通過運(yùn)算得到關(guān)系T,則所使用的運(yùn)算為( )。
    A.并
    B.自然連接
    C.笛卡爾積
    D.交
    9、下列符號(hào)中,正確的c++標(biāo)識(shí)符是( )。
    A.enum
    B.2b
    C.f00一9
    D._32
    10、下列關(guān)于C++預(yù)定義流對(duì)象的敘述中,正確的是( )。
    A.Cin是C++預(yù)定義的標(biāo)準(zhǔn)輸入流對(duì)象
    B.Cin是C++預(yù)定義的標(biāo)準(zhǔn)輸入流類
    C.Cout是C++預(yù)定義的標(biāo)準(zhǔn)輸入流對(duì)象
    D.Cout是C++預(yù)定義的標(biāo)準(zhǔn)輸入流類
    11、 下列情況中,不會(huì)調(diào)用拷貝構(gòu)造函數(shù)的是( ?。?。
    A.用一個(gè)對(duì)象去初始化同一類的另一個(gè)新對(duì)象時(shí)
    B.將類的一個(gè)對(duì)象賦值給該類的另一個(gè)對(duì)象時(shí)
    C.函數(shù)的形參是類的對(duì)象,調(diào)用函數(shù)進(jìn)行形參和實(shí)參結(jié)合時(shí)
    D.函數(shù)的返回值是類的對(duì)象,函數(shù)執(zhí)行返回調(diào)用時(shí)
    12、 下列敘述中正確的是( )。
    A.線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)與順序存儲(chǔ)結(jié)構(gòu)所需要的存儲(chǔ)空間是相同的
    B.線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)所需要的存儲(chǔ)空間一般要多于順序存儲(chǔ)結(jié)構(gòu)
    C.線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)所需要的存儲(chǔ)空間一般要少于順序存儲(chǔ)結(jié)構(gòu)
    D.線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)與順序存儲(chǔ)結(jié)構(gòu)在存儲(chǔ)空間的需求上沒有可比性
    13、 類的析構(gòu)函數(shù)的作用是( )。
    A.一般成員函數(shù)的初始化
    B.類的初始化
    C.對(duì)象的初始化
    D.刪除類創(chuàng)建的對(duì)象
    14、 下列運(yùn)算符不能重載為友元函數(shù)的是( )。
    A.=()( )->
    B. + - ++ --
    C.> < >= <=
    D.+= -= *=/=
    15、 下面關(guān)于運(yùn)算符重載的描述錯(cuò)誤的是( )。
    A.運(yùn)算符重載不能改變操作數(shù)的個(gè)數(shù)、運(yùn)算符的優(yōu)先級(jí)、運(yùn)算符的結(jié)合性和運(yùn)算符的語法結(jié)構(gòu)
    B.不是所有的運(yùn)算符都可以進(jìn)行重載
    C.運(yùn)算符函數(shù)的調(diào)用必須使用關(guān)鍵字operat。
    D.在C+十語言中不可通過運(yùn)算符重載創(chuàng)造出新的運(yùn)算符
    16、 當(dāng)使用fstream流類定義一個(gè)流對(duì)象并打開一個(gè)磁盤文件時(shí),文件的隱含打開方式為( )。
    A.ios::in
    B.ios::0ut
    C.ios::in I ios::0ut
    D.以上都不對(duì)
    17、 由于常對(duì)象不能被更新,因此( )。
    A.通過常對(duì)象只能調(diào)用它的常成員函數(shù)
    B.通過常對(duì)象只能調(diào)用靜態(tài)成員函數(shù)
    C.常對(duì)象的成員都是常成員
    D.通過常對(duì)象可以調(diào)用任何不改變對(duì)象值的成員函數(shù)
    18、 支持子程序調(diào)用的數(shù)據(jù)結(jié)構(gòu)是( ?。?BR>    A.棧
    B.樹
    C.隊(duì)列
    D.二叉樹
    19、 有如下類定義:
    class B
    {
    public:void funl(){}
    private:void fun2(){}
    protected:void fun3(){}
    };
    class D:public B
    j
    protected:void fun4(){}
    };
    若obj是類D的對(duì)象,則下列語句中不違反訪問控制權(quán)限的是( ?。?。
    A.obj.fun1();
    B.obj.fun2();
    C.obj.tim3();
    D.ohj.fun4();
    20、 有如下語句序列:
    Char str[10];Cin>>str;
    當(dāng)從鍵盤輸入“I love this game”時(shí),str中的字符串是( )。
    A.”I love this game”
    B.”I love thi”
    C.”I love”
    D.”I”
    21、 繼承機(jī)制的作用是( )。
    A.信息隱藏
    B.?dāng)?shù)據(jù)封裝
    C.定義新類
    D.?dāng)?shù)據(jù)抽象
    22、 模板對(duì)類型的參數(shù)化提供了很好的支持,因此( ?。?BR>    A.類模板的主要作用是生成抽象類
    B.類模板實(shí)例化時(shí),編譯器將根據(jù)給出的模板實(shí)參生成一個(gè)類
    C.在類模板中的數(shù)據(jù)成員都具有同樣類型
    D.類模板中的成員函數(shù)都沒有返回值
    23、if語句的語法格式可描述為:
    格式l:if(<條件>)<語句>
    或
    格式2:if(<條件>)<語句l>
    else<語句2>
    關(guān)于上面的語法格式,下列表述中錯(cuò)誤的是( ?。?BR>    A.<條件>部分可以是一個(gè)if語句,例如if(if(a==0)…)…
    B.<語句>部分可以是一個(gè)if語句,例如if(…)if(…)…
    C.如果在<條件>前加上邏輯非運(yùn)算符!并交換<語句l>和<語句2>的位置,語句功能不變
    D.<語句>部分可以是一個(gè)循環(huán)語句,例如if(…)while(…)…
    24、 下面的程序中,錯(cuò)誤的語句是( ?。?。
    ①#inClude
    ②void main()
    ③{
    ④ int *p=new int[1];
    ⑧P=9;
    ⑥cout<<.*P< ⑦delete[]p;
    ⑧}
    A.④
    B.⑤
    C.⑥
    D.⑦
    25、 下面有關(guān)for循環(huán)的正確描述是( )。
    A.for循環(huán)只能用于循環(huán)次數(shù)已經(jīng)確定的情況
    B.for循環(huán)是先執(zhí)行循環(huán)體語句,后判斷表達(dá)式
    C.在for循環(huán)中,不能用break語句跳出循環(huán)體
    D.在for循環(huán)的循環(huán)體語句中,可以包含多條語句,但必須用花括號(hào)括起來
    26、 下列敘述中正確的是( )。
    A.算法就是程序
    B.設(shè)計(jì)算法時(shí)只需要考慮數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)
    C.設(shè)計(jì)算法時(shí)只需要考慮結(jié)果的可靠性
    D.以上三種說法都不對(duì)
    27、 由于常對(duì)象不能被更新,因此( ?。?。
    A.通過常對(duì)象只能調(diào)用它的常成員函數(shù)
    B.通過常對(duì)象只能調(diào)用靜態(tài)成員函數(shù)
    C.常對(duì)象的成員都是常成員
    D.通過常對(duì)象可以調(diào)用任何不改變對(duì)象值的成員函數(shù)
    28、 有如下程序:
    #include
    using namespace std;
    class MyClass{
    public:
    MyClass(){cout<<’A’;}
    MyClass(char C.{cout< ~MyClass(){cout<<’B’;}
    };
    int main(){
    MyClass pl,+p2;
    p2=new MyClass(’X’);
    delete p2;
    return 0;
    }
    執(zhí)行這個(gè)程序的輸出結(jié)果是( ?。?BR>    A.ABX
    B.ABXB
    C.AXB
    D.AXBB
    29、有如下程序:
    #include
    using namespace std;
    class Pair{
    int m,n;
    public:
    Pair(int j,int k):m(j),n(k){}
    int get(){return m;}
    int get()const{return m+n;}
    };
    int main(){
    Pair a(3,5);
    const Pair b(3,5);
    tout< return U:
    }
    執(zhí)行這個(gè)程序的輸出結(jié)果是( ?。?BR>    A.33
    B.38
    C.83
    D.88
    30、 執(zhí)行下列語句段后,輸出字符“*”的個(gè)數(shù)是( ?。?。
    for(int i=50;i>1;--i) Cout<<'*':
    A.48
    B.49
    C.50
    D.51
    
    32、 軟件測試的目的是( )。
    A.評(píng)估軟件可靠性
    B.發(fā)現(xiàn)并改正程序中的錯(cuò)誤
    C.改正程序中的錯(cuò)誤
    D.發(fā)現(xiàn)程序中的錯(cuò)誤
    33、 軟件設(shè)計(jì)中劃分模塊的一個(gè)準(zhǔn)則是( )。
    A.低內(nèi)聚低耦合
    B.高內(nèi)聚低耦合
    C.低內(nèi)聚高耦合
    D.高內(nèi)聚高耦合
    34、 下列數(shù)據(jù)結(jié)構(gòu)中,能夠按照“先進(jìn)后出”原則存取數(shù)據(jù)的是( )。
    A.循環(huán)隊(duì)列
    B.棧
    C.隊(duì)列
    D.二叉樹
    35、 有如下程序:
    #inClude using namespaCe std; Class Base{
    publiC:
    Base(int x=0){Cout< Class Derived:publiC Base{ publiC:
    Derived(int X=0){Cout< Base val; };
    int main() {
    Derived d(1); return 0;
    }
    執(zhí)行這個(gè)程序的輸出結(jié)果是( )。
    A.0
    B.1
    C.01
    D.001
    36、 已知Value是一個(gè)類,value是Value的一個(gè)對(duì)象。下列以非成員函數(shù)形式重載的運(yùn)算符函數(shù)原型中,正確的是( )。
    A.Value operator+(Value v,int i);
    B.Value operator+(Value v=value,int i);
    C.Value operator+(Value v,inl:i=0):
    D.Value operator+(Value v=vallle,int i=0);
    37、 有如下程序段:
    int i=0,J=1;
    nt&r=i;//④ ’ r=j;//②
    int * P=&i;//③ * P=&r;//④
    其中會(huì)產(chǎn)生編譯錯(cuò)誤的語句是( ?。?。
    A.④
    B.③
    C.②
    D.①
    38、 有如下程序:
    ﹟nclude
    using namespace std;
    int main()
    {
    int*P;
    *P=9:
    cout<<”The value at p:”<< *p;
    return 0;
    }
    編譯運(yùn)行程序?qū)⒊霈F(xiàn)的情況是( )。
    A.編譯時(shí)出現(xiàn)語法錯(cuò)誤,不能生成可執(zhí)行文件
    B.運(yùn)行時(shí)一定輸出:l'lle value at P:9
    C.運(yùn)行時(shí)一定輸出:llle value at P:*9
    D.運(yùn)行時(shí)有可能出錯(cuò)
    39、 在軟件設(shè)計(jì)中不使用的工具是( )。
    A.系統(tǒng)結(jié)構(gòu)圖
    B.PAD圖
    C.?dāng)?shù)據(jù)流圖(DFD圖)
    D.程序流程圖
    40、 C++中的模板包括( ?。?。
    A.對(duì)象模板和函數(shù)模板
    B.對(duì)象模板和類模板
    C.函數(shù)模板和類模板
    D.變量模板和對(duì)象模板
    二、基本操作題(18分)
    41、請(qǐng)使用VC6或使用【答題】菜單打開考生文件夾projl下的工程projl,此工程中包含一個(gè)源程序文件main.cpp,其中有類Book(“書”)和主函數(shù)main的定義。程序中位于每個(gè)“//ERROR****found****”下的語句行有錯(cuò)誤,請(qǐng)加以改正。改正后程序的輸出結(jié)果應(yīng)該是:
    書名:C++語句程序設(shè)計(jì)總頁數(shù):299
    已把“c++語言程序設(shè)計(jì)”翻到第50頁
    已把“c++語言程序設(shè)計(jì)”翻到第51頁
    已把“c++語言程序設(shè)計(jì)”翻到第52頁
    已把“c++語言程序設(shè)計(jì)”翻到第51頁
    已把書合上。
    當(dāng)前頁:0
    注意:只修改每個(gè)“//ERROR ***found***”下的那一行,不要改動(dòng)程序中的其他內(nèi)容。
    #include
    using namespace std;
    class Book{
    char*title;
    int num—pages;//頁數(shù)
    int cur_page;//當(dāng)前打開頁面的頁碼,0表示書未打開
    public:
    //ERROR***********found***********
    Book(const char*theTitle,int pages)num_pages(pages)
    {
    title=new char[strlen(theTitle)+1];
    strepy(title,theTitle);
    cout< <<”總頁數(shù):”< }
    ~Book(){delete[]title;}
    bool isClosed()const{return cur_page==0;} //書合上時(shí)返回true,否則返回false
    bool isOpen()const{return!isClosed();}//書打開時(shí)返回true,否則返回false
    int numOfPages()const{return num_pages;}//返回書的頁數(shù)
    int currentPage()const{return cur_page;}//返回打開頁面的頁碼
    //ERROR***********found***********
    void openAtPage(int page_no)const{ //把書翻到指定頁
    cout< i“page_nohum_pages){
    tOUt<<”無法翻到第”< ClOSe();
    }
    else{
    cur_page=page_n0;
    tout<<”已把“"< }
    }
    void openAtPrevPage(){openAtPage(cur page—1);{//把書翻到上一頁
    void openAtNextPage(){openAtPage(cur_page+1);}//把書翻到下一頁
    void close(){//把書合上
    tout< if(isClosed())
    tout<<"書是合上的。";
    else{
    //ERROR**********found**********
    num_pages=0;
    cout<<”已把書合上?!?;
    }
    cOut< }
    };
    int main(){
    Book book(”C++語言程序設(shè)計(jì)”,299);
    book.openAtPage(50);
    book.openAtNextPage();
    book.openAtNextPage();
    book.openA.tPrevPage();
    book.close();
    tout<<”當(dāng)前頁:”< return 0:
    }
    三、簡單應(yīng)用題(24分)
    42、請(qǐng)使用VC6或使用【答題】菜單打開考生文件夾proj2下的工程proj2,該工程中包含一個(gè)程序文件main.cpp,其中有日期類Date、人員類Person及排序函數(shù)sortByName和主函數(shù)main的定義。請(qǐng)?jiān)诔绦蛑械臋M線處填寫適當(dāng)?shù)拇a并刪除橫線,以實(shí)現(xiàn)上述類定義和函數(shù)定義。此程序的正確輸出結(jié)果應(yīng)為:
    按姓名排序
    排序前:
    張三 男 出生日期:1978年4月20日
    王五 女 出生日期:1965年8月3日
    楊六 女 出生日期:1965年9月5日
    李四 男 出生日期:1973年5月30日
    排序后:
    李四 男 出生日期:1973年5月30日
    王五 女 出生日期:1965年8月3日
    楊六 女 出生日期:1965年9月5日
    張三 男 出生日期:1978年4月20日
    注意:只能在橫線處填寫適當(dāng)?shù)拇a,不要改動(dòng)程序中的其他內(nèi)容,也不要?jiǎng)h除或移動(dòng)“//****found****”。
    #include
    using namespace std;
    class Date{//日期類
    int year,month,day;//年、月、日
    public:
    Date(int year,int month,int day):year(year),month(month),day(day){}
    int getYear()const{return year;}
    int getMonth()const{return month;}
    int getDay()const{return day;}
    };
    class Person{ //人員類
    char name[14];//姓名
    bool is—male;//性別,為true時(shí)表示男性
    Date birth—date;//出生日期
    public:
    Person(char*name,bool is—male,Date birth_date)
    //***************found***************
    :——————
    {
    {
    strcpy(this一>name,name);
    }
    const char * getName()const{return name;}
    bool isMale()const{return is—male;}
    Date getBirthdate()const{return birth—date;}
    //利用strcmp()函數(shù)比較姓名,返回一個(gè)正數(shù)、0或負(fù)數(shù),分別表示大于、等于、小于
    int compareName(const Person&p)const{
    //***************found*****************
    ————}
    void show(){
    cout< cout< //**************found**************
    __________________________//顯示出生月
    << “birth—date.getDay()<<”日”;//顯示出生日
    }
    };
    void sortByName(Person ps[],int size){
    //將人員數(shù)組按姓名排列為升序
    for(int i=0;i //采用選擇排序算法
    int m=i;
    for(int j=i+1;j if(ps[j].eompareName(ps[m])<0)
    m=j;
    if(m>i){
    Person P=ps[m];
    ps[m]=ps[i];
    ps[i]=p;
    }
    }
    }
    int main(){
    Person staff[]={
    Person(”張三”,true,Date(1978,4,20)),
    Person(”王五”,false,Date(1965,8,3)),
    Person(”楊六”,false,Date(1965,9,5)),
    Person(”李四”,tme,Date(1973,5,30))
    };
    const int size=sizeof(staff)/sizeof(staff[0]);
    int i;
    eout< cout< for(i=0;i sortByName(staff,size);
    cout< for(i_0;i cout< return 0;
    {
    四、綜合應(yīng)用題(18分)
    43、
    請(qǐng)使用VC6或使用【答題】菜單打開考生文件夾prosS下的工程pr093,其中包含了類TaxCaleulator(“個(gè)稅計(jì)算器”)和主函數(shù)main的定義。創(chuàng)建“個(gè)稅計(jì)算器”需要接收稅率表信息和起征額信息。在main函數(shù)中,通過兩個(gè)數(shù)組創(chuàng)建了如下的稅率表:
    
    利用這個(gè)稅率表創(chuàng)建“個(gè)稅計(jì)算器”時(shí),假定起征額為2 000元(即不超過2 000元的所得不征收個(gè)人所得稅)。請(qǐng)補(bǔ)充完成計(jì)算應(yīng)納個(gè)人所得稅額的成員函數(shù)getTaxPayable,其中的參數(shù)income為月收入。此程序的正確輸出結(jié)果應(yīng)為:
    月收入為800元時(shí)應(yīng)繳納個(gè)人所得稅0元
    月收入為l 800元時(shí)應(yīng)繳納個(gè)人所得稅0元月收入為2 800元時(shí)應(yīng)繳納個(gè)人所得稅 55元 月收入為3 800元時(shí)應(yīng)繳納個(gè)人所得稅l55元
    月收入為4 800元時(shí)應(yīng)繳納個(gè)人所得稅295元月收入為5 800元時(shí)應(yīng)繳納個(gè)人所得稅455元
    注意:只能在函數(shù)9etTaxPayable中的“//**********333**********”和“//**********666**********”之間
    填人若干語句,不要改動(dòng)程序中的其他內(nèi)容。 //Tax Calculator.h #include #include
    using flamespace std; class TaxCalculator{ public:
    TaxCalculator(double the—limits[],double the_rates[],int the—length,double the_threshold) :lower_limits(new double[the_length]),rates(new double[the—length]),
    list_len(the_length),threshold(the—threshold){ for(int i=0;i lower_limits[i]=the_limits[i]; rates[i]=the_rates[i];
    } f
    —TaxCalculator(){delete[]lower_limits;delete[]rates;}
    double getTaxPayable(double income)eonst;//返回指定月收入的應(yīng)納個(gè)人所得稅額 void showTaxPayable(double income)const;//顯示指定月收入的應(yīng)納個(gè)人所得稅額 private:
    double$lower—limits;//適用收入段下限 double *rates; //適用稅率
    int list—len;//稅率表項(xiàng)數(shù)
    double threshold; //起征額 };
    void writeToFile(consl char * path); //TaxCalcnlator.cpp
    ‘#include”TaxCalculator.h”
    double TaxCalculator::getTaxPayable(double income)const{ double taxable=income—threshold;
    //應(yīng)納稅工資額
    double tax_payable=0.0; //應(yīng)納個(gè)人所得稅額
    int i=list_len-1;
    //從稅率表的適用段開始計(jì)算 while(i>=0){
    //**********333**********
    //**********666**********
    --i; }
    return tax_payable;
    } void TaxCalculator::showTaxPayable(double income)const{
    cout<<”月收入為”< }
    //main.cpp
    #include”TaxCalculator.h” int main(){
    double limits[]={0.0,500.0,2000.0,5000.0,20000.0,40000.0,60000.0,80000。0,100000.0}; double rates[]={0.05,0.1,0.15,0.2,0.25,0.3,O.35,0.4,0.45};
    TaxCaleulator calc(1imits,rates,9,2000.0); calc.showTaxPayable(800.0);
    calc.showTaLPayable(1800.0); cale.showTaxPayable(2800.0); calc.showTaxPayable(3800.0); calc.showTaxPayable(4800.0); eaie.showTaxPayable(5800.0); writeToFile(””);
    return 0;
    }