2012年3月計算機二級C++第二套上機模擬試題及答案解析

字號:

一、改錯題
    使用VC6打開考生文件夾下的工程kt7_1,此工程包含一個源程序文件kt7_1.cpp,但該程序運行有問題,請改正程序中的錯誤,使程序的輸出結果如下:
    Constructor1
    Constructor1
    Constructor1
    Destructor
    Constructor2
    Destructor
    x=0
    x=5
    Destructor
    Destructor
    源程序文件kt21_1.cpp清單如下:
    #include
    classB
    {intx;
    public:
    B(){x=0;cout<<"Constructor1"<
    B(inti){x=i;cout<<"Constructor2"<
    ~B(){cout<<"Destructor"<
    /**********found**********/
    ~B(inti){cout<
    voidprint(){cout<<"x="<
    voidmain()
    {B*ptr;
    ptr=newB[2];
    /**********found**********/
    ptr[0]=B(0);
    ptr[1]=B(5);
    /**********found**********/
    for(inti=0;i<2;)
    ptr[i].print();
    delete[]ptr;}
    【參考答案】
    (1)將~B(int i){cout<
    (2)將ptr[0]=B(0);改為:ptr[0]=B();
    (3)將for (int i=0;i<2;)改為:for(int i=0;i<2;i++)
    B(inti){x=i;cout<<"Constructor2"<
    ~B(){cout<<"Destructor"<
    /**********found**********/
    ~B(inti){cout<
    voidprint(){cout<<"x="<
    voidmain()
    {B*ptr;
    ptr=newB[2];
    /**********found**********/
    ptr[0]=B(0);
    ptr[1]=B(5);
    /**********found**********/
    for(inti=0;i<2;)
    ptr[i].print();
    delete[]ptr;}
    【參考答案】
    (1)將~B(int i){cout<
    (2)將ptr[0]=B(0);改為:ptr[0]=B();
    (3)將for (int i=0;i<2;)改為:for(int i=0;i<2;i++)
    【試題解析】
    本題主要考查對文件相關操作的熟練程度。首先定義文件流類的變量,然后使用該對象的open方法打開一個文件,接著使用while循環(huán)和getch方法每次讀入一個字符并統(tǒng)計字符個數(shù),最后使用close方法關閉文件,返回i值。
    二、簡單應用題
    編寫一個函數(shù)intcharnum(charfn[10]),該函數(shù)以只讀方式打開文件fn,,通過統(tǒng)計,返回文件中字符的個數(shù),請使用while循環(huán)實現(xiàn)計數(shù)功能。
    注意:部分源程序已存在文件kt7_2.cpp中。
    請勿修改主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)charnum的花括號中填寫若干語句。
    文件kt7_2.cpp的內(nèi)容如下:
    #include
    #include
    #include
    intcharnum(charfn[10]);
    voidmain()
    {intnum;
    num=charnum("abc.txt");
    cout<<"num="<
    intcharnum(charfn[10])
    {
    }
    【參考答案】
    int charnum(char fn[10])
    {fstream file;
    file.open(fn,ios::in);
    if(!file)
    {cout<<"abc.txt can't open"<
    abort();}
    char ch;
    int i=0;
    while(!file.eof())
    {file.get(ch);
    i++;}
    file.close();
    return i-1;}
    【試題解析】
    本題主要考查對文件相關操作的熟練程度。首先定義文件流類的變量,然后使用該對象的open方法打開一個文件,接著使用while循環(huán)和getch方法每次讀入一個字符并統(tǒng)計字符個數(shù),最后使用close方法關閉文件,返回i值。
    三、綜合應用題
    使用VC6打開考生文件夾下的工程kt7_3,此工程包含一個源程序文件kt7_3.cpp,其中含有一個類Circle的定義,但該類的定義并不完整。請按要求完成下列操作,將類Circle的定義補充完整。
    (1)為類Circle增加一個構造函數(shù),該函數(shù)有一個參數(shù),并在構造時將該參數(shù)值賦給成員radius。將該函數(shù)實現(xiàn)為一個非內(nèi)聯(lián)函數(shù),并且使用參數(shù)列表的方式將類成員賦值。請在注釋“//**1**”之后添加適當?shù)恼Z句。
    (2)為類Circle增加一個成員函數(shù)print(),使得可以輸出有關圓的信息,比如下列程序
    Circlec;
    c.SetRadius(5);
    c.Print();
    將輸出:Thecirclehasradiusof5!
    請在注釋“//**2**”之后添加適當?shù)恼Z句。
    (3)完成友元函數(shù)voidCompareR(Circle*c1,Circle*c2)的定義,在屏幕中輸出c1與c2比較radius大小結果,要求使用if-else結構完成。請在注釋“//**3**”之后添加適當?shù)恼Z句。
    輸出結果如下:
    Thecirclehasradusof5!
    Thecirclehasradiusof10!
    c1
    注意:除在指定位置添加語句之外,請不要改動程序中的其他內(nèi)容。
    源程序文件kt7_3.cpp清單如下:
    #include
    classCircle{
    public:
    Circle():radius(5){}
    //**1**
    voidSetRadius(intr){radius=r;}
    intGetRadius(){returnradius;}
    //**2**
    friendvoidCompareR(Circle*c1,Circle*c2);
    private:
    intradius;};
    voidCompareR(Circle*c1,Circle*c2)
    {//**3**
    cout<<"c1>c2"<
    else
    if((c1->GetRadius())==(c2->GetRadius()))
    cout<<"c1=c2"<
    else
    if((c1->GetRadius())<(c2->GetRadius()))
    cout<<"c1
    voidmain()
    {Circlec1;
    c1.SetRadius(5);
    c1.Print();
    Circlec2(10);
    c2.Print();
    CompareR(&c1,&c2);}
    【參考答案】
    (1)Circle(int rad):radius(rad){}
    (2)void Print(){cout<<"The circle has radius of "<
    (3)if ((c1->GetRadius())>(c2->GetRadius()))
    【試題解析】
    本題考查成員函數(shù)的定義與實現(xiàn),友元函數(shù),if分支語句等知識點。友元函數(shù)的類體外的定義與一般函數(shù)一樣,其中if-else的使用,else總是與其最近的那個if配對使用的,書寫時使用縮進格式,將配對的if-else對齊,以免出錯。