2013年9月全国计算机等级《二级C++》考前冲刺试卷七
-
使用VC++6.0打开考生文件夹下的源程序文件2.cpp。请完成以下两个函数。
(1)funl(intn)求出n的阶乘,必须使用递归调用。
(2)fun2(intn)求出n的阶乘,不能使用递归调用。如果n小于1则返回0。
注意:不能修改函数的其他部分。
试题程序:
#include
//必须使用递归
intfunl(intn)
{
}
//不能使用递归
intfun2(intn)
{
}
voidmain
{
inti;
cout<<"请输入一个整数:"<
cin>>i;
cout<<"输入数字的阶乘是:"<
cout<<"输入数字的阶乘是:"<
return;
}
-
使用VC++6.0打开考生文件夹下的源程序文件3.cpp。类People包括姓名和年龄两个字段。函数fun获得年龄比较大的人的姓名,然后输出这个姓名到屏幕。
其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。
(1)完成类的构造函数功能,请在注释1后添加适当的语句。
(2)完成构造函数对姓名的赋值,请在注释2后添加适当的语句。
(3)定义类的友元函数fun,请在注释3后添加适当的语句。
(4)补充函数fun的年龄比较功能,请在注释4后添加适当的语句。
注意:增加或者修改代码的位置已经用符号表示出来,请不要修改其他的程序代码。
试题程序:
#include
classPeople
{
public:
//********1********
{
inti;
for(i=0;sUserName[i]!=0;i++)
{m_UserName[i]=sUserName[i];
}
//********2********
m_Old=nOld;
}
private:
charm_UserName[32];
intm_Old;
//********3********
};
voidfun(char*s,People&personl,People&person2
{
//********4********
if
{
for(inti=0;personl.m_UserName[i]!=0;i+
+)
{
s[i]=personl.m_UserName[i];
s[i+1]=0;
}
}
else
{
for(inti=0;person2.m_UserName[i]!=0;i+
+)
{s[i]=person2.m_UserName[i];
s[i+1]=0;
}
}
}
voidmain
{
chars[32];
Peoplepl("abc",20);
Peoplep2("def",30):
fun(S,p1,p2);
cout<
return;
}
-
使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行有问题,请改正main函数中的错误,使程序的输出结果为:
number=1
number=10
number=100
注意:不要改动main函数,不能增加或删除行。也不能更改程序的结构,错误的语句在//******error******的下面。
试题程序:
#include
classTC
{
public:
TC(inti)
{
number=i;
}
voidSetNumber(intm)
{
number=m;
}
intGetNumberconst
{
returnnumber;
}
voidPrintconst
{
cout<<"number="<
}
private:
intnumber;
};
voidmain
{
//********error********
TCobjl;
objl.Print;
TCobj2(3);
//********error********
objl.number=10;
//********error*‰******
TC.SetNumber(100);
objl.Print;
obj2.Print;
}
-
有如下程序:
#included
usingnamespacestd;
classTestClass
{inta;
pubIic:
TestClass(intx){a=x;}
voidshow(){cout
{intb;
public:
TestClassl(inti):TestClass(i+1),b(i){}
voidshow(){cout
{TestClassb(5),*P;
TestClassld(1):
p=&d;
p->show();
return0;}
该程序运行后的打印结果是( )。
- A.5
- B.1
- C.0
- D.2
-
类A是类B的友元,类B是类C的友元,则下列说法正确的是( )。
- A.类B是类A的友元
- B.类C是类A的友元
- C.类A是类C的友元
- D.以上都不对
-
下列叙述中错误的是( )。
- A.在程序中凡是以“#”开始的语句行都是预处理命令行
- B.预处理命令行的最后不能以分号表示结束
- C.#defineMAX是合法的宏定义命令行
- D.C++中预处理命令行的处理是在程序执行的过程中进行的
-
有下列程序:
#include
voidmain( )
{inti=5;
do
{if(i%3=1)
if(i%5==2)
{printf("*%d",i);break;}
i++:
}while(i!=O);
printf("\n");
}
程序的运行结果是( )。
- A.*7
- B.*3*5
- C.*5
- D.*2*6
-
已知函数FA调用函数FB,若要把这两个函数定义在同一个文件中,则( )。
- A.FA必须定义在FB之前
- B.FB必须定义在FA之前
- C.若FA定义在FB之后,则FA的原型必须出现在FB的定义之前
- D.若FB定义在FA之后,则FB的原型必须出现在FA的定义之前
-
下列表达式的值为false的是( )。
- A.1<3&&5<7 2="">4)
- C.3&0&&l
- D.!(5<8)‖(2<8)
-
函数swap(a,n)可完成对a数组从第1个元素到第n个元素两两交换。其中b[o]=1;b[1]=2;swap(b,2)。在运行调用函数中的语句后,b[0]和b[1]的值分别为( )。
- A.1,1
- B.1,2
- C.2,2
- D.2,1
-
对于类定义:
classA{
public:
virtualvoidfuncl(){}
voidfunc2(){}
};
classB:publicA{
public:
voidfuncl(){cout<<"classBfunc1"<
virtualvoidfunc2(){cout<<"classBfunc2"
<
};
下面正确的叙述是( )。
- A.A::func2( )和B::func1( )都赵虚函
- B.A::rune2( )和B::func1( )都不是虚函数
- C.B::func1( )是虚函数,而A::fune2( )不是虚函数
- D.B::func1( )不是虚函数,而A::func2( )是虚函数
-
有下列程序:
#include
voidmain( )
{char*a[]={"abed","ef","gh","ijk");inti;
for(i=0;i<4;i++)printf("%C",*a[i]);
}
程序运行后的输出结果是( )。
- A.aegi
- B.dfhk
- C.abed
- D.abcdcfghijk
-
下列叙述中错误的是( )。
- A.在程序中凡是以“#”开始的语句行都是预处理命令行
- B.预处理命令行的最后不能以分号表示结束
- C.#defineMAX是合法的宏定义命令行
- D.C程序中预处理命令行的处理是在程序执行的过程中进行的
-
下列关于栈的叙述正确的是( )。
- A.栈按“先进先出”组织数据
- B.栈按“先进后出”组织数据
- C.只能在栈底插入数据
- D.不能删除数据
-
下列程序中横线处应填入的语句是()。
classBase
{
public:
voidfun(){cout<<"Baseoffun"<
classDerived:publicBase
{
voidfun()
{
//显示基类的成员函数fun
cout<<"Derivedoffun"<
}
};
- A.fun();
- B.Base.fun();
- C.Base::fun();
- D.Base->fun();
-
下列程序段中的变量已正确定义:
for(i=0;i<4;i++,i++)
for(k=1;k<3;k++);printf("*");
程序段的输出结果是( )。
- A.********
- B.****
- C.**
- D.*
-
若有定义语句“inti=2,j=3;”,则表达式i/j的结果是( )。
- A.0
- B.0.7
- C.0.66667
- D.0.66666667
-
对于语句“cout<<setfill('*')<<setw(10)<<1<<serfill('*')<<setw(2)<<2;”的输出结果是( )。
- A.*********1*2
- B.span>B.********12
- C.span>C.*******1*2
- D.span>D.12********
-
若函数中有定义语句“intk;”.则( )。
- A.系统将自动给k赋初值0
- B.这时k中的值无定义
- C.系统将自动给k赋初值-1
- D.这时k中无任何值
-
设有下列程序段:
chars[20]="Beijing",*P;
P=S;
则执行“p=s;”语句后,下列叙述正确的是( )。
- A.可以用*P表示s[0]
- B.S数组中元素的个数和P所指字符串长度相等
- C.S和P都是指针变量
- D.数组s中的内容和指针变量P中的内容相同
-
有下列程序:
#include
voidmain( )
{
intx=8;
for(;x>0;x--)
{
if(x%3){printf("%d,",x--),continue;}
printf(”%d,”,--x);
}
}
程序的运行结果是( )。
- A.7,4,2
- B.8,7,5,2
- C.9,7,6,4
- D.8,5,4,2
-
有如下程序:
#include
usingnamespacestd;
classB{
public:
virtualvoidshow(){cout<<"B";}};
classD:publicB{
public:
voidshow(){cout<<"D";}
};
voidfun1(B*ptr){ptr->show();
}voidfun2(B&ref){ref.show();
}voidfun3(BB){b.show();
}
intmain(){
Bb,*p=newD;
Dd;
funl(p);
fun2(b);
fun3(d);
return0;
}
程序的输出结果是( )。
- A.BBB
- B.BBD
- C.DBB
- D.DBD
-
下列不构成无限循环的语句或语句组是( )。
- A.n=0;do{++n;)while(n<=0);
- B.n=0;while(1){n++;)
- C.while(n=1O);{n--;}
- D.for(n=0,i=1;;i++)n+=i
-
程序段“intx=12;doubley=3.141593;printf(”%d%8.6'f",X,y);”的输出结果是( )。
- A.123.141593
- B.123.141593
- C.12,3.141593
- D.123.1415930
-
设变量已正确定义并赋值,以下正确的表达式是( )。
- A.x=y+5=x+z
- B.int(15.8%5)
- C.x=y+z+5,++y
- D.x=25%5.0
-
下面描述中错误的是( )。
- A.系统总体结构图支持软件系统的详细设计
- B.软件设计是将软件需求转换为软件表示的过程
- C.数据结构与数据库设计是软件设计的任务之一
- D.PAD图是软件详细设计的表示工具
-
有下列程序:
#include
#defineN4
voidfun(inta[][N],intb[])
{inti;
for(i=0;i
}
voidmain( )
{intx[][N]={{1,2,3},{4),{5,6,7,8),{9,10}),
y[N],i;
fun(x,y);
for(i=0;i
printf("\n");
}
程序的运行结果是( )。
- A.1,2,3,4,
- B.1,0,7,0,
- C.1,4,5,9,
- D.3,4,8,10,
-
有如下的程序:
#include
#include
usingnamespacestd;
classMyString
{public:
MyString(constchar*s);
MyString(){delete[]data;}
protected:
unsignedlem
char*data;};
MyStrin9::MyString(constchar*s)
{len=strlen(s);
data=newchar[len+1];
strcpy(data,s);}
intmain()
{MyStringa("C++Programing");
MyStringb(a);
return0;}
在运行上面的程序时出错,出错的原因是( )。
- A.构造函数的实参不允许是本类的对象
- B.没有定义实现深层复制的复制构造函数
- C.构造对象a时实参与形参类型不符
- D.系统不能生成默认的复制构造函数
-
有如下程序:
#include
usingnamespacestd;
classMyClass{
public:
MyClass(intx):val(x){}
voidPrint()const{cout<<"const:val="<<
voidPrint(){cout<<"val="<
private:
intval;
};
intmain(){
constMyClassobj1(10);
MyClassobj2(20);
obj1.Print();
obj2.Print();
return0;
}
程序的输出结果是( )。
- A.va1=10const:va1=20
- B.const:va1=10const:va1=20
- C.const:va1=10val=20
- D.val=10va1=20
-
软件按功能可以分为应用软件、系统软件和支撑软件(或工具软件)。下列属于应用软件的是( )。
- A.编译程序
- B.操作系统
- C.教务管理系统
- D.汇编程序
-
下列叙述中正确的是( )。
- A.C程序中的注释只能出现在程序的开始位置和语句的后面
- B.C程序书写格式严格,要求一行内只能写一个语句
- C.C程序书写格式自由,一个语句可以写在多行上
- D.用C语言编写的程序只能放在一个程序文件中
-
有如下程序:
#include
usingnamespacestd;
classTestClass
{public:
virtualvoidfunl()
{cout<<"funlTestClass";}
virtualvoidfun2()
{cout<<“fun2TestClass”;}};
classTestClassl:publicTestClass
{voidfun()
{cout<<“funlTestClassl”;}};
intmain()
{TestClassobj1,*P;
TestClasslobj2;
p=&obj2;
p->fun1();
p->fun2();
return0;}
该程序执行后的输出结果是( )。
- A.funlTestClasslfun2TestClass
- B.funlTestClass1fun2TestC1ass1
- C.funlTestClassfun2TestClass
- D.funlTestClassfun2TestClassl
-
下面关于运算符重载的描述错误的是( )。
- A.运算符重载不能改变操作数的个数、运算符的优先级、运算符的结合性和运算符的语法结构
- B.不是所有的运算符都可以进行重载
- C.运算符函数的调用必须使用关键字0perator
- D.在C++语言中不可通过运算符重载创造出新的运算符
-
有如下程序:
#include
usingnamespacestd;
classToy{
public:
Toy(char*_n){strcpy(name,_n);count++;)
~Toy( ){count一一;)
char*GetName( ){returnname;}
staticintgetCount( ){returncount;)
private:
charname[10];
staticintcount;
};
intToy::count=0;
intmain( ){
Toyt1("snoopy"),t2("Mickey"),t3("Barbie");
tout<
return0;
)
运行时的输出结果是( )。
- A.1
- B.2
- C.3
- D.运行时出错
-
下列选项中不属于结构化程序设计方法的是( )。
- A.自顶向下
- B.逐步求精
- C.模块化
- D.司复用
-
派生类的成员函数不能访问基类的( )。
- A.公有成员和保护成员
- B.公有成员
- C.私有成员
- D.保护成员
-
下列关于析构函数的描述中,错误的是( )。
- A.析构函数可以重载
- B.析构函数由系统自动调用
- C.每个对象的析构函数只被调用一次
- D.每个类都有析构函数
-
有如下程序:
#include
usingnamespacestd;
classDA{
intk;
public:
DA(intx=1):k(x){}
~DA(){cout<
};
intmain(){
DAd[]={DA(3),DA(3),DA(3));
DA+p=newDA[2];
delete[]p;
return();
}
这个程序的输出结果是( )。
- A.111
- B.333
- C.11333
- D.11133
-
已经有“语句intm=10;”则下列表示引用的表示中正确的是( )。
- A.int&x=m;
- B.int&y=10;
- C.int&z;
- D.float&t=8m;
-
有下列程序:
#include
voidmain( )
{intx=1,y=2,z=3;
if(x>y)
if(y
elseprintf("%d",++y);
printf(”%d\n”,x++);
}
程序的运行结果是( )。
- A.331
- B.41
- C.2
- D.1
-
有以下程序:
#include
usingnamespacestd;
classR
{public:
R(intr1,intr2)
{R1=r1;
R2=r2;}
voidprint();
voidprint()const;
private:
intR1,R2;};
voidR::print()
{cout<
voidR::print()const
{cout<
intmain()
{Ra(5,4);
constRb(20,52);
print();
return0;}
执行后的输出结果是( )。
- A.5,4
- B.20,52
- C.0,0
- D.4,5
-
下列语句中,与语句“n=(a>b?(b>c?1:0):0);”的功能等价的是( )。
- A.if(a<=b)n=0;
- B.if(a>B)‖(b>c))n=1;elsen=0;
- C.if(a>b)if(b>c)n=1;elsen=;elsen=0;
- D.if(a>b)n=1;elseif(b<=c)n=1;elseif(b>c)n=1;elsen=0;
-
索引属于( )。
- A.模式
- B.内模式
- C.外模式
- D.概念模式