版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2023年四川省巴中市全国计算机等级考试C++语言程序设计预测试题(含答案)学校:________班级:________姓名:________考号:________
一、1.选择题(10题)1.C++语言中while循环和do-while循环的主要区别是
A.do-while的循环体至少无条件执行一次
B.while的循环控制条件比do-while的循环控制条件严格
C.do-while允许从外部转到循环体内
D.do-while的循环体不能是复合语句
2.以下程序中,错误的行为
①#include<iostream.h>②classA③{④public:⑤intn=2;⑥A(intval){cout<<val<<end1;}⑦~A(){};⑧};⑨voidmain()⑩{(11)Aa(0);(12)}
A.⑤B.⑥C.⑦D.(11)
3.下面程序的结果是()。#include"iostream.h"voidmain(){char*str:str="test!";cout<<str[5]:}
A.程序错误B.!C.'\0'D.为空字符
4.派生类的对象对它的基类成员中()是可以访问的。
A.公有继承的公有成员B.公有继承的私有成员C.公有继承的保护成员D.私有继承的公有成员
5.while和do-while循环的主要区别是()。
A.do-while的循环体至少无条件执行一次
B.while的循环控制条件比do-while的循环控制条件更严格
C.do-while允许从外部转到循环体内
D.do-while的循环体不能是复合语句
6.有关析构函数的说法不正确的是()。
A.析构函数有且只有一个
B.析构函数无任何函数类型
C.析构函数和构造函数一样可以有形参
D.析构函数的作用是在对象被撤销时收回先前分配的内存空间
7.开发软件所需的高成本和产品的低质量之间有着尖锐的矛盾,这种现象称做()。
A.软件投机B.软件危机C.软件工程D.软件产生
8.下列程序的运行结果是#include<iostream.h>voidfun(int*a,int*b){int*k;k=a;a=b;b=k;}voidmain(){inta=3,b=6,*x=&a,*y=&b;fun(x,y);cout<<a<<""<<b;}
A.63B.36C.编译出错D.O0
9.for(intx=0,y=0;!x&&y<=5;y++)语句执行循环的次数是
A.0B.5C.6D.无数次
10.软件工程的出现是由于()。A.A.程序设计方法学的影响B.软件产业化的需要C.软件危机的出现D.计算机的发展
二、单选题(13题)11.下面关于c+十语言变量的叙述错误的是()。
A.c++语言中变量分为aut0、static、extem和register4种存储类型
B.自动变量和外部变量的作用域为整个程序
C.内部静态变量的作用域是定义它的函数
D.外部静态变量的作用域是定义它的文件
12.下列叙述中正确的是__________
A.栈是一种先进先出的线性表B.队列是一种后进先出的线性表C.栈与队列都是非线性结构D.以上三种说法都不对
13.有如下程序段:inti=5;while(inti=0){cout<<'*';i--;}运行时输出"*"的个数是_________。A.0B.1C.5D.无穷
14.在数据库设计中,将E~R图转换成关系数据模型的过程属于()。
A.需求分析阶段B.概念设计阶段C.逻辑设计阶段D.物理设计阶段
15.下列关于类模板的描述中,错误的是()。
A.类模板的成员函数都是模板函数B.可以为类模板参数设置默认值C.类模板描述了一组类D.类模板中只允许有一个类型参数
16.数据库系统的三级模式不包括()。
A.概念模式B.内模式C.外模式D.数据模式
17.只能作为成员函数重载的是
A.=B.++C.*D.new
18.算法的空间复杂度是指()。
A.算法在执行过程中所需要的计算机存储空间
B.算法所处理的数据量
C.算法程序中的语句或指令条数
D.算法在执行过程中所需要的临时工作单元数
19.对于类定义:classA{public:virtualvoidfuncl(){}voidfunc2(){}};classB:publicA{public:voidfuncl(){cout<<"classBfunc1"<<endl;}virtualvoidfunc2(){cout<<"classBfunc2"<<endl;}};下面正确的叙述是()。A.A::func2()和B::func1()都赵虚函数
B.A::rune2()和B::func1()都不是虚函数
C.B::func1()是虚函数,而A::fune2()不是虚函数
D.B::func1()不是虚函数,而A::func2()是虚函数
20.若有定义语句“doublex[5]={1.0,2.0,3.0,4.0,5.0},*p=x”,则错误引用X数组元素的是()。
A.*pB.x[5]C.*(p+1)D.*x
21.关于类和对象描述错误的是()。
A.对象(Object)是现实世界中的客观事物,对象具有确定的属性
B.类是具有相同属性和行为的一组对象的集合
C.对象是类的抽象,类是对象的实例
D.类是对象的抽象,对象是类的实例
22.有下列程序:#include
voidmain(){inti=5;do{if(i%3=1)if(i%5==2){printf("*%d",i);break;}i++:}while(i!=O);printf("\n");}程序的运行结果是()。
A.*7B.*3*5C.*5D.*2*6
23.有如下程序:#include<iostream>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.BBBB.BBDC.DBBD.DBD
三、2.填空题(12题)24.以下程序的执行结果是________。
#include<iostream.h>
#include<iomanip.h>
voidmain()
{
cout.fil('*'):
cout.width(10);
cout<<setiosflags(ios::hex)<<160<<endl;
cout.width(8);
cout<<160<<endl;
cout.width(4):
cout<<160<<endl;
25.根据下面的主程序,完成类的一种构造函数的最简单形式。
#include<iostream.h>
classbase
{
private:
intnum;
public:
【】;
};
voidmain()
{
basetry(6);
}
26.以下程序的输出结果是【】。
#include<iostream.h>
voidmain()
}
inta=0;
a+=(a=8);
cout<<a;
}
27.C++是通过______译成目标语言的。
28.下面程序的输出结果为:Base::fun,请将程序补充完整。
#include<iostream.h>
classBase{
public:
【】fun(){cout<<"Base::fun"<<end1;}
};
classDerived:publicBase{
public:
【】fun(){cout<<"Derived::fun"<<end1;}
};
intmain()
{
Basea,*pb;
Derivedb;
pb=&b;
pb->tim();
return0;
}
29.在面向对象方法中,______描述的是具有相似属性与操作的一组对象。
30.当执行cin语句时,从键盘上输入每个数据后必须输入一个______,然后才可以接着输入下一个数据。
31.在类中定义和实现的函数可以称为【】。
32.排序是计算机程序设计中的一种重要操作,常见的排序方法有插入排序、【】和选择排序等。
33.面向对象的模型中,最基本的概念是对象和【】。
34.假设inta=1,b=2;,则表达式(++a/b)*b--的值为【】。
35.若要把类B定义为类A的友元类,则应在类A的定义中加入语句______。
四、程序改错题(10题)36.使用VC++6.0打开考生文件夹下的源程序文件1.cpp。本程序要求输入一个字符串,然后将其中的小写字母改成大写字母,字符可能输入多行,当输入字符“?”时,默认字符输入结束,最后把结果输出到屏幕中。
注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在//******error******的下面。
试题程序:
#include<iostream.h>
voidmain
{
inti=0;
charstr[120];
cout<<"Enterastringendwith?."<<endl;
//********error********
cin.getline(str,120);
//********error********
while(str)
{
//********error********
if(str[i])=a)
str[i]=str[i]-a+A;
i++;
}
cout<<str<<endl;
return;
}
37.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错误,请改正错误,使程序正常运行,并且要求最后一个catch必须抛出执行的任何异常。
程序异常,输出信息为
error
O
ERROR
注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在//******error******的下面。
试题程序:
#include<iostream.h)
intmain
{
try
{
throw("error");
}
//********error********
catch(chars)
{
cout<<s<<endl;
}
try
{
throw((int)0);
}
//********error********
catch
{
cout<<i<<endl;
}
try
{
throw(O);
throw("error");
}
//********error********
catch
{
cout<<"ERROR"<<endl;
}
return0;
}38.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行有问题,请改正main函数中的错误,使程序的输出结果为:number=1number=10number=100注意:不要改动main函数,不能增加或删除行。也不能更改程序的结构,错误的语句在//******error******的下面。试题程序:#include<iostream.h>classTC{public:TC(inti){number=i;}voidSetNumber(intm){number=m;}intGetNumberconst{returnnumber;}voidPrintconst{cout<<"number="<<number<<endl;}private:intnumber;};voidmain{//********error********TCobjl;objl.Print;TCobj2(3);//********error********objl.number=10;//********error*‰******TC.SetNumber(100);objl.Print;obj2.Print;}
39.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行有问题,请改正main函数中的错误,使程序的输出结果为:
number=1
number=10
number=100
注意:不要改动main函数,不能增加或删除行。也不能更改程序的结构,错误的语句在//******error******的下面。
试题程序:
#include<iostream.h>
classTC
{
public:
TC(inti)
{
number=i;
}
voidSetNumber(intm)
{
number=m;
}
intGetNumberconst
{
returnnumber;
}
voidPrintconst
{
cout<<"number="<<number<<endl;
}
private:
intnumber;
};
voidmain
{
//********error********
TCobjl;
objl.Print;
TCobj2(3);
//********error********
objl.number=10;
//********error*‰******
TC.SetNumber(100);
objl.Print;
obj2.Print;
}
40.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错误,请改正错误,使程序正常运行,并且要求最后一个catch必须抛出执行的任何异常。程序异常,输出信息为errorOERROR注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在//******error******的下面。试题程序:#include<iostream.h)intmain{try{throw("error");}//********error********catch(chars){cout<<s<<endl;}try{throw((int)0);}//********error********catch{cout<<i<<endl;}try{throw(O);throw("error");}//********error********catch{cout<<"ERROR"<<endl;}return0;}41.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,输出的结果为Constructor,i=0,Destructor注意:错误的语句在//******error******的下面,修改该语句即可。试题程序:#include(iostream.h)classTC{inti;public:TC;voiddisplay;~TC;};//******error******TC:TC{cout<<"Constructor"<<",";i=0;)//******error******TC:display{tout<<"i="<<i<<","<<endl;}//******error******TC:TC{COUI<<"Destructor"<<endl:}voidmain{TCa;a.display;}42.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,但该程序运行有问题,请改正main函数中的错误,使该程序的输出结果正确。程序输出:88注意:错误的语句在/********error********/的下面。修改该语句即可,其他的语句不能修改。试题程序:#include(iostream.h>classCO{public:/********error********/staticintn=0:CO{n++:}~CO{n--:}}:/********error********/intCO::n;voidmain{COobj;COobj2[7];CO*C=NULL:c=&obj:/********error********/eout<<C.n<<endl;cout<<C0::n<<endl;}43.使用VC++6.0打开考生文件夹下的源程序文件1.cpp。本程序要求输入一个字符串,然后将其中的小写字母改成大写字母,字符可能输入多行,当输入字符“?”时,默认字符输入结束,最后把结果输出到屏幕中。注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在//******error******的下面。试题程序:#include<iostream.h>voidmain{inti=0;charstr[120];cout<<"Enterastringendwith?."<<endl;//********error********cin.getline(str,120);//********error********while(str){//********error********if(str[i])=a)str[i]=str[i]-a+A;i++;}cout<<str<<endl;return;}
44.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,并使程序输出的结果为:
sizeof(S1)=5
sizeof(s2)=10
sizeof(s3)=1
注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在//******error******的下面。
(1)不能删除assert()语句。
(2)只能修改后面的数字。
提示:assert函数如果为假,则会产生一个中断异常。
试题程序:
#include<iostream.h>
#include<assert.h>
voidmain()
{
char*s1="abc":
//********error********
assert(sizeof(s1)==3):
cout<<"sizeof(s1)=5"<<endl;
chars2[10]="ab":
//********error********
assert(sizeof(s2)==2);
cout<<"sizeof(s2)=10"<<endl;
chars3=23:
//********error********
assert(sizeof(s3)==4);
cout<<"sizeof(s3)=1"<<endl;
return;
}
45.使用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<<endl;
return0;
}
五、综合应用题(2题)46.使用VC++6.0打开考生文件夹下的源程序文件3.cpp。类People包括姓名和年龄两个字段。函数fun获得年龄比较大的人的姓名,然后输出这个姓名到屏幕。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。(1)完成类的构造函数功能,请在注释1后添加适当的语句。(2)完成构造函数对姓名的赋值,请在注释2后添加适当的语句。(3)定义类的友元函数fun,请在注释3后添加适当的语句。(4)补充函数fun的年龄比较功能,请在注释4后添加适当的语句。注意:增加或者修改代码的位置已经用符号表示出来,请不要修改其他的程序代码。试题程序:#include<iostream.h>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<<s<<endl:return;}47.使用VC++6.0打开考生文件夹下的源程序文件3.cpp。其中定义的类不完整,按要求完成下列操作,将类的定义补充完整。(1)定义类的公有数据成员函数N0、Name[32],其中N0是int型的数据,Name[32]为字符型。请在注释1后添加适当的语句。(2)完成函数Set的定义,分别设置N0和Name的值,请在注释2后添加适当的语句。(3)完成函数print,请在注释3后添加适当的语句,输出结果如下:N0=12345Name=HelloWorld!(4)添加默认构造函数,设置N0为0,Name为空,请在注释4后添加适当的语句。注意:增加或者修改代码的位置已经用符号表示出来,请不要修改其他的程序代码。试题程序:#include<iostream.h>classTC{public://********1********//********2********{No=no;for(inti=0;strName[i]!=0;i++){Name[i]=strName[i];Name[i+1]=0;}}voidprint(){//********3********}TC(){//********4********)};intmain(){TCstu:stu.Set(12345,"HelloWorld!");stu.print();return0;}六、3.综合应用题(2题)48.使用VC6打开考生文件夹下的工程MyProj4。此工程包含一个源程序文件MyMain4.cpp,该程序将通过把类Distance定义为类Point的友元类来实现计算两点之间距离的功能。但程序中定义的类并不完整。请按要求完成下列操作,把类的定义补充完整。
①把类Distance定义为类Point的友元类。请在注释“//**1**”之后添加适当的语句。
②定义类Point的构造函数,完成给私有数据成员x和y的赋值,并且两个参数的默认值都为0。请在注释“//**2**”之后添加适当的语句。
③完成类Distance的成员函数Dis(Point&p,Point&q)的定义,并在其中计算点p、q之间的距离,并且返回结果。假设两点之间的距离distance=sqrt((p.x-q.x)*(p.x-q.x)+(p.y-q.y)*(p.y-q.y))。请在注释“//**3**”之后添加适当的语句。
源程序文件MyMain4.cpp中的程序清单如下:
//MyMain4.cpp
#include<iostream>
#include<cmath>
usingnamespacestd;
classPoint
{
public:
//**1**
//定义类Point的构造函数
//**2**
voidpint()
{
cout<<"x="<<x<<end1;
cout<<"y="<<y<<end1;
}
private:
floatx,y;
};
classDistance
{
public:
floatDis(Point&p,Point&q);
};
floatDistance::Dis(Point&p,Point&q)
{
//**3**
}
intmain()
{
Pointp(10,10),q(20,20);
Distanced;
cout<<d.Dis(p,q)<<end1;
return0;
}
49.使用VC6打开考生文件夹下的工程test30_3。此工程包含一个test30_3.cpp,其中定义了类A、A1和A2,其中A1类由A类公有派生,A2类由A1类公有派生。上述三个类的定义并不完整,请按要求完成下列操作,将程序补充完整。
(1)定义类A的构造函数,该构造函数有一个整型的参数x,在构造函数中请将x赋值给数据成员a。请在注释“//**1**”之后添加适当的语句。
(2)定义类A1的构造函数,该构造函数有两个整型的参数x和y,在构造函数中请将x赋值给数据成员b,将y作为基类A构造函数的参数值传入。请在注释“//**2**”之后添加适当的语句。
(3)定义类A2的构造函数,该构造函数有三个整型的参数x,y和2,在构造函数中请将x赋值给数据成员c,将y和z分别赋值给基类A1构造函数的参数x和y。请在注释“//**3**”之后添加适当的语句。
(4)完成类A2的成员函数show的定义,该函数调用基类成员函数,输出基类数据成员a和b及类A2自身的数据成员c的值,上述三个值在输出时以空格隔开。请在注释“//**4**”之后添加适当的语句。
注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。
程序输出结果如下:
9
6
962
源程序文件test30_3.cpp清单如下:
#include<iostream.h>
classA
{
inta;
public:
//**1**
intgeta(){returna;}
};
classA1:publicA
{
intb;
public:
//**2**
intgetb(){returnb;}
};
classA2:publicA1
{
intc;
public:
//**3**
voidshow()
{
//**4**
}
};
voidmain()
{
A2a(2,6,9);
cout<<a.geta()<<end1;
cout<<a,getb()<<end1;
a.show();
}
参考答案
1.A解析:本题考核C++语言中while循环和do-while循环之间的区别。do-while语句与while语句不同的是,do-while循环中的<语句>至少会执行一次,而while语句中当条件在第一次循环就不满足时,语句一次也不会执行
2.A解析:C抖语言中规定在类体中不允许对所定义的数据成员进行初始化。
3.D解析:'\\0'输出为不显示,只代表一个字符串的结束。注意:C++语言中各种字符转义序列的意义和应用。
4.A
5.A解析:while是先判断条件再执行语句;do-while则是先执行一次语句再判断条件,从而决定是否继续再执行循环体中的语句,这正是二者主要区别。
6.D解析:析构函数是在对象被撤销之前执行,但析构函数本身并不会收回先前分配的内存空间。
7.B
8.B解析:函数的参数不仅可以是整型、实型、字符型等数据,还可以是指针类型。它的作用是将一个变量的地址传送到另一个函数中去。在本题解析中,我们试图将这一问题解释清楚!
大家可以考虑一下利用下面这函数可不可以实现a和b的互换。
swap(intx,inty)
{intt;
t=x;
x=y;
y=t
}
如果在main函数中用swap(a,b),会有什么结果呢?在函数调用开始时,a的值传送给x,b的值传递给y。执行完swap()函数后,x和y的值是互换了,但main()函数中的a和b并未互换。也就是说由于“单向传递”的“值传递”方式,形参值的改变无法传递给实参。
为了使在函数中改变了的变量值能被main()函数所闻,不能采取上述办法,而应该用指针变量做函数参数。布函数执行过程中使指针变量所指向的变量值发生变化,函数调用结束后,这些变量值的变化被保留下来,这样就实现了调用函数改变变量的值,在主凋函数中使用这些改变了的值的目的。
swap(int*p1,int*p2)
{intp;
p=*p1;
*p1=*P2;
*p2=p;
}
注意交换*P1和*p2的值是如何实现的,如果写成下面这样就有问题了!
swap(int*P1,int*p2)
{int*P;
*p=*P1;/*此语句有问题*/
*p1=*p2;
*p2=*p:
}
*p1就是a,是整型变量。而*p是指针变量p所指向的变量,但p中并无确切地址,用*p可能会造成破坏系统的正常工作状态。应该将*p1的值赋给一个整型变量,用整型变量作为过渡变量实现*P1和*p2的交换。
9.C解析:本题考核for循环语句。题中x=0,则!x永远为真,对于条件表达式“!x&&y<=5”只考虑“y<=5”,由于每次循环y都增加1,而且y从0开始到5。所以可知总共循环了6次。
10.C解析:软件工程的基本概念。软件工程概念的出现源自于软件危机。为了消除软件危机,通过认真研究解决软件危机的方法,认识到软件工程是使计算机软件走向工程科学的途径,逐步形成了软件工程的概念。
11.B自动变量是函数体或分程序内定义的变量,它的作用域在所定义的函数体内或分程序体内。
12.D【答案】:D
【知识点】:栈和队列
【解析】:栈和队列都是线性结构,所以选项C错误;栈是一种先进后出的线性表,故选项A错误;队列是一种先进先出的线性表,故选项B错误,所以选D。
13.A本题主要考查了while循环语句的使用。while语句的语法格式为:while(表达式)<语句>while语句的执行过程是:\r\n(1)计算<表达式>的值,如果此值不等于0(即循环条件为"真"),则转向步骤(2);如果此值等于0(即循环条件为"假"),则转向步骤(4)。\r\n(2)执行一遍循环体<语句>;(3)转向步骤(1);(4)结束while循环。\r\n本题的表达式声明了变量i并赋初值0,因此循环条件为"假",结束while循环。故while语句循环了0次,因此输出"*"的个数是0。
14.CE—R图转换成关系模型数据则是把图形分析出来的联系反映到数据库中,即设计出表,所以属于逻辑设计阶段。
15.DD。【解析】类模板是一系列相关类的模板,类成员组成相同,成员函数的源代码形式相同,所不同的是所针对的类型。类模板的成员函数都是模板函数,在用类模板定义对象时,由于没有像函数实参表这样的额外信息渠道,因此无法按函数模板的方式省略模板实参。但可以为类模板的参数设置默认值。由此可知应选D。
16.D数据库系统的3级模式是概念模式、外模式和内模式。故答案为D选项。
17.A解析:运算符重载为成员函数的形式为:函数类型operator运算符(形参表){函数体;};运算符重载为友元函数的形式为:friend函数类型operator运算符(形参表){函数体;}。一般来讲,单目运算符最好重载为成员函数,双目运算符最好重载为友元函数。=、[]、()、->以及所有的类型转换运算符只能作为成员函数重载。
18.A算法的空间复杂度是指算法在执行过程中所需要的内存空间。所以选择A项。
19.CC。【解析】基类中说明的虚函数,在派生类中自然就是虚函数,所以类B中funcl是虚函数;而类A中的func2没有被关键字virtual修饰;所以不是虚函数。
20.BB。【解析】选项B中x[5]数组下标越界,数组的下标是从0开始的。
21.CC。【解析】C++中,类是用户自定义的一种数据类型,对象是类的实例,类定义了属于该类的所有对象的共同特性。一个类作为一种数据类型,它可以定义多个对象。
22.AA。【解析】本题考查d0…while循环,先执行循环体,再判断条件是否成立,函数实现的功能是找出满足一个数,它除3时余1,除5时余2,然后打印“*”和这个数从5开始,等于7时恰好符合条件,输出,最后循环结束。
23.CC。【解析】本题考查的知识点是虚函数与多态性。在成员函数声明的前面加上virtual修饰,即把该函数声明为虚函数。在C++中,一个基类指针(或引用)可以用于指向它的派生类对象,而且通过这样的指针(或引用)调用虚函数时,被调用的是该指针(或引用)实际所指向的对象类的那个重定义版本。故本题最终输出结果为DBB。
24.********a0******a0**a0
25.base(intn){}base(intn){}解析:注意,根据main函数中对类base的使用情况可知,base类必须提供整型单参构造函数,同时要求构造其最简单的形式,故函数体为空。
26.1616解析:赋值表达式的值就是所赋值变量的值,本题中a+=8相当于a=a+8,对表达式逐步进行求解:a+=(a=8)此时,a的值由于赋值为8,而不是o
a+=8
a=a+8
a=16
注意:要掌握“+=”等相关运算符的用法。
27.编译程序编译程序
28.virtualvoidvoidvirtualvoid\r\nvoid解析:本题考核虚函数的使用。在C++中,一个基类指针(或引用)可以用于指向它的派生类对象,而且通过这样的指针(或引用)调用虚函数时,被调用的是该指针(或引用)实际指向的对象类的那个重定义版本,这样的调用称为多态调用。基类Base和派生类Derived中都定义了成员函数fun,但是有不同的实现。程序最后输出的结果为:Base::fun,表明通过对象指针pb调用的函数版本为派生类中定义的,只有把基类的fun函数定义为虚函数,才能满足要求。同时通过函数fun的定义可知函数的返回类型为void。
29.类类
30.空白符空白符
31.内联函数内联函数解析:C++规定,在类定义体内定义和实现的函数都是内联函数。在类定义体外实现的函数可以通过在函数说明和定义上分别加上inline来表示该函数是内联函数,否则就不是内联函数。
32.交换排序交换排序解析:常见的排序方法有插入排序(包括简单插入排序法和希尔排序法等)、交换排序(包括冒泡排序和快速排序法等)和选择排序(包括简单选择排序和堆排序等)。注意:常见的排序方法及其作用机制和区别。
33.类类解析:面向对象模型中,最基个的概念是对象和类,,对象是现实世界中实体的模型化;将属性集和方法集相同的所有对象组合在一起,可以构成一个类。
34.22解析:运算符++的优先级高于双目运算符/,所以括号中的运算为2/2,最后的结果为2/2*2。
35.friendclassB
36.(1)应改为“ein.getline(str,120,?);”。
\n(2)应改为“while(str[i])”。
\n(3)应改为“if(str[i]>=a&&str[i]<=2)”。
\n【解析】本题中要求以输入字符“?”为结束符,用于字符输入的流成员函数getline函数读入一行字符,格式为“cin.getline(字符数组,字符个数,终止标志字符)”,所以第1处改为“cin.getline(str,120,?);”。第2处的“while(str)”语句应该是判断字符串str中的每一个字符是否为结束符,若不是结束符,在循环中判断每一个字符是否为小写,若为小写,则转换。所以应该修改为“while(str[i])”。第3处的“if(str[i]>=a)”语句是判断字符str[i]是否为小写字符,而现有的语句只是判断字符是否大于a,但是小写字符应该是a到2,所以修改为“if(str[i]>=a&&str[i]>=z)”。
37.(1)应改为“catch(char*s)”。(2)应改为“cateh(inti)”。
(3)应改为“catch(…)”。
【解析】本题中第1个标识前的异常抛出语句为“throw("error");”,其中的类型为字符串。所以对应的异常捕捉语句catch中应该符合这个类型,而程序中给出的语句“catch(chars)”是字符型的,所以第1处的语句修改为“catch(char*S)”。第2个标识前的异常抛出语句为“throw((int)0);”,其中的类型为int。对应的异常捕捉语句catch中应该符合这个类型,所以补充catch子句中的类型,否则如果找不到匹配的catch块,系统就会调用一个系统函数,使程序终止运行。即第2处的语句修改为“catch(inti)”。如果在catch子句中没有指定异常信息的类型,那么就用删节号“…”表示它可以捕捉任何类型的异常信息,即修改为“catch(…)”。38.(1)应改为“TCobjl(1);”。(2)应改为“0bj1.SetNumber(10);”。(3)应改为“0bj2.SelNumber(100);”。【解析】本题第1处的“TCobjl;”语句是声明TC类的对象0bj1,根据TC类构造函数的定义TC(inti),存在整型参数,并且题目要求第一个输出结果两1,所以补全参数1,即第1处的“TCobjl(1);”。第2处处的“objl.number=10;”应该是调用成员函数SetNumber赋值。在C++中成员函数的使用形式应该是:对象名.成员函数,所以修改为“obj1.SetNumber(10);”。类是对象的抽象,而对象是类的具体实例。第3处“TC.SetNumber(100);”语句中的TC为类,并不是对象,这里应该使用定义的对象,即obj2,所以将语句修改为“obj2.SetNumber(100);”。
39.(1)应改为“TCobjl(1);”。
\n(2)应改为“0bj1.SetNumber(10);”。
\n(3)应改为“0bj2.SelNumber(100);”。
\n【解析】本题第1处的“TCobjl;”语句是声明TC类的对象0bj1,根据TC类构造函数的定义TC(inti),存在整型参数,并且题目要求第一个输出结果两1,所以补全参数1,即第1处的“TCobjl(1);”。第2处处的“objl.number=10;”应该是调用成员函数SetNumber赋值。在C++中成员函数的使用形式应该是:对象名.成员函数,所以修改为“obj1.SetNumber(10);”。类是对象的抽象,而对象是类的具体实例。第3处“TC.SetNumber(100);”语句中的TC为类,并不是对象,这里应该使用定义的对象,即obj2,所以将语句修改为“obj2.SetNumber(100);”。
40.(1)应改为“catch(char*s)”。(2)应改为“cateh(inti)”。(3)应改为“catch(…)”。【解析】本题中第1个标识前的异常抛出语句为“throw("error");”,其中的类型为字符串。所以对应的异常捕捉语句catch中应该符合这个类型,而程序中给出的语句“catch(chars)”是字符型的,所以第1处的语句修改为“catch(char*S)”。第2个标识前的异常抛出语句为“throw((int)0);”,其中的类型为int。对应的异常捕捉语句catch中应该符合这个类型,所以补充catch子句中的类型,否则如果找不到匹配的catch块,系统就会调用一个系统函数,使程序终止运行。即第2处的语句修改为“catch(inti)”。如果在catch子句中没有指定异常信息的类型,那么就用删节号“…”表示它可以捕捉任何类型的异常信息,即修改为“catch(…)”。41.(1)应改为“TC::TC”。(2)应改为“voidTC::display”。(3)应改为“TC::~TC”。【解析】在类的外部定义成员函数时,必须在成员函数前面加上类名和作用域运算符“::”,作用域运算符用采表示某个成员属于哪个类,使用格式为“(类名)::<成员函数>((参数函数)),因此第1处应改为“TC::TC”,默认构造函数没有参数。由第2处“TC::display”后的语句看,这是在类外实现TC函数,因此也有作用域运算符使用错误问题,display函数返回值为void,因此第2处的语句应改为“voidTC::display”。由第3处的语句“TC::TC”可知,显然这里是在类外实现析构函数,析构函数是一个特殊的函数,它的名称和类名相同,并在前面加“~”字符,用采与构造函数加以区别,因此第3处的语句应改为“TC::~TC”。42.(1)“staticintn=O”应改为“staticintn;”。(2)“intCO::n;”应改为“intCO::n=0;”。(3)“cout<<c.n<<endl;”应改为“cout<<c->n<<endl;”。【解析】本题要在屏幕上输出两个字符,首先要静态变量初始化,第1处应改为“staticintn;”,第2处要给n赋值,第3处输出时引用c的对象,应改为“cout<<c->n<<endl;”。43.(1)应改为“ein.getline(str,120,?);”。
(2)应改为“while(str[i])”。
(3)应改为“if(str[i]>=a&&str[i]<=2)”。
【解析】本题中要求以输入字符“?”为结束符,用于字符输入的流成员函数getline函数读入一行字符,格式为“cin.getline(字符数组,字符个数,终止标志字符)”,所以第1处改为“cin.getline(str,120,?);”。第2处的“while(str)”语句应该是判断字符串str中的每一个字符是否为结束符,若不是结束符,在循环中判断每一个字符是否为小写,若为小写,则转换。所以应该修改为“while(str[i])”。第3处的“if(str[i]>=a)”语句是判断字符str[i]是否为小写字符,而现有的语句只是判断字符是否大于a,但是小写字符应该是a到2,所以修改为“if(str[i]>=a&&str[i]>=z)”。
44.(1)应改为“assert(sizeof(s1)==4);”。
\n(2)应改为“assert(sizeof(s2)==1O);”。
\n(3)应改为“assert(sizeof(s3)==1);”。
\n【解析】assert函数如果为假,则会产生一个中断异常。所以要让它正常执行输出结果,那么assert函数只有为真,才不会产生中断异常。“assert(sizeof(s1)==3);”语句中“sizeof(s1)==3”为假,这会使程序产生异常,不能正常执行。因为str1的值为abc,但是它还有一个尾符,它的长度应该是4,而不是3,所以在第1处修改为“assert(sizeof(s1)==4);”。str2[10]说明,str2的空间为10,在第2处修改为“assert(sizeof(s2)==10);”。charstr3=23;语句说明23是字符,所占存储空间为1,所以修改为“assert(sizeof(s3)==1);”。
45.(1)应添加“public:”。
\n(2)“inti”应改为“inti(10);”。
\n(3)“i++;”应改为“i--;”。
\n【解析】本题主要考查的是成员的访问属性。成员的访问属性有公有、保护和私有3种,而默认的访问属性为私有,只有公有成员才能通过类的对象被访问。故应在构造函数前添加“public:”,否则该类无法被实例化。变量的初始化可以通过“=”号,也可以和初始化对象一样添加构造参数,题目已要求使用后者。本题要求输出5个数,while的循环变量i每次减1,在i>5时循环,故i初始化应为10。若循环中i每次增1,则循环永远不会退出。46.(1)应添加“People(char*sUserName,intnOld)”。(2)应添加“m_UserName[i]=0;”。(3)应添加“friendvoidfun(char*s,People&personl,People&person2);”。(4)将“if”补充完整为“if(personl.m_Old)person2.mOld)”。【解析】本题第1处要求“完成类的构造函数”。根据“classPeople”语句知道People为类,所以类People的构造函数名为People,根据第1处的大括弧中的语句知道函数中的参数为数组sUserName存放姓名,整型nOld存放年龄,所以补充构造函数定义为“People(char*sUserName,intnOtd)”。第2处要求“完成构造函数对姓名的贼值”。第2处补全姓名赋值,即“m_Us
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年前台服务能力测试含答案
- 护理服务沟通技巧培训
- 护理护理科研方法教学课件与教案分享
- 江苏苏锡常镇四市2026届高三下学期教学情况调研(一)数学试题(含答案)
- 护理应用解剖学理论精讲
- 护理团队建设与团队合作
- 基于工业4.0的水泥行业转型研究报告
- 轮机员日常维护记录表
- 建阳区城市排水系统提升工程(老城关片区)水土保持方案报告表
- 广安市前锋区光华路中段市政道路工程水土保持方案报告表
- 2025年部编版道德与法治五年级下册第一单元复习课教案
- 三方股权代持协议书范本
- DB37T3418-2018标准化池塘建设改造技术规范
- 2025年上海中烟机械技术中心限责任公司招聘高频重点提升(共500题)附带答案详解
- 铁路劳动安全 课件 第三章 防洪抢险
- 《Animate CC 动画制作案例教程(第2版)》中职全套教学课件
- 【MOOC】数据库系统(上):模型与语言-哈尔滨工业大学 中国大学慕课MOOC答案
- 医院品管圈(QCC)活动成果报告书-基于QFD 润心服务改善 ICU 患者及家属就医体验
- 基于PLC的物料分拣系统设计
- JJG 693-2011可燃气体检测报警器
- 《低压配电设备安装与调试》课件 劳动 学习任务 3 落地式配电柜安装与调试
评论
0/150
提交评论