1. <th id="r4edf"></th>
        <rp id="r4edf"></rp><th id="r4edf"></th>

        • 全國計算機等級考試二級筆試樣卷C++語言程序設計

          發布時間:2009-03-03                    來源:教育部考試中心

            一、選擇題((1)~(35)每小題2分,共70分)

            下列各題A)、B)、C)、D)四個選項中,只有一個選項是正確的,請將正確選項涂寫在答題卡相應位置上,答在試卷上不得分。

            (1)下列選項中不符合良好程序設計風格的是

            A)源程序要文檔化       B)數據說明的次序要規范化

            C)避免濫用goto語句    D)模塊設計要保證高耦合、高內聚

            (2)從工程管理角度,軟件設計一般分為兩步完成,它們是

            A)概要設計與詳細設計   B)數據設計與接口設計

            C)軟件結構設計與數據設計   D)過程設計與數據設計

            (3)下列選項中不屬于軟件生命周期開發階段任務的是

            A)軟件測試     B)概要設計 C)軟件維護 D)詳細設計

            (4)在數據庫系統中,用戶所見的數據模式為

            A)概念模式 B)外模式   C)內模式   D)物理模式

            (5)數據庫設計的四個階段是:需求分析、概念設計、邏輯設計和

            A)編碼設計 B)測試階段 C)運行階段 D)物理設計

            (6)設有如下三個關系表


            A)T=R∩S      B)T=R∪S  下列操作中正確的是

            C)T=R×S      D)T=R/S

            (7)下列敘述中正確的是

            A)一個算法的空間復雜度大,則其時間復雜度也必定大

            B)一個算法的空間復雜度大,則其時間復雜度必定小

            C)一個算法的時間復雜度大,則其空間復雜度必定小

            D)上述三種說法都不對

            (8)在長度為64的有序線性表中進行順序查找,最壞情況下需要比較的次數為

            A)63   B)64   C)6    D)7

            (9)數據庫技術的根本目標是要解決數據的

            A)存儲問題 B)共享問題 C)安全問題         D)保護問題

            (10)對下列二叉樹

            進行中序遍歷的結果是

            A)ACBDFEG  B)ACBDFGE  C)ABDCGEF  D)FCADBEG

            (11)下列有關內聯函數的敘述中,正確的是

            A)內聯函數在調用時發生控制轉移

            B)內聯函數必須通過關鍵字inline來定義

            C)內聯函數是通過編譯器來實現的

            D)內聯函數函數體的最后一條語句必須是return語句

            (12)下列情況中,不會調用拷貝構造函數的是

            A)用一個對象去初始化同一類的另一個新對象時

            B)將類的一個對象賦值給該類的另一個對象時

            C)函數的形參是類的對象,調用函數進行形參和實參結合時

            D)函數的返回值是類的對象,函數執行返回調用時

            (13)下列有關繼承和派生的敘述中,正確的是

            A)如果一個派生類私有繼承其基類,則該派生類對象不能訪問基類的保護成員

            B)派生類的成員函數可以訪問基類的所有成員

            C)基類對象可以賦值給派生類對象

            D)如果派生類沒有實現基類的一個純虛函數,則該派生類是一個抽象類

            (14)下列運算符不能重載為友元函數的是

            A)=  ()  [ ]  ->                      B)+  -  ++  -- 

            C)>  <  >=  <=                         D)+=  -=  *=  /=

            (15)關于在調用模板函數時模板實參的使用,下列表述正確的是

            A)對于虛擬類型參數所對應的模板實參,如果能從模板函數的實參中獲得相同的信息,則都可以省略

            B)對于虛擬類型參數所對應的模板實參,如果它們是參數表中的最后的若干個參數,則都可以省略

            C)對于虛擬類型參數所對應的模板實參,若能夠省略則必須省略

            D)對于常規參數所對應的模板實參,任何情況下都不能省略

            (16)下列關于輸入流類成員函數getline()的描述中,錯誤的是

            A)該函數是用來讀取鍵盤輸入的字符串的

            B)該函數讀取的字符串長度是受限制的

            C)該函數讀取字符串時,遇到終止符便停止

            D)該函數讀取字符串時,可以包含空格

            (17)下列符號中,正確的C++標識符是

            A)enum B)2b   C)foo-9    D)_32

            (18)下列語句中,錯誤的是

            A)const int buffer=256;    B)const double *point;

            C)int const buffer=256;    D)double * const point;

            (19)if語句的語法格式可描述為:

            格式1:if(<條件>) <語句>

            或

            格式2:if(<條件>) <語句1> else <語句2>

            關于上面的語法格式,下列表述中錯誤的是

            A)<條件>部分可以是一個if語句,例如if(if(a==0) …) …

            B)<語句>部分可以是一個if語句,例如if(…) if(…) …

            C)如果在<條件>前加上邏輯非運算符!并交換 <語句1> 和 <語句2> 的位置,語句功能不變

            D)<語句>部分可以是一個循環語句,例如if(…) while(…) …

            (20)有如下說明

            int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;

            則數值為9的表達式是

            A)*p+9 B)*(p+8)   C)*p+=9            D)p+8

            (21)若有下面的函數調用:

            fun(a+b, 3, max(n-1, b))

            則fun的實參個數是

            A)3    B)4    C)5        D)6

            (22)以下關鍵字不能用來聲明類的訪問權限的是

            A)public   B)static   C)protected        D)private

            (23)在公有繼承的情況下,允許派生類直接訪問的基類成員包括

            A)公有成員     B)公有成員和保護成員  

            C)公有成員、保護成員和私有成員 D)保護成員

            (24)關于運算符重載,下列表述中正確的是

            A)C++已有的任何運算符都可以重載

            B)運算符函數的返回類型不能聲明為基本數據類型

            C)在類型轉換符函數的定義中不需要聲明返回類型

            D)可以通過運算符重載來創建C++中原來沒有的運算符

            (25)關于關鍵字class和typename,下列表述中正確的是

            A)程序中的typename都可以替換為class

            B)程序中的class都可以替換為typename  

            C)在模板形參表中只能用typename來聲明參數的類型

            D)在模板形參表中只能用class或typename來聲明參數的類型

            (26)有如下程序

            #include

            #include

            using namespace std;

            int main( ){

            cout<    cout<<12.345<<___________<<34.567;

            return 0;

            }

            若程序的輸出是:

            **12.345**34.567

            則程序中下劃線處遺漏的操作符是     

            A)setprecision(3)  B)fixed    C)setfill('*')     D)setw(8)

            (27)有如下程序

            #include

            #include

            using namespace std;

            class MyClass{

            public:

            MyClass( ){ cout<<'A'; }

            MyClass(char c){ cout<    ~MyClass( ){ cout<<'B'; }

            };

            int main( ){

            MyClass p1,*p2;

            p2=new MyClass('X');

            delete p2 ;

            return 0;

            }

            執行這個程序屏幕上將顯示輸出

            A)ABX         B)ABXB         C)AXB              D)AXBB

            (28)有如下程序

            #include

            using namespace std;

            int i=1;

            class Fun{

            public:

            static int i;

            int value( ){ return i-1;}

            int value( )const{ return i+1;}

            };

            int Fun::i=2;

            int main( ){

            int i=3;

            Fun fun1;

            const Fun fun2;

            ____________

            return 0;

            }

            若程序的輸出結果是:

            123

            則程序中下劃線處遺漏的語句是

            A)cout<

            B)cout<

            C)cout<

            D)cout<

            (29)有如下程序:

            #include

            using namespace std;

            class Obj{

            static int i;

            public:

            Obj( ){ i++; }

            ~Obj( ){ i--; }

            static int getVal( ){ return i;}

            };

            int Obj::i=0;

            void f(){Obj ob2; cout<int main( ){

            Obj ob1;

            f( );

            Obj *ob3=new Obj; cout<getVal( );

            delete ob3; cout<    return 0;

            }

            程序的輸出結果是

            A)232  B)231  C)222  D)221

            (30)有如下程序

            #include

            using namespace std;

            class Base {

            protected:

            Base( ){ cout<<'A'; }

            Base(char c){ cout<};

            class Derived: public Base{

            public:

            Derived( char c ){ cout<};

            int main( ){

            Derived d1('B');

            return 0;

            }

            執行這個程序屏幕上將顯示輸出

            A)B    B)BA   C)AB       D)BB

            (31)有如下類定義:

            class MyBase{

            int k;

            public:

            MyBase(int n=0):k(n){ }

            int value( )const{ return k;}

            };

            class MyDerived: MyBase{

            int j;

            public:

            MyDerived(int i): j(i) {}

            int getK( )const{ return k; }

            int getJ( )const{ return j; }

            };

            編譯時發現有一處語法錯誤,對這個錯誤最準確的描述是

            A)函數getK試圖訪問基類的私有成員變量k

            B) 在類MyDerived的定義中,基類名MyBase前缺少關鍵字public、protected或private

            C)類MyDerived 缺少一個無參的構造函數  

            D)類MyDerived的構造函數沒有對基類數據成員k進行初始化

            (32)在一個派生類對象結束其生命周期時

            A)先調用派生類的析構函數后調用基類的析構函數      

            B)先調用基類的析構函數后調用派生類的析構函數  

            C)如果基類沒有定義析構函數,則只調用派生類的析構函數  

            D)如果派生類沒有定義析構函數,則只調用基類的析構函數

            (33)有如下的運算符重載函數定義:

            double operator +(int i, int k){ return double(i+k); }

            但定義有錯誤,對這個錯誤最準確的描述是

            A)+ 只能作為成員函數重載,而這里的 + 是作為非成員函數重載的

            B)兩個int型參數的和也應該是int型,而這里將 + 的返回類型聲明為double  C)沒有將運算符重載函數聲明為某個類的友元

            D)C++已經提供了求兩個int型數據之和的運算符 +,不能再定義同樣的運算符

            (34)語句ofstream f("SALARY.DAT", ios_base::app); 的功能是建立流對象f,并試圖打開文件SALARY.DAT與f關聯,而且

            A)若文件存在,將其置為空文件;若文件不存在,打開失敗

            B)若文件存在,將文件指針定位于文件尾;若文件不存在,建立一個新文件

            C)若文件存在,將文件指針定位于文件首;若文件不存在,打開失敗

            D)若文件存在,打開失敗;若文件不存在,建立一個新文件

            (35)有如下程序

            #include

            using namespace std;

            class A{

            public:

            virtual void func1( ){ cout<<"A1"; }

            void func2( ){ cout<<"A2"; }

            };

            class B:public A{

            public:

            void func1( ){ cout<<"B1"; }

            void func2( ){ cout<<"B2"; }

            };

            int main( ){

            A *p=new B;

            p->func1( );

            p->func2( );

            return 0;

            }

            運行此程序,屏幕上將顯示輸出

            A) B1B2     B) A1A2 C) B1A2 D) A1B2

            二、填空題(每空2分,共30分)

            請將每一個空的正確答案寫在答題卡【1】~【15】序號的橫線上,答在試卷上不得分。

            (1)下列軟件系統結構圖

            的寬度為  【1】  。

            (2)  【2】  的任務是診斷和改正程序中的錯誤。

            (3)一個關系表的行稱為   【3】   。

            (4)按“先進后出”原則組織數據的數據結構是   【4】    。

            (5)數據結構分為線性結構和非線性結構,帶鏈的隊列屬于  【5】    。

            (6)若有定義語句:int* a, b;,則變量b的數據類型是   【6】  。

            (7)已知數組a中的元素個數為n,下列語句的作用是將下標為i的元素移動到下標為

            i-1的單元,其中1≤i<n。例如,當n=4,a中原有數據為1,2,3,4時,則移動后a中元素變為2,3,4,4。請將語句補充完整:

            for (int i=0; i  a[i] = a[  【7】  ];

            (8)已知遞歸函數f的定義如下:

            int f(int n)

            {

            if (n <= 1) return 1;  //遞歸結束情況

            else return n * f(n-2); //遞歸}

            則函數調用語句f(5)的返回值是  【8】  。

            (9)創建對象數組時,對數組的每一個元素都將調用一次構造函數,如果沒有顯式給出數組元素的初值,則調用缺省構造函數。下列程序涉及到對象數組的創建和單個對象的創建,其輸出結果是  【9】  。

            #include

            using namespace std;

            class Foo {

            public:

            Foo(int x) { cout << 'A'; }

            Foo() {}

            };

            int main()

            {

            Foo f[3], g(3);

            return 0;

            }

            (10)已知下列程序的輸出結果是42,請將畫線處缺失的部分補充完整。

            #include

            using namespace std;

            class Foo {

            int value;

            public:

            Foo( ) : value(0) {}

            void setValue(int value)

            {  【10】   = value;  //給Foo的數據成員value賦值}

            void print( ) { cout << value; }

            };

            int main( )

            {

            Foo f;

            f.setValue(42);

            f.print();

            return 0;

            }

            (11)如果不使用多態機制,那么通過基類的指針雖然可以指向派生類對象,但是只能訪問從基類繼承的成員。下列程序沒有使用多態機制,其輸出結果是  【11】  。

            #include

            using namespace std;

            class Base {

            public:

            void print ( ) { cout << 'B'; }};

            class Derived : public Base {

            public:

            void print ( ) { cout << 'D'; }};

            int main( )

            {

            Derived* pd = new Derived( );

            Base* pb = pd;

            pb->print( );

            pd->print( );

            delete pd;

            return 0;

            }

            (12)在聲明派生類時,如果不顯式地給出繼承方式,缺省的類繼承方式是私有繼承private。已知有如下類定義:

            class Base {

            protected:

            void fun( ) {}

            };

            class Derived : Base { };

            則Base類中的成員函數fun(),在Derived類中的訪問權限是  【12】  (注意:要求填寫private、protected或public中的一項)。

            (13)在MyClass類的定義中,對賦值運算符=進行重載。請將畫線處缺失的部分補充完整。

            【13】   MyClass::operator=(const MyClass& rhs)

            {

            if (this == &rhs) return *this;

            value = rhs.value;

            return *this;

            }

            (14)插入排序算法的主要思想是:每次從未排序序列中取出一個數據,插入到已排序序列中的正確位置。InsertSort類的成員函數sort()實現了插入排序算法。請將畫線處缺失的部分補充完整。

            class InsertSort{

            public:

            InsertSort(int* a0, int n0) :a(a0), n(n0) {} //參數a0是某數組首地址,n是數組元素個數

            void sort( )

            {//此函數假設已排序序列初始化狀態只包含a[0],未排序序列初始為a[1]...a[n-1]

            for (int i=1; i

            int t=a[i];

            int j;

            for (  【14】  ; j>0; --j){

            if (t>=a[j-1]) break;

            a[j]=a[j-1];}

            a[j]=t;}}

            protected:

            int *a, n; //指針a用于存放數組首地址,n用于存放數組元素個數

            };

            (15)下列程序的輸出結果是  【15】  。

            #include

            using namespace std;

            class A {

            int a;

            public: 

            A():a(9){}

            virtual void print() const { cout<

            };

            class B : public A {

            char b;

            public:

            B( ){b='S';}

            void print( ) const { cout <

            };

            void show(A &x){ x.print();}

            int main()

            {   A d1,*p;

            B d2;

            p=&d2;

            d1.print();

            d2.print();

            p->print();

            show(d1);

            show(d2);

            return 0;}

        丰满农村熟女大码