2006上半年全國計算機二級C++筆試真題
一、選擇題((1)~(35)每小題2分,共70分) 下列各題A)、B)、C)、D)四個選項中,只有一個選項是正確的,請將正確選項涂寫在答題卡相應位置上,答在試卷上不得分。
(1)下列選項不屬于結構化程序設計方法的是
A.自頂向下
B.逐步求精
C.模塊化
D.可復用
(2)兩個或兩個以上模塊之間關聯的緊密程度稱為
A.耦合度
B.內聚度
C.復雜度
D.數據傳輸特性
(3)下列敘述中正確的是
A.軟件測試應該由程序開發者來完成
B.程序經調試后一般不需要再測試
C.軟件維護只包括對程序代碼的維護
D.以上三種說法都不對
(4)按照“后進先出”原則組織數據的數據結構是
A.隊列
B.棧
C.雙向鏈表
D.二叉樹
(5)下列敘述中正確的是
A.線性鏈表是線性表的鏈式存儲結構
B.棧與隊列是非線性結構
C.雙向鏈表是非線性結構
D.只有根結點的二叉樹是線性結構
(6)對如下二叉樹,進行后序遍歷的結果為
A.ABCDEF
B.DBEAFC
C.ABDECF
D.DEBFCA
(7)在深度為7的滿二叉樹中,葉子結點的個數為
A.32
B.31
C.64
D.63
(8)“商品”與“顧客”兩個實體集之間的聯系一般是
A.一對一
B.一對多
C.多對一
D.多對多
(9)在E-R圖中,用來表示實體的圖形是
A.矩形
B.橢圓形
C.菱形
D.三角形
(10)數據庫DB、數據庫系統DBS、數據庫管理系統DBMS之間的關系是
A.DB包含DBS和DBMS
B.DBMS包含DB和DBS
C.DBS包含DB和DBMS
D.沒有任何關系
(11)下列關于C++函數的說明中,正確的是
A.內聯函數就是定義在另一個函數體內部的函數
B.函數體的最后一條語句必須是return語句
C.標準C++要求在調用一個函數之前,必須先聲明其原型
D.編譯器會根據函數的返回值類型和參數表來區分函數的不同重載形式
(12)由于常對象不能被更新,因此
A.通過常對象只能調用它的常成員函數
B.通過常對象只能調用靜態成員函數
C.常對象的成員都是常成員
D.通過常對象可以調用任何不改變對象值的成員函數
(13)下列關于虛函數的說明中,正確的是
A.從虛基類繼承的函數都是虛函數
B.虛函數不得是靜態成員函數
C.只能通過指針或引用調用虛函數
D.抽象類中的成員函數都是虛函數
(14)運算符重載是對已有的運算符賦予多重含義,因此
A.可以對基本類型(如int類型)的數據,重新定義“+”運算符的含義
B.可以改變一個已有運算符的優先級和操作數個數
C.只能重載C++中已經有的運算符,不能定義新運算符
D.C++中已經有的所有運算符都可以重載
(15)模板對類型的參數化提供了很好的支持,因此
A.類模板的主要作用是生成抽象類
B.類模板實例化時,編譯器將根據給出的模板實參生成一個類
C.在類模板中的數據成員都具有同樣類型
D.類模板中的成員函數都沒有返回值
(16)下列關于C++流的說明中,正確的是
A.與鍵盤、屏幕、打印機和通信端口的交互都可以通過流類來實現
B.從流中獲取數據的操作稱為插入操作,向流中添加數據的操作稱為提取操作
C.cin是一個預定義的輸入流類
D.輸出流有一個名為open的成員函數,其作用是生成一個新的流對象
(17)下列符號中可以用作C++標識符的是
A._radius
B.foo~bar
C.else
D.3room
(18)下列語句中,錯誤的是
A.const int buffer=256;
B.const int temp;
C.const double *point;
D.const double *rt =new double(5.5);
(19)有如下程序:
int x=3;
do{
x -= 2;
cout<
}while(!(--x));
執行這個程序的輸出結果是
A. 1
B.3 0
C. l-2
D.死循環
(20)有如下程序:
#include
using namespace std;
int main()
{
int *p;
*p = 9;
cout<<"The value at p:"<<*p;
return 0;
}
編譯運行程序將出現的情況是
A.夠編譯時出現語法錯誤,不能生成可執行文件
B.運行時一定輸出:The value at p: 9
C.運行時一定輸出:The value at p: *9
D.運行時有可能出錯
(21)有如下程序:
#include
using namespace std;
int main()
{
void function(double val);
double val;
function(val);
cout<
return 0;
}
void function(double val)
{
val = 3;
}
編譯運行這個程序將出現的情況是
A.編譯出錯,無法運行
B.輸出:3
C.輸出:3.0
D.輸出一個不確定的數
(22)有如下類定義:
class AA
{
int a;
public:
int getRef() const{return &a;} //①
int getvalue() const{return a;} //②
void set(int n) const{a=n;} //③
friend void show(AA aa) const {cout< //④
};
其中的四個函數定義中正確的是
A.①
B.②
C.③
D.④
(23)有如下程序:
#include +
using namespace std;
#include
using namespace std;
class Base
{
public:
void fun(){cout<<"Base::fun"<
};
class Derived:public Base
{
public:
void fun()
{
cout<<"Derived::fun"<
}
};
int main()
{
Derived d;
d.fun();
return 0;
}
已知其執行后的輸出結果為:
Base::fun
Derived::fun
則程序中下劃線處應填入的語句是
A.Base.fun();
B.Base::fun()
C.Base->fun()
D.fun();
(24)下面是重載為非成員函數的運算符函數原型,其中錯誤的是
A.Fraction operator + (Fraction, Fraction);
B.Fraction operator - (Fraction);
C.Fraction& operator = (Fraction&, Fraction);
D.Fraction& operator += (Fraction&, Fraction);
(25)有如下函數模板:
template
T cast(U u){return u;}
其功能是將U類型數據轉換為T類型數據。已知i為int型變量,下列對模板函數cast的調用中正確的是
A.cast(i);
B.cast<>(i);
C.cast(i);
D.cast (i);
(26)若磁盤上已存在某個文本文件,其全路徑文件名為d:\ncre\test.txt,下列語句中不 能打開該文件的是
A.ifstream file("d:\ncre\test.txt");
B.ifstream file("d:\ncre\test.txt");
C.ifstream file; file.open("d:\ncre\test.txt");
D.ifstream* pFile=new ifstream("d:\ncre\test.txt");
(27)有如下類定義:
class Foo
{
public:
Foo(int v):value(v){} //①
~Foo(){} //②
private:
Foo(){} //③
int value = 0; //④
};
其中存在語法錯誤的行是
A.①
B.②
C.③
D.④
(28)有如下類定義:
class Point
{
int x_, y_;
public:
Point():x_(0), y_(0){}
Point(int x, int y = 0):x_(x),y_(y){}
};
若執行語句
Point a(2), b[3], *c[4];
則Point類的構造函數被調用的次數是
A.2次
B.3次
C.4次
D.5次
(29)有如下類定義:
class Test
{
public:
Test(){ a = 0; c = 0;} //①
int f(int a)const{this->a = a;} //②
static int g(){return a;} //③
void h(int
B.{Test::b = b;}; //④
private:
int a;
static int b;
const int c;
};
int Test::b = 0;
在標注號碼的行中,能被正確編譯的是
A.①
B.②
C.③
D.④
(30)有如下程序:
#include
using namespace std;
class A
{
public:
A(){cout<<"A";}
~A(){cout<<"~A";}
};
class B:public A
{
A* p;
public:
B(){cout<<"B"; p = new A();}
~B(){cout<<"~B"; delete p;}
};
int main()
{
B obj;
return 0;
}
執行這個程序的輸出結果是
A.BAA~A~B~A
B.ABA~B~A~A
C.BAA~B~A~A
D.ABA~A~B~A
(31)有如下程序:
#include
using namespace std;
class Base
{
private:
void funl() const{cout<<"funl";}
protected:
void fun2() const{cout<<"fun2";}
public:
void fun3() const{cout<<"fun3";}
};
class Derived:protected Base
{
public:
void fun4() const{cout<<"fun4";}
};
int main()
{
Derived obj;
obj.funl(); //①
obj.fun2(); //②
obj.fun3(); //③
obj.fun4(); //④
return 0;
}
其中有語法錯誤的語句是
A.①②③④
B.①②③
C.②③④
D.①④
(32)有如下程序:
#include
using namespace std;
class Base
{
public:
void funl(){cout<<"Base\n";}
virtual void fun2(){cout<<"Base\n";}
};
class Derived:public Base
{
public:
void funl(){cout<<"Derived\n";}
void fun2(){cout<<"Derived\n";}
};
void f(Base &
B.{b.funl();b.fun2();}&, lt;, /P>
int main()
{
Derived obj;
f(obj);
return 0;
}
執行這個程序的輸出結果是
A.Base
B.Base
C.Derived
D.Derived
Base Derived Base Derived
(33)有如下程序:
#include
using namespace std;
class Complex
{
double re, im;
public:
Complex(double r, double i):re(r), im(i){}
double real() const{return re;}
double image() const{return im;}
Complex& operator +=(Complex a)
{
re += a.re;
im += a.im;
return *this;
}
};
ostream &operator<<(ostream& s,const Complex& z)
{
return s<<'('<
}
int main()
{
Complex x(1, -2), y(2, 3);
cout<<(x += y)<
return 0;
}
執行這個程序的輸出結果是
A.(1, -2)
B.(2, 3)
C.(3, 5)
D.(3, 1)
(34)有如下程序:
#include
#include
using namespace std;
int main()
{
cout.fill('*');
cout<
return 0;
}
執行這個程序的輸出結果是
A.123*OK
B.123*OK**
C.*123OK
D.*123**OK
(35)有如下類聲明:
class SAMPLE
{
int n;
public:
SAMPLE (int i = 0): n(i){}
void setvalue(int n0);
};
下列關于setvalue成員函數的實現中,正確的是
A.SAMPLE::setvalue(int n0){n = n0;}
B.void SAMPLE::setvalue(int n0){n = n0;}
C.void setvalue(int n0){n = n0;}
D.setvalue(int n0){n = n0;}
二、填空題(每空2分,共30分)
請將每一個空的正確答案寫在答題卡【1】~【15】序號的橫線上,答在試卷上不得分。
(1)對長度為10的線性表進行冒泡排序,最壞情況下需要比較的次數為 【1】 。
(2)在面向對象方法中, 【2】 描述的是具有相似屬性與操作的一組對象。
(3)在關系模型中,把數據看成是二維表,每一個二維表稱為一個 【3】 。
(4)程序測試分為靜態分析和動態測試。其中 【4】 是指不執行程序,而只是對程序 文本進行檢查,通過閱讀和討論,分析和發現程序中的錯誤。
(5)數據獨立性分為邏輯獨立性與物理獨立性。當數據的存儲結構改變時,其邏輯結構 可以不變,因此,基于邏輯結構的應用程序不必修改,稱為 【5】 。
(6)有一種只在循環語句或switch語句中使用的流程控制語句,表示該語句的關鍵字是 【6】 。
(7)程序中有如下語句
for(int i = 0; i<5; i++)cout<<*(p + i)<<",";
能夠依次輸出int型一維數組DATA的前5個元素。由此可知,變量p的定義及初始 化語句是 【7】 。
(8)若下面程序運行時輸出結果為
1, A, 10.1
2, B, 3.5
請將程序補充完整。,
#include
using namespace std;
int main()
{
void test(int, char,double 【8】 );
test(1,'A',10.1);
test(2,'B');
return 0;
}
void test(int a, char b, double
C.
{
cout<
}
(9)有如下類聲明:
class MyClass
{
int i;
private: int j;
protected:int k;
public:int m, n;
};
其中,私有成員的數量為 【9】 。
(10)有如下程序:
#include
using namespace std;
class Con
{
char ID;
public:
Con():ID('A'){cout<<1;}
Con(char I
D.:ID(I
D.{cout<<2;}
Con(Con&
C.:ID(c.getID()){cout<<3;}
char getID() const{return ID;}
};
void show(Con
C.{cout<
int main()
{
Con c1;
show(c1);
Con c2('B');
show(c2);
return 0;
}
執行上面程序的輸出是 【10】 。
(11)有如下程序:
#include
using namespace std;
class ONE
{
public:
virtual void f(){cout<<"l";}
};
class TWO:public ONE
{
public:
TWO(){cout<<"2";}
};
class THREE:public TWO
{
public:
virtual void f(){TWO::f(); cout<<"3";}
};
int main()
{
ONE aa, *p;
TWO bb;
THREE cc;
p = &cc;
p->f();
return 0;
}
執行上面程序的輸出是 【11】 。
(12)有如下程序:
#include
using namespace std;
class PARENT
{
public:
PARENT(){cout<<"PARENT";}
};
class SON:public PARENT
{
public:
SON(){cout<<"SON";}
};
int main()
{
SON son;
PARENT *p;
p = &son;
return 0;
}
執行上面程序的輸出是 【12】 。
(13)若以非成員函數形式,為類Bounce重載“!”運算符,其操作結果為一bool型數據,則該運算符重載函數的原型是 【13】 。
(14)下面是復數類complex的定義,其中重載的運算符“+”的功能是返回一個新的復 數對象,其實部等于兩個操作對象實部之和,其虛部等于兩個操作對象虛部之和;請補充完整:
class complex
{
double real; //實部
double imag; //虛部
public:
complex(double r,double i):real(r),imag(i){}
complex operator+(complex a)
{
return complex( 【14】 );
}
};
(15)已知一個函數模板定義為
template T1, typename T2>
T1 FUN(T2 n) {return n * 5.0;}
若要求以int型數據7為函數實參調用該模板函數,并返回一個double型數據,則該 調用應表示為 【15】 。
【上半年全國計算機二級C++筆試真題】相關文章:
全國計算機等級考試二級C++筆試真題10-11
3月全國計算機等級考試二級C++筆試真題10-11
上半年全國計算機二級C++考試真題03-21
全國計算機二級考試C++真題09-20