2013年9月全国计算机等级《二级C++》考前冲刺试卷一
-
使用VC++6.0打开考生文件夹下的源程序文件2.cpp。阅读下列函数说明和代码。函数num(ehar*str)用于返回字符串中非数字的个数。
例如:abcl23abc45
返回值为:6
将函数num补充完整。
注意:请勿改动主函数main。
试题程序:
#include
intnum(char*str)
{
}
intmain
{
charstr[1024];
cout<<"pleaseinputastring:"<
cin.getline(str,1024);
cout<<"charnumberis"<
return0;
}
-
(1)应添加“virtualvoidGetNamt!=0;”。
(2)应添加“constchar*GetName2”。
(3)应添加“TC2(char*str)”。
(4)应添加“m_str[i]=0;”。
【解析】本题第1处要求“在类TC1中定义接口函数GetName,为纯虚函数”。在C++中,在基类中用virtual声明成员函数为虚函数。纯虚函数是在声明虚函数时被“初始化”为0的函数,即“virtualvoidGetName=0;”。第2处要求“函数GetName2实现获得名字的缓存,但只获得读允许操作这个缓存”。只能引用数据成员,而不能修改,所以使用常成员函数,其一般形式为“const函数类型函数名”,即“constchar*GetName2”。第3处要求“实现TC2的构造函数”。TC2的构造函数与类TC2的名称应该相同,而且第3处的大括弧中是对字符数组str的操作,所以类TC2的构造函数中的参数为str,即这里补全为“TC2(char*str)”。第4处要求“完成TC2的构造函数,实现对名字的处理”,补全类TC2的构造函数,构造函数中的名字变量str对应于类TC中的成员变量m_str,所以这里补全变量赋值操作“m_str[i]=0;”。
-
使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错误,请改正程序中的错误,使得程序输出:
9,8,7,6,5
注意:错误的语句在/********error********/的下面,修改该语句即可。其他的语句不能修改。
试题程序:
#include(iostream.h>
classTC
{
/********error********/
TC(inti)
{
m_i=i;
}
voidprint
{
cout<<--m_i<<',';
}
public:
intm_i;
};
intmain
{
/********error********/
inti;
TC04(10);
while(i>5)
{
/********errOr********/
i++:
04.print;
}
cout<
return0;
}
-
数据流程图(DFD)是( )。
- A.软件概要设计的工具
- B.软件详细设计的工具
- C.结构化方法的需求分析工具
- D.面向对象方法的需求分析工具
-
下面的函数调用语句中func函数的实参个数是( )。
func(f2(vl,v2),(v3,v4,v5),(v6,max(v7,v8)));
- A.3
- B.4
- C.5
- D.8
-
有以下程序:
#include
usingnamespaeestd;
classMyClass
{
public:
MyClass(intn){number=n;}
//拷贝构造函数
MyClass(MyClass&other){number=other.number;}
~MyClass(){}
private:
intnumber;
};
MyClassfun(MyClassp)
{
MyClasstemp(p);
returntemp;
}
intmain()
{
MyCIassobj1(10),obj2(O);
MyClassobj3(obj1);
obj2=fun(obj3);
return0;
程序执行时,MyClass类的拷贝构造函数被调用的次数是( )。
- A.5
- B.4
- C.3
- D.2
-
下列工具中为需求分析常用工具的是( )。
- A.PAD
- B.PFD
- C.N-S
- D.DFD
-
下列关于类模板的描述中,错误的是( )。
- A.类模板的成员函数都是模板函数
- B.可以为类模板参数设置默认值
- C.类模板描述了一组类
- D.类模板中只允许有一个类型参数
-
有如下类定义:
classXX{
intxdata;
public:
XX(intn=0):xdata(n){}
};
classYY:publicXX{
intydata;
public:
YY(intm=0,intn=O):XX(m),ydata(n){}
};
YY类的对象包含的数据成员的个数是( )。
- A.1
- B.2
- C.3
- D.4
-
以下程序的输出结果是( )。min( )
{
inti=0,a=0;
while(i<20)
{
for(;;)
{
if((i%10)==0)break;
elsei--:
}
i+=11;a+=i;
}
cout<}
- A.21
- B.32
- C.33
- D.11
-
设有程序段:
intk=10。
while(k=O)k=k-1;
则下面描述中正确的是( )。
- A.循环执行10次
- B.无限循环
- C.循环体语句一次也不执行
- D.循环体语句执行一次
-
软件(程序)调试的任务是( )。
- A.诊断和改正程序中的错误
- B.尽可能多地发现程序中的错误
- C.发现并改正程序中的所有错误
- D.确定程序中错误的性质
-
下列关于C++函数的说明中,正确的是( )。
- A.内联函数就是定义在另一个函数体内部的函数
- B.函数体的最后一条语句必须是return语句
- C.标准C++要求在调用一个函数之前,必须先声明其原型
- D.编译器会根据函数的返回值数型和参数表来区分函数的不同重载形式
-
程序中有语句:for(inti=0;i<5;i++)cout<<*(p+i)<<",";能够依次输出int型一维数组a的前5个元素。由此可知,变量P的定义及初始化语句是( )。
- A.int*p=a;
- B.intp=a;
- C."p=a;
- D.p=a;
-
有如下程序:
#include
usingnamespacestd;
classTest(
public:
Test( ){}
Test(constTest8Lt){cout<<1;}
};
Testfun(Test&u){Testt=U;returnt;}
intmain( ){Testx,y;x=fun(y);return0;}
运行这个程序的输出结果是( )。
- A.无输出
- B.1
- C.1l
- D.111
-
与语句cout<
- A.cout<<'\n';
- B.cout<<'\12';
- C.cout<<'\xA';
- D.cout<<'\0';
-
考虑以下的函数原型:
voldA(inta,intb=5,charZ='*');
下面的函数调用中,不正确的是( )。
- A.A(7)
- B.A(3,4)
- C.A(16,'#')
- D.A(0,2,'*')
-
下列叙述中正确的是( )。
- A.顺序存储结构的存储空间一定是连续的,链式存储结构的存储空间不一定是连续的
- B.顺序存储结构只针对线性结构,链式存储结构只针对非线性结构
- C.顺序存储结构能存储有序表,链式存储结构不能存储有序表
- D.链式存储结构比顺序存储结构节省存储空间
-
若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是( )。
- A.函数调用可以作为独立的语句存在
- B.函数调用可以无返回值
- C.函数调用可以出现在表达式中
- D.函数调用可以作为一个函数的形参
-
若执行下面的程序时,从键盘上输入5和2,则输出结果是( )。
#include(iostream.h)
voidmain( )
(inta,b,k;
cin>>a>>b;
k=a:
if(ak=a%b;
else
k=b%a:
cout((k<
- A.5
- B.3
- C.2
- D.0
-
有下列程序:
#include
voidmain( )
{FILE*f;
f=fopen("filea.txt","w");
fprintf(f,"abe");
fclose(f);
}
若文本文件filea.txt中原有内容hell0,则运行以上程序后,文件Iilea.txt中的内容为( )。
- A.helloabe
- B.abclo
- C.abe
- D.abchello
-
有如下程序:
#include
usingnamespacestd;
voidf1(int&X,int&y){intz=X;x=y;y=z}
voidf2(intX,inty){intz=x;x=y;y=z}
intmain( ){
intx=10,y=26
f1(x,y);
f2(X,y);
cout<
return0;
}
运行时的输出结果是( )。
- A.10
- B.16
- C.26
- D.36
-
下面程序的输出结果是( )。#include
#include
voidmain()
{
charp1[10],p2[10];
strcpy(p1,"abc");
strcpy(p2,"ABC");
charstr[50]="xyz":
strcpy(str+2,strcat(p1,p2));
cout<
}
- A.xyzabcABC
- B.zabcABC
- C.xyabcABC
- D.yzabcABC
-
若是对类BigNumber中重载的类型转换运算符long进行声明,下列选项中正确的是( )。
- A.operatorlong( )const;
- B.operatorlong(BigNumber);
- C.longoperatorlong( )const;
- D.longoperatorlong(BigNumber);
-
为了提高函数调用的实际运行速度,可以将较简单的函数定义为( )。
- A.内联函数
- B.重载函数
- C.递归函数
- D.函数模板
-
类MyClass的定义如下:
classMyClass
{
public:
MyClass(){value=0;}
SetVariable(inti){valtic=i;}
private:
intvalue;
};
MyClass*P,my;p=&my;
则对下列语句序列正确的描述是( )。
- A.语句p=&my;是把对象my赋值给指针变量P
- B.语句MyClass*P,my;会调用两次类MyClass的构造函数
- C.对语句*P.SetVariable(5)的调用是正确的
- D.语句P->SetVariable(5)与语句my.SetVariable(5)等价
-
在长度为n的有序线性表中进行二分查找,最坏情况下需要比较的次数是( )。
- A.O(n)
- B.O(n2)
- C.O(log2n)
- D.O(nlog2n)
-
有以下程序:
#include
usingnamespacestd;
classA
{private:
inta:
public:
- A(inti) {a=i;} voiddisp() {cout
- intb; public:
- B(intj) {b=j;} voiddisp() {cout
- intC; public:
- c(intk):A(k-2),B(k+2) {c=k; } voiddisp() {
- a::disp();
- B::disp();
- COUt<
- intmain() {
- Cobj(10); obj.disp(); return0; } 程序执行后的输出结果是( )。
- A(inti) {a=i;} voiddisp() {cout
-
设有定义“intx=2;”,下列表达式中,值不为6的是( )。
- A.X*=x+1
- B.x++,2*x
- C.x*=(1+x)
- D.2*x,x+=2
-
当派生类从一个基类保护继承时,基类中的一些成员在派生类中成为保护成员,这些成员在基类中原有的访问属性是( )。
- A.任何
- B.公有或保护
- C.保护或私有
- D.私有
-
如果进栈序列为e1、e2、e3、e4,则可能的出栈序列是( )。
- A.e3、e1、e4、e2
- B.e2、e4、e3、e1
- C.e3、e4、e1、e2
- D.任意顺序
-
有如下两个类定义:
classXX{
private:
doublexl;
protected:
doublex2;
public:
doublex3;
};
claseYY:protectedXX{
private:
doubleyl;
protected:
doubley2;
public:
doubley3;
};
在类YY中保护成员变量的个数是( )。
- A.1
- B.2
- C.3
- D.4
-
用树型结构表示实体之间联系的模型是( )。
- A.关系模型
- B.网状模型
- C.层次模型
- D.以上三个都是
-
若是对类BigNumber中重载的类型转换运算符long进行声明,下列选项中正确的是( )。
- A.operatorlong()const;
- B.operatorlong(BigNumber);
- C.10ngoperatorlong()const;
- D.10ngoperatorlong(BigNumber);
-
下列关于函数的描述中,错误的是( )。
- A.函数可以没有返回值
- B.函数可以没有参数
- C.函数可以是一个类的成员
- D.函数不能被定义为模板
-
有如下程序:
#include
usingnamespacestd;
classAA{
intn;
public:
- AA(intk):n(k){}
- intget(){returnn;}
- intget()const{returnn+1;} };
- intmain() {
- AAa(5);
- constAAb(6);
- cout
- A.55
- B.57
- C.75
-
假定已建立以下链表结构,且指针P和q已指向如下图所示的结点:
则下列选项中可将q所指点从链表中删除并释放该结点的语句组是( )。
- A.(*p).next=(*q).next;free(p);
- B.p=q->next;flee(q);
- C.p=q;free(q);
- D.p->next=q->next;free(q);
-
有下列程序:
#include
#include"string.h"
voidfun(char*s[],intn)
{
char*t;inti,j
for(i=0;i
for(j=i+1;j
if(strlen(s[i]>strlen(s[j])){t=s[i];s[i]=s
[j];s[j]=t;}
}
voidmain( )
{
char*ss[]=("bcc","bbcc","xy","aaaacc","aab—
cc"};
fun(ss,5);printf("%s,%s\n",ss[O],ss[4]);}
程序的运行结果是( )。
- A.xy,aaaacc
- B.aaaacc,xy
- C.bcc,aabcc
- D.aabcc,bcc
-
执行下列语句序列:
inti=0;while(i<25)i+=3;cout<
输出结果是( )。
- A.24
- B.25
- C.27
- D.28
-
有如下程序:
#include
Usingnamespacestd;
classBase{
public:
Base(intx=O):valB(x){cout<
~Base( ){cout<
Private:
intvalB:
};
classDerived:publicBase{
public:
Derived(intX=0,inty=0):Base(x),valD(y)(cout<
~Derived( ){cout<
private:
intvalD;
};
intmain( ){
Derivedobj12(2,3);
return0;
}
运行时的输出结果是( )。
- A.2332
- B.2323
- C.3232
- D.3223
-
有下列程序:
#include
intf(intx,inty) {return((y-x)*x);}
voidmain( )
{inta=3,b=4,c=5,d;
d=f(f(a,b),f(a,c));
printf("%d\n",d);
}
程序运行后的输出结果是( )。
- A.10
- B.9
- C.8
- D.7
-
有下列程序:
#include
intfun(inta.intb)
{if(b==0)relurna;
elsereturn(fun(--a,--b));
}
voidmain( )
{printf("%d\n",fun(4,2));}
程序的运行结果是( )。
- A.1
- B.2
- C.3
- D.4
-
如果表达式-x/y中的“--”和“/”是作为友元函数重载的运算符,采用运算符函数调用格式,该表达式还可表示为( )。
- A.operator/(x.operator--(),y);
- B.operator/(operator--(x),y);
- C.X.operator--().operator/(y);
- D.y.operator/(operator--(x));