2012年3月計(jì)算機(jī)二級C++模擬試題及答案(1)

字號:


    一、選擇題
    1.棧和隊(duì)列的共同特點(diǎn)是( )
    A.都是先進(jìn)先出
    B.都是先進(jìn)后出
    C.只允許在端點(diǎn)處插入和刪除元素
    D.沒有共同點(diǎn)
    【參考答案】 C
    2.鏈表不具有的特點(diǎn)是( )
    A.不必事先估計(jì)存儲空間 B.可隨機(jī)訪問任一元素
    C.插入刪除不需要移動元素 D.所需空間與線性表長度成正比
    【參考答案】 B
    3.為了提高測試的效率,應(yīng)該( )
    A.隨機(jī)選取測試數(shù)據(jù) B.取一切可能的輸入數(shù)據(jù)作為測試數(shù)據(jù)
    C.在完成編碼以后制定軟件的測試計(jì)劃 D.集中對付那些錯誤群集的程序
    【參考答案】 D
    4.軟件生命周期中所花費(fèi)用最多的階段是( )
    A.詳細(xì)設(shè)計(jì) B.軟件編碼 C.軟件測試 D.軟件維護(hù)
    【參考答案】 D
    5.下列有關(guān)數(shù)據(jù)庫的描述,正確的是( )
    A.數(shù)據(jù)庫是一個DBF文件
    B.數(shù)據(jù)庫是一個關(guān)系
    C.數(shù)據(jù)庫是一個結(jié)構(gòu)化的數(shù)據(jù)集合
    D.數(shù)據(jù)庫是一組文件
    【參考答案】 C
    6.算法的空間復(fù)雜度是指( )
    A.算法程序的長度 B.算法程序中的指令條數(shù)
    C.算法程序所占的存儲空間 D.執(zhí)行過程中所需要的存儲空間
    【參考答案】 D
    7.數(shù)據(jù)結(jié)構(gòu)中,與所使用的計(jì)算機(jī)無關(guān)的是數(shù)據(jù)的( )
    A.存儲結(jié)構(gòu) B.物理結(jié)構(gòu) C.邏輯結(jié)構(gòu) D.物理和存儲結(jié)構(gòu)
    【參考答案】 C
    8.軟件設(shè)計(jì)包括軟件的結(jié)構(gòu)、數(shù)據(jù)接口和過程設(shè)計(jì),其中軟件的過程設(shè)計(jì)是指( )
    A.模塊間的關(guān)系 B.系統(tǒng)結(jié)構(gòu)部件轉(zhuǎn)換成軟件的過程描述
    C.軟件層次結(jié)構(gòu) D.軟件開發(fā)過程
    【參考答案】 B
    9.數(shù)據(jù)流圖用于抽象描述一個軟件的邏輯模型,數(shù)據(jù)流圖由一些特定的圖符構(gòu)成。下列圖符名標(biāo)識的圖符不屬于數(shù)據(jù)流圖合法圖符的是( )
    A.控制流 B.加工 C.數(shù)據(jù)存儲 D.源和潭
    【參考答案】 A
    10.在數(shù)據(jù)庫設(shè)計(jì)中,將E-R圖轉(zhuǎn)換成關(guān)系數(shù)據(jù)模型的過程屬于( )
    A.需求分析階段 B.邏輯設(shè)計(jì)階段
    C.概念設(shè)計(jì)階段 D.物理設(shè)計(jì)階段
    【參考答案】 B
       11.以下C++語言中用于單行注釋的是( )
    A.// B./* C.*/ D.|
    【參考答案】 A
    12.若變量已正確定義并賦值,以下符合C++語言語法的表達(dá)式是( )
    A.a:=b+1 B.a=b=c+2 C.int 18.5%3 D.a=a+7=c+b
    【參考答案】 B
    13.有以下程序
    #include″iostream.h″
    void main()
    {int i=1,j=1,k=2;
    if((j++||k++)&&i++)
    cout<
    cout<
    執(zhí)行后輸出結(jié)果是( )
    A.1,1,2 B.2,2,1 C.2,2,2 D.2,2,3
    【參考答案】 C
    14.若有語句int *point,a=4;和point=&a;下面均代表地址的一組選項(xiàng)是( )
    A.a,point,*&a
    B.&*a,&a,*point
    C.*&point,*point,&a
    D.&a,&*point,point
    【參考答案】 D
    15.若運(yùn)行時給變量x輸入12,則以下程序的運(yùn)行結(jié)果是( )
    #include
    void main()
    {
    int x,y;
    cin>>x;
    y=x>12?x+10:x-12;
    cout<
    cout<
    }
    A.0 B.22 C.12 D.10
    【參考答案】 A
    16.以下關(guān)于C++類的說法中正確的是( )
    A.C++語言的默認(rèn)訪問權(quán)限是private
    B.C++語言中的類定義,用戶一定要自己定義一個構(gòu)造函數(shù)用于實(shí)例化類
    C.C++語言中的成員函數(shù)的實(shí)現(xiàn)部分一定要寫在類定義外
    D.C++語言中的類不能夠嵌套定義
    【參考答案】 A
    17.派生類對象對其基類中的什么成員是可訪問的?( )
    A.公有繼承的私有成員 B.私有繼承的公有成員
    C.私有繼承的保護(hù)成員 D.保護(hù)繼承的保護(hù)成員
    【參考答案】 D
    18.下列關(guān)于運(yùn)算符重載不正確的是( )
    A.運(yùn)算符重載不能改變運(yùn)算符的操作數(shù)個數(shù)
    B.運(yùn)算符重載不能改變運(yùn)算符的優(yōu)先級
    C.運(yùn)算符重載不能改變運(yùn)算符的結(jié)合性
    D.運(yùn)算符重載能改變對預(yù)定義類型數(shù)據(jù)的操作方式
    【參考答案】 D
    19.對于重載的運(yùn)算符>>,它是一個( )
    A.用于輸入的友元函數(shù) B.用于輸入的成員函數(shù)
    C.用于輸出的友元函數(shù) D.用于輸出的成員函數(shù)
    【參考答案】 A
    20.若調(diào)用一個函數(shù),且此函數(shù)中沒有return語句,則正確的說法是該函數(shù)( )
    A.沒有返回值
    B.返回若干個系統(tǒng)默認(rèn)值
    C.有返回值,但返回一個不確定的值
    D.能返回一個用戶所希望的函數(shù)值
    【參考答案】 C
       21.以下能對二維數(shù)組a進(jìn)行正確初始化的語句是( )
    A.int a[2][]={{1,0,1},{5,2,3}}; B.int a[][3]={{1,2,3},{4,5,6}};
    C.int a[2][4]={{1,2,3},{4,5},{6}}; D.int a[][3]={{1,0,1},{},{1,1}};
    【參考答案】 B
    22.有如下程序
    #include
    void main()
    {float x=2.0,y;
    if(x<0.0) y=0.0;
    else if(x<10.0) y=1.0/x;
    else y=1.0;
    cout<
    該程序的輸出結(jié)果是( )
    A.0 B.0.25 C.0.5 D.1.0
    【參考答案】 C
    23.C++中,表示一條語句結(jié)束的標(biāo)號是( )
    A.# B.; C.// D.}
    【參考答案】 B
    24.已知有定義
    const int D=5;
    int i=1;
    double f=0.32;
    char c=15;
    則下列選項(xiàng)錯誤的是( )
    A.++i; B.D--; C.c++; D.--f;
    【參考答案】 B
    25.下面程序的功能是把316表示為兩個加數(shù)的和,使兩個加數(shù)分別能被13和11整除,在劃線處應(yīng)填入的選項(xiàng)是( )
    #include
    void main()
    {int i=0,j,k;
    do{i++;k=316-13*i;} while(___);
    j=k/11;
    cout<<″316=13*″<
    A.k/11 B.k%11 C.k/11==0 D.k%11=0
    【參考答案】 B
    26.若已定義:
    int a[]={0,1,2,3,4,5,6,7,8,9},*p=a,i;
    其中o≤i≤9,則對a數(shù)組不正確的引用是( )
    A.a[p-a] B.*(&a[i])
    C.p[i] D.a[10]
    【參考答案】 D
    27.函數(shù)fun的返回值是( )
    fun(char *a,char *b)
    {int num=0,n=0;
    while(*(a+num)!=′\0′)num++;
    while(b[n]){*(a+num)=b[n];num++;n++;}
    return num;}
    A.字符串a(chǎn)的長度 B.字符串b的長度
    C.字符串a(chǎn)和b的長度之差 D.字符串a(chǎn)和b的長度之和
    【參考答案】 D
    28.下面程序的結(jié)果為( )
    #include
    int c;
    class A{
    private:
    int a;
    static int b;
    public:
    A() {a=0;c=0;}
    void seta() {a++;}
    void setb() {b++;}
    void setc() {c++;}
    void display() {cout<
    int A::b=0;
    void main()
    {A a1,a2;
    a1.seta();
    a1.setb();
    a1.setc();
    a2.seta();
    a2.setb();
    a2.setc();
    a2.display();}
    A.1 2 1 B.1 2 2 C.1 1 2 D.2 2 2
    【參考答案】 B
    29.下列關(guān)于構(gòu)造函數(shù)說法不正確的是( )
    A.構(gòu)造函數(shù)必須與類同名
    B.構(gòu)造函數(shù)可以省略不寫
    C.構(gòu)造函數(shù)必須有返回值
    D.在構(gòu)造函數(shù)中可以對類中的成員進(jìn)行初始化
    【參考答案】 C
    30.在重載一個運(yùn)算符時,如果其參數(shù)表中有一個參數(shù),則說明該運(yùn)算符是( )
    A.一元成員運(yùn)算符 B.二元成員運(yùn)算符
    C.一元友元運(yùn)算符 D.選項(xiàng)B和選項(xiàng)C都可能
    【參考答案】 D
       31.表示在輸出時顯示小數(shù)位,和在文件輸入時判斷文件尾的函數(shù)分別是( )
    A.showbase()和eof() B.showpoint()和eof()
    C.showpoint()和bad() D.showpoint()和good()
    【參考答案】 B
    32.下列程序中畫線處應(yīng)填入的語句是( )
    class Base
    {public:
    void fun() {cout<<″Base of fun″<
    class Derived:public Base
    {
    void fun()
    {
    ____//顯示基類的成員函數(shù)fun
    cout<<″Derived of fun″<
    }
    };
    A.fun(); B.Base.fun(); C.Base::fun(); D.Base->fun();
    【參考答案】 C
    33.在位運(yùn)算中,操作數(shù)每右移一位,其結(jié)果相當(dāng)于( )
    A.操作數(shù)乘以2 B.操作數(shù)除以2 C.操作數(shù)乘以4 D.操作數(shù)除以4
    【參考答案】 B
    34.一個類的友元函數(shù)能夠訪問該類的( )
    A.私有成員 B.保護(hù)成員 C.公有成員 D.所有成員
    【參考答案】 D
    35.下面程序的輸出結(jié)果是( )
    #include
    #include
    void main()
    {
    char p1[10],p2[10];
    strcpy(p1,″abc″);
    strcpy(p2,″ABC″);
    char str[50]″xyz″;
    strcpy(str+2,strcat(p1,p2));
    cout<
    }
    A.xyzabcABC B.zabcABC C.xyabcABC D.yzabcABC
    【參考答案】 C
       二、填空題
    1.算法的基本特征是可行性、確定性、【1】和擁有足夠的情報(bào)。
    【參考答案】
    【1】有窮性
    2.在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,類描述的是具有相似性質(zhì)的一組【2】。
    【參考答案】
    【2】對象
    3.數(shù)據(jù)庫管理系統(tǒng)常見的數(shù)據(jù)模型有層次模型、網(wǎng)狀模型和【3】3種。
    【參考答案】
    【3】關(guān)系模型
    4.一個類可以從直接或間接的祖先中繼承所有屬性和方法。采用這個方法提高了軟件的【4】。
    【參考答案】
    【4】可重用性
    5.關(guān)系操作的特點(diǎn)是【5】操作。
    【參考答案】
    【5】集合
    6.C++語言中關(guān)鍵字運(yùn)算符有new,delete和【6】。
    【參考答案】
    【6】sizeof
    7.以下程序的輸出結(jié)果是【7】。
    #include
    class object
    {private:
    int val;
    public:
    object();
    object(int i);
    ~object();};
    object::object()
    {val=0;
    cout<<″Default constructor for object″<
    object::object(int i)
    {val i;
    cout<<″Constructor for object″<
    object::~object()
    {cout<<″Destructor for object″<
    class container { private:
    object one;
    object two;
    int data;
    public:
    container();
    container(int i,int j,int k);
    ~container();};
    container::container()
    {cata=0;
    cout<<″Default constructor for container″<
    container::container(int i,int j,int k):two(i),one(j)
    {data=k;
    cout<<″Constructor for container″<
    container::~container()
    {cout<<″Destructor for container″<
    void main()
    {container anObj(5,6,10);}
    【參考答案】
    【7】Constructor for object6
    Constructor for object5
    Constructor for container
    Destruct
    8.靜態(tài)成員函數(shù)可以直接訪問類的【8】成員,不能直接訪問類的【9】成員。
    【參考答案】
    【8】靜態(tài) 【9】非靜態(tài)
    9.表達(dá)式x.operator+(y.operator++(0))還可以寫成【10】。
    【參考答案】
    【10】x+y++或x+(y++)
    10.在C++語言的結(jié)構(gòu)化程序設(shè)計(jì)中,【11】是程序的基本組成單元;在C++語言的面向?qū)ο笤O(shè)計(jì)框架中,【12】是程序的基本組成單元。
    【參考答案】
    【11】函數(shù) 【12】類
    11.C++語言提供的基本控制結(jié)構(gòu)可以分為3種類型:順序結(jié)構(gòu)、【13】和循環(huán)結(jié)構(gòu)。
    【參考答案】
    【13】選擇結(jié)構(gòu)
    12.C++語言的參數(shù)傳遞機(jī)制包括傳值和傳地址兩種,如果調(diào)用函數(shù)時,需要改變實(shí)參或者返回多個值,應(yīng)該采取【14】方式。
    【參考答案】
    【14】傳地址
    13.繼承的方式有公有繼承、私有繼承和【15】3種。
    【參考答案】
    【15】保護(hù)繼承
       上機(jī)部分
    一、改錯題
    使用VC6打開考生文件夾下的工程kt7_1,此工程包含一個源程序文件kt7_1.cpp,但該程序運(yùn)行有問題,請改正程序中的錯誤,使程序的輸出結(jié)果如下:
    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++)
    【試題解析】
    (1)主要考查對析構(gòu)函數(shù)特性的掌握,析構(gòu)函數(shù)不能帶參數(shù)也不能重載,一個類中只能定義一個析構(gòu)函數(shù),因?yàn)槲鰳?gòu)函數(shù)在刪除對象的時候被默認(rèn)調(diào)用,如果含有多個析構(gòu)函數(shù)則可能引起多次刪除產(chǎn)生的意外錯誤;
    (2)主要考查對構(gòu)造函數(shù)與函數(shù)重載的掌握,由輸出結(jié)果可知其應(yīng)該調(diào)用不帶參數(shù)的構(gòu)造函數(shù)B();
    (3)主要考查對for循環(huán)語句的使用,如果在for循環(huán)中不寫第三個表達(dá)式就意味著該循環(huán)一直會執(zhí)行下去,因?yàn)閕的值總是小于2。
    二、簡單應(yīng)用題
    編寫一個函數(shù)intcharnum(charfn[10]),該函數(shù)以只讀方式打開文件fn,,通過統(tǒng)計(jì),返回文件中字符的個數(shù),請使用while循環(huán)實(shí)現(xiàn)計(jì)數(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;}
    【試題解析】
    本題主要考查對文件相關(guān)操作的熟練程度。首先定義文件流類的變量,然后使用該對象的open方法打開一個文件,接著使用while循環(huán)和getch方法每次讀入一個字符并統(tǒng)計(jì)字符個數(shù),最后使用close方法關(guān)閉文件,返回i值。
    三、綜合應(yīng)用題
    使用VC6打開考生文件夾下的工程kt7_3,此工程包含一個源程序文件kt7_3.cpp,其中含有一個類Circle的定義,但該類的定義并不完整。請按要求完成下列操作,將類Circle的定義補(bǔ)充完整。
    (1)為類Circle增加一個構(gòu)造函數(shù),該函數(shù)有一個參數(shù),并在構(gòu)造時將該參數(shù)值賦給成員radius。將該函數(shù)實(shí)現(xiàn)為一個非內(nèi)聯(lián)函數(shù),并且使用參數(shù)列表的方式將類成員賦值。請?jiān)谧⑨尅?/**1**”之后添加適當(dāng)?shù)恼Z句。
    (2)為類Circle增加一個成員函數(shù)print(),使得可以輸出有關(guān)圓的信息,比如下列程序
    Circlec;
    c.SetRadius(5);
    c.Print();
    將輸出:Thecirclehasradiusof5!
    請?jiān)谧⑨尅?/**2**”之后添加適當(dāng)?shù)恼Z句。
    (3)完成友元函數(shù)voidCompareR(Circle*c1,Circle*c2)的定義,在屏幕中輸出c1與c2比較radius大小結(jié)果,要求使用if-else結(jié)構(gòu)完成。請?jiān)谧⑨尅?/**3**”之后添加適當(dāng)?shù)恼Z句。
    輸出結(jié)果如下:
    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ù)的定義與實(shí)現(xiàn),友元函數(shù),if分支語句等知識點(diǎn)。友元函數(shù)的類體外的定義與一般函數(shù)一樣,其中if-else的使用,else總是與其最近的那個if配對使用的,書寫時使用縮進(jìn)格式,將配對的if-else對齊,以免出錯。