[2018年计算机二级考试《C++》备考练习题及答案] C证练习题
1[判断题] C++语言程序的实现也要经过编辑、编译连接和运行3个步骤。
参考答案:对
2[单选题]在公有派生情况下,有关派生类对象和基类对象的关系,不正确的叙述是( )。
A.派生类的对象可以赋给基类的对象
B.派生类的对象可以初始化基类的引用
C.派生类的对象可以直接访问基类中的成员
D.派生类的对象的地址可以赋给指向基类的指针
参考答案:C
3[单选题] 有如下函数定义:
void funC(int a,int&B.{a++;b++;} 若执行代码段:
int x=0,Y=1: funC(X,y);
则变量X和y的值分别是( )。
A.0和1B.1和1C.0和2D.1和2
参考答案:C
参考解析:函数参数的3种传递方式:①将变量名作为形参和实参,即传值方式;②传递变量指针;③引用形参。本题中实参x为传值方式,所以X的值不会改变;Y为引用形参,所以会改变。故本题答案为C。
4[单选题]下面程序的结果为
#include
int c;
class A
{
private:
int a;
static int b;
public;
A(){a=0;c=0;}
void seta(){a++;}
void setb(){b++;}
void setc(){c++;}
void display(){cout <<<<
int A::b=0;
void main()
{
A al,a2;
al.seta();
al.setb();
al.setc();
a2.seta();
a2.setb();
a3.setc();
a2.display();
A.121 B.122 C.112 D.222
参考答案:B
6[单选题]已知char a;int b;float c;double d;则表达式a*b+c-d结果为( )。
A.doubleB.intC.floatD.char
参考答案:A
参考解析:本题考察混合运算表达式类型,由表达式中具有最高优先级的类型所确定,所以答案为A。
8[单选题] 下列叙述中正确的是( )。
A.循环队列有队头和队尾两个指针,因此循环队列是非线性结构
B.在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况
C.在循环队列中,只需要队尾指针就能反映队列中元素的动态变化情况
D.循环队列中元素的个数是由队头指针和队尾指针共同决定
参考答案:D
参考解析:循环队列中元素的个数是由队首指针和队尾指针共同决定的,元素的动态变化也是通过队首指针和队尾指针来反映的,当队首等于队尾时,队列为空。
9[简答题]使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错误,请改正其中的错误,使得程序正确运行。
程序输出:
s1:n=20
s2:n=10
执行s3.add(s1,s2)
s3:n=30
s4:n=30
注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在//******error******的下面。
试题程序:
#include
classTC
{
intn;
public:
TC(){}
TC(intm)
{
n=m:
}
//********error********
TCadd(TCs1,s2)
{
this->n=s1.n+s2.n;
//********error********
return(this);
}
voiddisp()
{
cout<<"n一="<
}
//********error********
}
voidmain()
{
TCs1(20),s2(10),s3,s4;
cout<<"s1:";
s1.disp();
cout<<"s2:";
s2.disp();
s4=s3.add(s1,s2);
cout<("执行s3.add(s1,s2)\ns3:";
s3.disp();
COUt<<"s4:";s4.disp();
}
参考解析:
(1)应改为“TCadd(TCs1,TCs2)”。
(2)应改为“return(*this);”。
(3)应改为“};”。
【解析】本题中的变量“s2”没有声明类型,所以补充“s2”的类型,即“TCadd(TCs1,TCs2)”,“this->n=s1.n+s2.n;”语句中的this变量为指针变量,所以第2处的“return(this);”返回语句中的this变量,应该返回指针型,所以修改为“return(*this);”。C++中类的定义格式应为“class类名{};”,以分号为结尾,所以在第3处的类结尾处补充分号“;”,即修改为“};”。
10[简答题]使用VC++6.0打开考生文件夹下的源程序文件2.cpp。请完成函数fun(char*str,charch)的定义,本函数采用二分法,在已按字母次序从小到大排序的字符数组str中,查找字符ch,若ch在数组中,函数返回字符ch在数组中的下标,否则返回1。
二分法查找的思想是初始查找区间的下界为0,上界为len-1,查找区间的中部后,k=(下界+上界)/2;若list[k]等于ch,查找成功;若list[k]>ch,则新的查找区间的下界不变,上界改为k-1;否则新的查找区间的下界改为k+1,上界不变。在新区间内继续用二分法查找。
注意:请勿改动主函数main与其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include(iostream.h>
intfun(char*str,charch)
{
}
voidmain()
{
charstr[]={"a","b","C","d","e","f","9","h","i,"
j","k");
charch;
cout<<"请输入一个字符:"<
cin>>ch;
cout<<"输入字符的位置是:"<
return;
}
参考解析:
intlow=0;//初始查找区间的下界
inthigh;
intk;
for(high=0;str[high]!=0;high++)//求字符串长度
while(10w
{
k=(low+high)/2;
if(str[k]==ch)
returnk;
elseif(str[k]>ch)
high=k-l:
elselow=k+1:
}
if(str[low]==ch)
returnlow;
return-1:
【解析】本题首先初始查找区间的下界为0,然后求得字符串长度len,上界为len-1,查找区间的中部后,k=(下界+上界)/2;若list[k]等于ch,查找成功。若list[k]>ch,则新的查找区间的下界不变,上界改为k-1;否则新的查找区间的下界改为k+1,上界不变。
