2016年計算機二級《C++》非選擇題練習及答案
一、程序改錯題
1、使用VC++6.0打開考生文件夾下的源程序文件,該程序運行時有錯。請改正程序中的錯誤,使程序輸出的結果為
100
37
32
注意:錯誤的語句在//******error******的下面,修改該語句即可。
試題程序:
#include
//******error******
voidmain
{
//******error******
intm=0142:
//******error******
intn=0X27:
intq=32;
cout<
cout<
cout<
return;
}
參考解析:
(1)“voidmain()”。
(2)“intm=0144;”。
(3)“intn=OX25;”或“intn===0x25;”。
【解析】本題主要考查了主函數定義及冪同進制之間的轉換,包括十進制到八進制,十進制到十六進制。主函數定義的定義形式為“main()”,函數名之後必須是一對括號,因此第1處應改為“voidmain()”。cout輸出默認是以十進制方式輸出的,根據題目要求輸出的結果可發現變量的初值不正確,十進制的100對應八進制的144,卡進制的37對應十六進制的25,因此2和3應分別改成“intm=0144;”,“intn=0×25;”或“intn=0×25;”。
二、簡單應用題
2、使用VC++6.0打開考生文件夾下的源程序文件。請完成函數fun(intn),使其實現以下功能:當i等於3時,則打印如下內容。
A
AA
AAA
注意:不能修改程序的.其他部分,只能修改fun函數。
試題程序:
#include
voidfun(intn)
{
}
voidmain()
{
intn;
cout<<"請輸入打印的行數:"<
cin>>n;
if(n<1)
{
cout<<"輸入的行數必須大於0"<
return;
}
fun(n);
return;
}
參考解析:
inti;
for(i=0;i
{
intj;
for(j=0;j(n-i-1;j++)//循環打印空格
{
cout<<'';
}
for(;j
{
cout<<"A":
}
cout<
}
【解析】本題利用外層循環打印每一行。內層循環分為
打印空格和打印A。打印空格由第一個位置到第n-i-1。打印A,是由打印完空格開始一直到行結束。在外循環中打印每一行的結束符。
三、綜合應用題
3、使用VC++6.0打開考生文件夾下的源程序文件。請完成以下部分,實現在屏幕上輸出為
C3
C2
這個程序需要修改的部分,請按照以下部分實現。
(1)類C0不能被實例化,請定義一個純虛函數print,在註釋1後添加適當的語句。
(2)類C1私有虛繼承類C0,請在註釋2後添加適當的語句。
(3)類C2公有繼承於C0,請在註釋3後添加適當的語句。
(4)類c3公有繼承於C2與C1,請在註釋4後添加適當的語句。
注意:增加代碼或者修改代碼的位置已經用符號表示出來。請不要修改其他的程序代碼。
試題程序:
#include(iostream.h)
classCO
{
//********1********
};
//********2********
classC1:
{
public:
voidprint()
{
cout<"”C1"<
}
};
//********3********
classC2:
{
public:
voidprint()
{
cout<<"C2"<
}
};
//********4***x****
classC3:
{
public:
voidprint()
{
cout<<"C3"<
}
};
voidmain()
{
C30bj3;
C20bj2;
t();
t();
return;
}
參考解析:
(1)應添加“virtualvoidprint()=0,”。
(2)“classC1:”應改為“classC1:virtualprivateC0”。
(3)“classC2:”應改為“classC2:publicC0”。
(4)“classC3:”應改為“classC3:publicC2,publicC1”。
【解析】本題考查了類的繼承。根據題意,第1處應該添加“virtualvoidprint()=0;”。第2處根據題意,在冒號後面應添加“virtualprivateCO”。第3處根據題意,冒號後應添加“publicCO”。第4處根據題意,冒號後應添加“publicC2,publicC1”。