1[單選題]下列關(guān)于面向?qū)ο蟾拍畹拿枋鲋?,錯誤的是( )。
A.面向?qū)ο蠓椒ū让嫦蜻^程方法更加先進
B.面向?qū)ο蠓椒ㄖ惺褂昧艘恍┟嫦蜻^程方法中沒有的概念
C.面向?qū)ο蠓椒ㄌ娲私Y(jié)構(gòu)化程序設(shè)計方法
D.面向?qū)ο蟪绦蛟O(shè)計方法要使用面向?qū)ο蟮某绦蛟O(shè)計語言
參考答案:C
2[簡答題] 有以下兩個程序,分析它們的執(zhí)行結(jié)果有什么不同。
程序1:
#include
class Point
{
int x,y;
public:
Point(){x=y=0;}
Point(int i,int j){x=i;y=j;}
Point operator+(Point);
void disp() ( cout<<”(”<
}
Point Point::operator+(Point P)
{
this->x+=P.x; this->y+=p.y;
return *this;
}
void main()
{
Point pl(2,3),p2(3,4),p3;
cout<<”p1:”;p1.disp();
cout<<”p2:”;p2.disp();
p3=pl+p2;
cout<<”執(zhí)行p3=p1+p2后”<
cout<<”p1:”,p1.disp();
cout<<”p2:”;p2.disp();
cout<<”p3:”;p3.disp();
}
程序2:
#include
class Point{
int x,Y;
public:
Point(){x=y=O;}
Point(int i,int j){x=i,y=j;}
Point operator+(Point);
void disp f){cout<< ”(”<
}
Point Point::operator+(Point P)
{
Point s;
s.x=x+p.x; s.y=y+p.y;
return s;
}
void main()
{
Point pl(2,3),p2(3,4),p3;
cout<<”p1:”;p1.disp();
cout<<”p2:”;p2.disp();
p3=pl+p2;
cout<<”執(zhí)行p3=p1+p2后”<
cout<<”p1:”;p1.disp();
cout<<”p2:”;p2.disp();
cout<<”p3:”;p3.disp();
}
參考解析:這兩個程序中的main函數(shù)完全相同,類Point中的運算符重載均采用成員函數(shù)方式實現(xiàn),只是程序1的運算符重載函數(shù)使用this指針,而程序2的運算符重載函數(shù)使用局部對象。
p3=p1+p2 等價于p3=p1.operator+(p2)。對于程序1,this指針指向p1對象,執(zhí)行this->x+=p.x;this->y十一 p.y;語句,修改p l對象的x和y成員值,執(zhí)行return*this;語句,將pl對象賦給p3。所以p1和p3兩個對象的x、Y值相同,即p3=pl+p2等價于 p1=p1+p2,p3:p1,其運行結(jié)果如下:
p1:(2,3)
p2:(3,4)
執(zhí)行p3=pl+p2后
P1:(5,7)
p2:(3,4)
P3:(5,7)
對于程序2,執(zhí)行運算符重載函數(shù),Point s;語句定義一個對象,s.x=x+p.x;s.y=y+p.y;語句用于修改s對象的x、Y值,ret%il~l s;語句返回該對象,賦給p3,而p1和p2對象不改變。其運行結(jié)果如下:
p1:(2,3)
p2:(3,4)
執(zhí)行p3=pl+p2后
p1:(2,3)
p2:(3,4)
p3:(5,7)第
3[單選題]C++語言對C語言做了很多改進,C++語言相對于C語言的最根本的變化是
A.增加了一些新的運算符
B.允許函數(shù)重載,并允許設(shè)置缺省參數(shù)
C.規(guī)定函數(shù)說明符必須用原型
D.引進了類和對象的概念
參考答案:D
4[單選題] 若x和y是程序中的兩個整型變量,則下列if語句中正確的是( )。
A.if(x==O)y=1;elsey=2;
B.if(x==0)theny=1elsey=2
C.if(x==O)y=1elsey=2;
D.ifx==0y=1elsey=2;
參考答案:A
參考解析:if…else語句的格式“if(<條件>)<語句1>else<語句2>”注意語句結(jié)束要以分號結(jié)尾,對照題中選項可知A正確。
5[單選題]

A.3B.4C.5D.6
參考答案:C
參考解析:


6[單選題]友元函數(shù)的作用是( )。
A.提高程序的效率
B.加強類的封裝性
C.實現(xiàn)數(shù)據(jù)的隱蔽性
D.增加成員函數(shù)的種類
參考答案:A
參考解析:友元函數(shù)的引入是為了提高程序的效率,減少通過接口訪問的限制,但卻破壞了類的封裝性。
7[單選題]下列描述中,錯誤的是( )。
A.公有繼承時基類中的公有成員在派生類中仍是公有成員
B.公有繼承時基類中的保護成員在派生類中仍是保護成員
C.保護繼承時基類中的公有成員在派生類中仍是公有成員
D.保護繼承時基類中的保護成員在派生類中仍是保護成員
參考答案:C
參考解析:保護繼承時基類中的公有成員在派生類中是保護成員。
8[單選題] 下列關(guān)于C++函數(shù)的說明中,正確的是( )。
A.內(nèi)聯(lián)函數(shù)就是定義在另一個函數(shù)體內(nèi)部的函數(shù)
B.函數(shù)體的最后一條語句必須是return語句
C.標準C++要求在調(diào)用一個函數(shù)之前,必須先聲明其原型
D.編譯器會根據(jù)函數(shù)的返回值數(shù)型和參數(shù)表來區(qū)分函數(shù)的不同重載形式
參考答案:C
參考解析:內(nèi)聯(lián)函數(shù)不是定義在另一個函數(shù)體內(nèi)部的函數(shù),而是將inline放在函數(shù)定義中函數(shù)類型之前;函數(shù)體的最后一條語句可以是任意的語句;編譯器不會根據(jù)函數(shù)返回值的類型來區(qū)分重載形式,選項D錯誤。標準C++要求在調(diào)用一個函數(shù)之前,必須先聲明其原型。
9[簡答題]使用VC++6.0打開考生文件夾下的源程序文件1.cpp,該程序運行時有錯,請改正其中的錯誤,使程序正常運行,即使程序在屏幕輸出以下類似內(nèi)容:
0012FF6810012FF3C5
0012FF6C20012FF444
0012FF7030012FF4C3
0023FF7440012FF542
0012FF7850012FF5C1
006AFDCC~006AFDEF數(shù)據(jù)可能因為機器的不同,程序輸出的內(nèi)容會有差異。只要相差為4的連續(xù)地址即可。
注意:不要改動main函數(shù),不能增加或刪除行,也不能更改程序的結(jié)構(gòu),錯誤的語句在//******error******的下面。
試題程序:
#include
usingnamespacestd;
intmain()
{
int*P,a[5]={1,2,3,4,5};
double*q,b[5]={5.0,4.0,3.0,2.0,1.0);
intx;
P=a;
q=b;
//********error********
for(x=0;x<=5;X++)
//********error********
cout<
(q+x)<
return0;
}
參考解析:
(1)應(yīng)改為“for(x=0;x<5;x++)”。
(2)應(yīng)改為“cout<
【解析】本題中根據(jù)數(shù)組a、b的定義。它們都有5個元素,而第1處的“for(x=0;x<=5;x++)”循環(huán)了6次,應(yīng)該是5次,所以在第1處將其修改為“for(x=0;x<5;x++)”;第2處的P變量為指針型變量,p+x為糯向數(shù)組中第X個元素的地址,這里要輸出的是存儲單元的內(nèi)容,所以使用“*”指針元素符,即修改為“cout<
11[填空題]在C++中,三種派生方式的說明符號為( )、( )、( )不加說明,則默認的派生方式為( )。
參考解析:public 、private 、 protected、private
12[單選題]線性表常采用的兩種存儲結(jié)構(gòu)是( )。
A.順序存儲結(jié)構(gòu)和鏈式存儲結(jié)構(gòu)
B.散列方法和索引方式
C.鏈表存儲結(jié)構(gòu)和數(shù)組
D.線性存儲結(jié)構(gòu)和非線性存儲結(jié)構(gòu)
參考答案:A
參考解析:線性表的存儲通常要用兩種存儲結(jié)構(gòu):順序存儲結(jié)構(gòu)和鏈式存儲結(jié)構(gòu)。
13[單選題]下列程序段執(zhí)行后,j值是( )。
for(int i(0), j(0); i<10; i++)
if(i) j++;
A.0 B.9C.10 D.無限
參考答案:B
14[單選題]有以下程序,執(zhí)行后輸出結(jié)果是( )。

A.3,4,5 B.5,3,4 C.5,4,3 D.4,3,5
參考答案:D
參考解析:考生根據(jù)分析可以得知f函數(shù)的功能是交換兩個變量的值。表明看起來,在main函數(shù)中,使用三次f函數(shù)完成三個變量的交換。真的如此么?只要考生注意到f函數(shù)采用值傳遞,而值傳遞的缺點就是不會改變形參的值,因此,上述操作根本無法改變原來三個變量的值!故三個變量的值依然保持不變。
15[單選題] 已知類A有公用數(shù)據(jù)成員a,并重載了=運算符,且有Aobj2;constA*ptr=newA;,則下列語句錯誤的是( )。
A.ptr->a=100;B.ptr=&obj2;C.ptr++;D.obj2=*ptr;
參考答案:A
參考解析:本題考查const修飾符的作用。注意,const位置不同,其修飾的部分也是不同的。本題中const修飾的是ptr所指的對象本身,所以,ptr可以重新指向新的對象,而ptr->a則無法被更新。
16[單選題]下列函數(shù)的運行結(jié)果是( )。

A.25B.30C.20D.15
參考答案:A
參考解析:

17[單選題] 對于循環(huán)隊列,下列敘述中正確的是( )。
A.隊頭指針是固定不變的
B.隊頭指針一定大于隊尾指針
C.隊頭指針一定小于隊尾指針
D.隊頭指針可以大于隊尾指針,也可以小于隊尾指針
參考答案:D
參考解析:所謂循環(huán)隊列,就是將隊列存儲空間的最后一個位置繞到第一個位置,形成邏輯上的環(huán)狀空間,供隊列循環(huán)使用。在循環(huán)隊列結(jié)構(gòu)中,當(dāng)存儲空間的最后一個位置已被使用而再要進行入隊運算時,只要存儲空間的第一個位置空閑,可將元素加入到第一個位置,即將存儲空閑的第一個位置作為隊尾。
18[單選題]以下程序的輸出結(jié)果是( )。

A.1234B.123C.12D.1
參考答案:B
參考解析:本題考察的是循環(huán)次數(shù)的判定。有while后的邏輯表達式可知,整個循環(huán)體需要執(zhí)行3次,故可直接選定正確答案為B。
19[填空題]十進制28和3.6的類型分別是_______。
參考解析:int和double
【解析】整型和雙精度型。注意除非定義了float變量。實型常量隱含為 double型。
20[簡答題]請使用VC6或使用【答題】菜單打開考生文件夾prosS下的工程pr093,其中包含了類TaxCaleulator(“個稅計算器”)和主函數(shù)main的定義。創(chuàng)建“個稅計算器”需要接收稅率表信息和起征額信息。在main函數(shù)中,通過兩個數(shù)組創(chuàng)建了如下的稅率表:

利用這個稅率表創(chuàng)建“個稅計算器”時,假定起征額為2 000元(即不超過2 000元的所得不征收個人所得稅)。請補充完成計算應(yīng)納個人所得稅額的成員函數(shù)getTaxPayable,其中的參數(shù)income為月收入。此程序的正確輸出結(jié)果應(yīng)為:
月收入為800元時應(yīng)繳納個人所得稅0元
月收入為l 800元時應(yīng)繳納個人所得稅0元月收入為2 800元時應(yīng)繳納個人所得稅 55元 月收入為3 800元時應(yīng)繳納個人所得稅l55元
月收入為4 800元時應(yīng)繳納個人所得稅295元月收入為5 800元時應(yīng)繳納個人所得稅455元
注意:只能在函數(shù)9etTaxPayable中的“//**********333**********”和“//**********666**********”之間
填人若干語句,不要改動程序中的其他內(nèi)容。 //Tax Calculator.h #include #include
using flamespace std; class TaxCalculator{ public:
TaxCalculator(double the—limits[],double the_rates[],int the—length,double the_threshold) :lower_limits(new double[the_length]),rates(new double[the—length]),
list_len(the_length),threshold(the—threshold){ for(int i=0;i
lower_limits[i]=the_limits[i]; rates[i]=the_rates[i];
} f
—TaxCalculator(){delete[]lower_limits;delete[]rates;}
double getTaxPayable(double income)eonst;//返回指定月收入的應(yīng)納個人所得稅額 void showTaxPayable(double income)const;//顯示指定月收入的應(yīng)納個人所得稅額 private:
double$lower—limits;//適用收入段下限 double *rates; //適用稅率
int list—len;//稅率表項數(shù)
double threshold; //起征額 };
void writeToFile(consl char * path); //TaxCalcnlator.cpp
‘#include”TaxCalculator.h”
double TaxCalculator::getTaxPayable(double income)const{ double taxable=income—threshold;
//應(yīng)納稅工資額
double tax_payable=0.0; //應(yīng)納個人所得稅額
int i=list_len-1;
//從稅率表的適用段開始計算 while(i>=0){
//**********333**********
//**********666**********
--i; }
return tax_payable;
} void TaxCalculator::showTaxPayable(double income)const{
cout<<”月收入為”<
}
//main.cpp
#include”TaxCalculator.h” int main(){
double limits[]={0.0,500.0,2000.0,5000.0,20000.0,40000.0,60000.0,80000。0,100000.0}; double rates[]={0.05,0.1,0.15,0.2,0.25,0.3,O.35,0.4,0.45};
TaxCaleulator calc(1imits,rates,9,2000.0); calc.showTaxPayable(800.0);
calc.showTaLPayable(1800.0); cale.showTaxPayable(2800.0); calc.showTaxPayable(3800.0); calc.showTaxPayable(4800.0); eaie.showTaxPayable(5800.0); writeToFile(””);
return 0;
}
參考解析:
if f income<=2000)//如果收入小于2000
return tax—payable;
//直接tex—payable(初始代為零)
i“taxable>lower_limits[i]){
//如果taxable(收入超出起征額的部分)大于lower—limits
[i]階段最低限額
tax_payable+=(taxable-lower-limits[i])*
rates[i]:
//把起過階段最低限額的部分乘以該階段的稅率后,加到tax_payable(個人所得稅)
taxable=lower_limits[i];
//把fower_limits[i]賦值于taxable
}