2012年3月計(jì)算機(jī)二級C++第四套上機(jī)模擬試題及答案解析

字號:

一、改錯題
    使用VC6打開考生文件夾下的工程kt9_1,此工程包含一個源程
    序文件kt9_1.cpp,但該程序運(yùn)行有問題,請改正程序中的錯誤,使程序的輸出結(jié)果如下:
    4,5
    20
    源程序文件清單如下:
    #include
    classA
    { protected:
    intn,m;
    public:
    voidset(inta,intb){m=a;n=b;}
    voidshow(){cout<  /**********found**********/ }
    classB:publicA
    { ints;
    public:
    voidset(){s=m*n;}
    voidshows(){cout<  voidmain()
    {
    Bb;
    /**********found**********/
    b.set();
    b.show();
    b.set(); /**********found**********/
    b.show();
    }
    【參考答案】
    (1)在“}”后添加分號
    (2)將b.set();改為:b.A::set(4,5);
    (3)將b.show();改為:b.shows();
    【試題解析】
    (1)主要考查對類定義格式的掌握,類的結(jié)尾應(yīng)該使用";";
    (2)主要考查對基類與派生類函數(shù)調(diào)用關(guān)系的掌握,根據(jù)所要求的輸出結(jié)果,應(yīng)該調(diào)用的函數(shù)為類A的set,而不是類B自身的set函數(shù),應(yīng)該避免調(diào)用的二義性;
    (3)主要考查對繼承與派生的理解,由所要求輸出結(jié)果可知正確:b.shows()。
    二、簡單應(yīng)用題
    請編寫一個函數(shù)intCalcDigital(char*str),該函數(shù)可返回字符串str中數(shù)字字符(即“0”-“9”這10個數(shù)字)的個數(shù),如字符串"olympic2008"中數(shù)字字符的個數(shù)為4。請用if條件判斷語句與for循環(huán)語句來實(shí)現(xiàn)
    該函數(shù)。
    注意:部分源程序已存在文件中。
    請勿修改主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)find的花括號中填寫若干語句。
    文件kt9_2.cpp的內(nèi)容如下:
    #include
    #include
    intCalcDigital(char*str);
    voidmain()
    { char*str;
    str=newchar[255];
    cout<<"輸入字符串:";
    cin>>str;
    intnum=CalcDigital(str);
    cout<  intCalcDigital(char*str)
    {
    }
    【參考答案】
    int CalcDigital(char *str)
    { if(str==NULL) return 0;
    int num_of_digital=0;
    int len=strlen(str); for(int i=0;i  if(str[i]<='9' && str[i]>='0')
    num_of_digital++;
    return num_of_digital; }
    【試題解析】
    本題考查對于if條件判斷語句與for循環(huán)語句的熟練使用程度。注意判斷條件(判斷是否是數(shù)字是直接比較ASCII碼)的使用。
    三.綜合應(yīng)用題
    使用VC6打開考生文件夾下的工程kt9_3,此工程包含一個源程序文件kt9_3.cpp,其中定義了Circle類與Money類,Circle類可對半徑為r的圓進(jìn)行周長與面積的計(jì)算,而Money類用于計(jì)算一圓形游泳池的造價(jià)。游泳池四周有原形過道,過道外圍上柵欄,過道寬度為3米,根據(jù)鍵入的游泳池半徑,每米柵欄價(jià)格及每平方米過道價(jià)格,即可計(jì)算出游泳池的造價(jià)。請按要求完成下列操作,將程序補(bǔ)充完整。
    (1)定義符號常量PI(值為3.14159f)與WIDTH(值為3.00f),分別用于表示圓周率與過道的固定寬度。請?jiān)谧⑨尅?/**1**”之后添加適當(dāng)?shù)恼Z句。
    (2)定義Circle類默認(rèn)構(gòu)造函數(shù),把私有成員radius初始化為參數(shù)r的值。請?jiān)谧⑨尅?/**2**”之后添加適當(dāng)?shù)恼Z句;
    (3)完成Money類默認(rèn)構(gòu)造函數(shù)的定義,把私有成員FencePrice
    (每米柵欄的價(jià)格)、ConcretePrice(每平方米過道的價(jià)格)初始化為參數(shù)f,c的值。請?jiān)谧⑨尅?/**3**”之后添加適當(dāng)?shù)恼Z句。
    (4)完成Money類成員函數(shù)floatMoney::TotalMoney(floatfencelen,floatconarea)的定義,根據(jù)參數(shù)fencelen(柵欄的長度)和conarea(過道的面積),返回柵欄與過道的總造價(jià)。請?jiān)谧⑨尅?/**4**”之后添加適當(dāng)?shù)恼Z句。
    注意:除在指定位置添加語句之外,請不要改動程序中的其他內(nèi)容。
    源程序文件kt9_3.cpp清單如下:
    #include
    //**1**
    classCircle
    { private:
    floatradius;
    public:
    //**2** floatCircumference(){return2*PI*radius;}
    floatArea(){returnPI*radius*radius;} };
    classMoney
    { private:
    floatFencePrice;
    floatConcretePrice;
    public:
    Money(floatf,floatc);
    floatTotalMoney(floatfencelen,floatconarea); };
    Money::Money(floatf,floatc)
    { //**3** }
    floatMoney::TotalMoney(floatfencelen,floatconarea)
    { //**4** }
    voidmain()
    { floatradius,fence,concrete;
    cout.setf(ios::fixed);
    cout.setf(ios::showpoint);
    cout.precision(2);
    cout<<"Entertheradiusofthepool:";
    cin>>radius;
    cout<<"EntertheFencePrice:";
    cin>>fence;
    cout<<"EntertheConcretePrice:";
    cin>>concrete;
    CirclePool(radius);
    CirclePoolRim(radius+WIDTH);
    Moneymon(fence,concrete);
    floattotalmoney=mon.TotalMoney(PoolRim.Circumference(),(PoolRim.Area()-Pool.Area()));
    cout<<"ThetotalmoneyisRMB"<  【參考答案】
    (1)const float PI = 3.14159f;
    const float WIDTH =3.00f;
    (2)Circle(float r):radius(r){};
    (3)FencePrice=f;
    ConcretePrice=c;
    (4)return FencePrice*fencelen+ConcretePrice*conarea;
    【試題解析】
    本題考查對符號常量的定義及類的定義與實(shí)現(xiàn)等方面的內(nèi)容,其中常類型的定義應(yīng)使用const關(guān)鍵字。