自考C++程式設計試題2010年1月
全國2010年1月自考C++程式設計試題
課程程式碼:04737
一、單項選擇題(本大題共20小題,每小題1分,共20分)
在每小題列出的四個備選項中只有一個是符合題目要求的,請將其程式碼填寫在題後的括號內。錯選、多選或未選均無分。
1.在C++中,標頭檔案副檔名為( B )
A..cpp B..h
C..1ib D..obj
2.下列符號中,不屬於分隔符的是( B )
A., B./
C.; D.{}
3.可替換#define PI 3.1415926的語句是( B )
A.float PI 3.1415926; B.const float PI=3.1415926;
C.const PI(3.1415926); D.const 3.1415926;
4.布林型別識別符號是( D )
A.void B.short
C.long D.bool
5.下列不是C++語言的基本資料型別的是( D )
A.字元型別 B.整數型別
C.邏輯型別 D.列舉型別
6.C++允許在結構中定義函式,這些函式稱為( D )
A.靜態函式 B.建構函式
C.解構函式 D.成員函式
7.設函式void inc(int)將形參加1,如有整型變數int i=10;則執行inc(i);後,i的值為( B )
A.9 B.10
C.11 D.未知
8.下列哪種預設引數的宣告是不正確的( C )
A. int max(int a,int b,int c,int d=0);
B. int max(int a,int b,int c=0,int d=0);
C. int max(int a=0,int b,int c=0,int d=0);
D. int max(int a,int b=0,int c=0,int d=0);
9.設int &max(int &,int &)返回兩引數中較大者,如有兩整型變數int a=10;int b=15;在執行max(a,b)++後,a,b值分別為( C )
A.10,15 B.11,15
C.10,16 D.1l,16
10.包含哪種語句的函式不能宣告為行內函數( A )
A.迴圈 B.變數自增自減
C.if...else… D.變數宣告
11.定義函式模板中使用的引數型別識別符號需使用下列哪組符號括起來( A )
A.<> B.“”
C.() D.{}
12.一個類擁有多個建構函式,則這些建構函式間為( A )
A.過載關係 B.重複關係
C.拷貝關係 D.無關係
13.對於拷貝建構函式point::point(point& p),下列說明正確的是( C )
A.該函式只能訪問P的私有成員 B.該函式不能訪問P的公有成員
C.該函式可以訪問P的私有和公有成員 D.該函式不能訪問P的成員
14.使用delete[]刪除物件陣列時,描述正確的是( A )
A.陣列中各元素都呼叫解構函式 B.陣列中各元素都呼叫建構函式
C.不呼叫解構函式 D.只有首元素呼叫解構函式
Point *p=new Point[5];=>B
15.下列哪個指令屬於條件編譯指令( A )
A. #elif B. #error
C. #pragma D. #include
16.設類Test中存在成員static int x,則下列哪種初始化方式是正確的( C )
A.Test::int x=25; B.int x=25;
C.int Test::x=25; D.int Test x=25;
17.下列關於友元的描述錯誤的是( A )
A.成員函式不可作友元 B.類可以作友元
C.普通函式可以作友元 D.靜態函式可以作友元
18.在繼承中,派生類擁有的基類個數為( D )
A.0個 B.1個
C.多個 D.至少1個
19.基類中的protected成員,通過public派生,其在派生類中的可見性為( C )
A.不可訪問 B.private
C.protected D.public
20.下列哪個不是面向物件的關鍵要素( B )
A.抽象性 B.結構性
C.封裝性 D.多型性
二、填空題(本大題共20小題,每小題1分,共20分)
請在每小題的空格中填上正確答案。錯填、不填均無分。
21.在STL庫中用於實現陣列內容反轉的函式是__reverse____。P14
22.若要使用C++標準類庫,需要指定相應的名稱空間,所用的語句是___using namespace std;___。
23.C++語言中的整數常量有4種描述型別:十進位制常量、長整型常量、八進位制常量和__十六進位制常量____。
24.宣告一個名為a的整型引用變數所使用的語句是___int &a;___。類外?
25.過載的運算子仍保留原有的優先順序、_結合性_____和語法結構。
26.執行程式碼
int b=100;
cout<<hex<<b:
程式的輸出結果是__64____。
27.帶有純虛擬函式的類稱為抽象類,它只能作為___基類___來使用。
28.使用__物件引用____作為函式引數,實參物件和形參物件代表同一物件,改變形參物件的值就是改變實參物件的值。
29.UML中物件之間的靜態關係是通過物件屬性之間的連線反映的,稱之為__例項連線____。
30.如果一個模板宣告列出多個引數,則多個引數之間必須使用逗號隔開,每個引數都必須重複使用關鍵字__class____。(或typename)
31.C++類的建構函式名與___類___名稱一樣,且沒有返回值。
32.C++規定,當一個成員函式被呼叫時,系統自動向它傳遞一個隱含的引數,該引數是一個指向呼叫該函式的物件的指標,該指標被稱為__this____指標。
33.宣告一個常成員函式Fun,其返回型別為char,第一個引數型別為int,第二個引數型別為double,函式Fun的宣告原型是__char Fun(int,double)const;____。
34.C++語言中的“聚合”隱含了兩種實現方式,一種是__獨立的定義____,另一種是用一個類的物件作為一種廣義的資料型別來定義整體物件的一個屬性。
35.簡單成員函式是指宣告中不含const、_volatile_____和static關鍵字的函式。
36.在派生類中繼承的基類成員的初始化,需要由派生類的建構函式呼叫基類的__建構函式____來完成。
37.在C++中,利用向量類模板定義一個具有20個int的向量,其所有元素被置為1,實現此操作的語句是__vector <int> v(20,1);____。
38.vector類中用於獲取無需再次分配記憶體就能容納的物件個數的方法是__capacity()____。P156
39.動態聯編是程式執行到需要的語句處才動態確定的,這稱為___執行時___多型性。(注意:動態聯編)
40.C++過載“=”運算子的函式名是__operator=____。
三、改錯題(本大題共5小題,每小題4分,共20分)
下面的每題中有一處錯誤,請用下橫線標出錯誤所在行並給出修改意見
41.#include<iostream.h>
#define PI 3.14; --------多個分號
void main()
{
double i;
int r;
cout<<″輸入圓形半徑:″;
cin>>r;
i=2 * PI * r;
cout<<″圓形周長=″<<i<<endl;
i=PI * r * r;
cout<<″圓形面積=″<<i<<endl;
}
42.#include <iostream.h>
class A
{
private:
int x,y;
public:
A(int a=0,b=1); A(int a=0,int b=1);
void Show();
};
A::A(int a,int b)
{
x=a;
y=b;
}
void A::Show()
{
cout<<″x=″<<x<<endl;
cout<<″y=″<<y<<endl;
}
43.#include <iostream.h>
class A
{
unsigned char var;
public:
A(unsigned char x){
var=x:
}
void print(){
cout<<″var=″<<var;
}
};
void main()
{
A a(″x″) ; A a(‘x’) ;
a. print ();
}
44. #include < iostream. h>
class Class
{
public:
void print(int a,int b) {
cout< < ″int:″ < < a < < endl;
cout < < ″int:″ < < b < < endl;
}
void print(char * a,char * b) {
cout< < ″string:″ < < a < < endl;
cout < <″ string:″ < < b < < endl;
}
void print(char * a,unsigned int b){
cout < < ″string:″ < < a < < endl;
cout < < ″int:″ < < b < < endl;
}
};
void main()
{
Class cls;
cls. print(10,20); 1
cls. print(′c′,1);1
cls. print(′x′,′y′);1
cls. print(″Hello!″,0); 呼叫不明確,2,3 ,0代表空字元
}
45. #include < iostream. h >
class Class
{
private:
int val;
public:
void func( int a)
{
val = a;
}
};
void main()
{
Class * cls ;
cls - > func(10) ;--- cls - > func(10)空指標不能用來呼叫
}
四、完成程式題(本大題共5小題,每題4分,共20分)
46.將下面程式補充完整,使程式計算100以內所有可被7整除的自然數之和。
#include <iostream.h>
void main()
{
int x=1;
int sum=0;
while(true)
{
if(x>100){
__break____;
}
if(__x%7==0____){
sum=sum+x;
}
x++;
}
cout<<sum<<endl;
}
47.將下面程式補充完整,使程式執行結果為9。
#include <iostream.h>
class Class{
public:
_Class (int a)_____{
x=a;
}
__int get()____{
return x * x;
}
private:
int x;
};
void main()
{
Class a(3);
cout<<a.get()<<endl;
}
48.將下面程式補充完整,使程式正確的初始化私有變數var及釋放資源。
class Class
{
private:
int * var;
public:
Class(int num);
~Class();
};
Class::Class(int num)
{
__var=new int(num)___動態分配記憶體__;
}
Class::~Class()
{
__delet var_____;
}
49.將下面程式補充完整,使程式的輸出結果為:
ClassA::Print
ClassB::Print
程式如下:
#include<iostream.h>
class Base
{
public:
virtual void Print() const {
cout<<″Base::Print″<<endl;
}
};
class ClassA:public Base
{
public:
void Print()const{cout<<″ClassA::Print″<<endl;}
};
class ClassB:public Base
{
public:
void Print()const{cout<<″ClassB::Print″<<endl;}
};
void Print(__Base& b____)
{
_b.Print()_____;動態連編呼叫派生類的
}
void main()
{
ClassA a;
ClassB b;
Print(a);ClassA::Print
Print(b);ClassB::Print
}
50.下列程式的執行結果如下:
x=22,y=22
根據結果將程式補充完整。
#include <iostream.h>
template <_class T1,class T2_____>
void f(_T1 x,T2 y_____)
{
if(sizeof(T1)>sizeof(T2))
x=(T1)y;
else
y=(T2)x;
}
void main(){
double x=134.2;
int y=22;
f(x,y);
cout<<″x=″<<x<<″,y=″<<y;
}
五、程式分析題(本大題共2小題,每小題5分,共10分)
請給出下面程式的輸出結果
51. #include < iostream. h >
class Class
{
public:
static int var;
Class()
{
var+ +;
}
};
int Class::var = 0;
void main()
{
cout < < ″Class::var =″ < < Class: : var < < endl;
Class cl ;
cout < <″cl. var=″ < <cl. var < <endl;
Class c2, c3 ;
cout < < ″c2. var =″ < < c2. var < < endl;
}
Class: : var=0
cl. var=1
c2. var =3
52. #include < iostream. h >
class A
{
public:
A();
void Show() ;
~A();
private:
static int c;
};
int A::c =0;
A::A()
{
cout < < ″constructor.″ < < endl;
c+ =10;
}
void A: :Show()
{
cout< < ″c=″ < <c< <endl;
}
A::~A()
{
cout < < ″destructor. ″ < < endl;
}
void main()
{
A a,b;
a. Show();
b. Show();
}
constructor.
constructor.
c=20
c=20
destructor.
destructor.
六、程式設計題(本大題共l小題,共10分)
53.利用LOCATION類,使用繼承定義圓類CIRCLE,圓由圓心和半徑構成。提供得到圓心座標和半徑的成員函式、以及計算圓的周長和麵積的成員函式。在主程式中建立兩個圓A和B,圓心座標分別為(0,3)、(3,7),按如下格式輸出兩個圓的圓心座標、周長和麵積,並計算和輸出兩個圓的圓心之間的距離。
A:(xl,y1,r1),Girth=g1,Area=a1
B:(x2,y2,r2),Girth=g2,Area=a2
A(xl,y1),B(x2,y2),Distance=d
定義LOCATION類,該類沒有“繼承”等現象。注意二維座標點之間的距離公式。
class LOCATION{
double x,y;
public: virtual double getx()const{return x;};
virtual double gety()const{return y;};
virtual double dist(LOCATION &s)const;
LOCATION(double x,double y):x(x),y(y){};};
double LOCATION::dist(LOCATION &s)const{
double xd=s.x — x,yd=s.y — y;
return sqrt(xd*xd+yd*yd);}
void main()
{
LOCATION A(0,3) B(3,7);
cout<<”A:(”A.getx()<<”,”<<A.gety()
}