2023年湖南省常德市全国计算机等级考试C++语言程序设计模拟考试(含答案)_第1页
2023年湖南省常德市全国计算机等级考试C++语言程序设计模拟考试(含答案)_第2页
2023年湖南省常德市全国计算机等级考试C++语言程序设计模拟考试(含答案)_第3页
2023年湖南省常德市全国计算机等级考试C++语言程序设计模拟考试(含答案)_第4页
2023年湖南省常德市全国计算机等级考试C++语言程序设计模拟考试(含答案)_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2023年湖南省常德市全国计算机等级考试C++语言程序设计模拟考试(含答案)学校:________班级:________姓名:________考号:________

一、1.选择题(10题)1.不合法的main函数命令行参数表示形式是()。

A.main(inta,char*c[1]

B.main(intarc,char**arv)

C.main(intargc,char*argv)

D.main(intargy,char*argc[])

2.以下程序段的输出结果是()。charstr[]="BCDE",*ptr=str;cout<<*(p+4)<<end1;

A.字符E的地址B.0C.69D.不确定

3.下列字符串中,正确的C++标识符是()。

A.foo-1B.2bC.newD._256

4.以下各选项中,()中都是C++语言保留字。

A.cout,operator,this

B.short,string,static

C.if,while,>=

D.private,public,printf

5.C++语言做了很多改进,下列描述中_______使得C语言发生了质变,即从面向过程变成面向对象。

A.增加了一些新的运算符B.允许函数重载,并允许设置默认参数C.规定函数说明必须用原型D.引进类和对象的概念

6.一个类的友元函数能够访问该类的()。

A.私有成员B.保护成员C.公有成员D.所有成员

7.以下非法的赋值表达式是

A.n=(i=2,++i);B.j++;C.++(i+1);D.x=j>0;

8.下列工具中为需求分析常用工具的是()。

A.PADB.PFDC.N-SD.DFD

9.函数fun的返回值是

fun(char*a,char*b)

{intnum=0,n=0;

while(*(a+num)!='\0')num++;

while(b[n]){*(a+num)=b[n];num++;n++;}

returnnum;

}

A.字符串a的长度B.字符串b的长度C.字符串a和b的长度之差D.字符串a和b的长度之和

10.语句cout<<(a=2)&&(b=-2);的输出结果是

A.无输出B.结果不确定C.-1D.1

二、单选题(13题)11.面向对象方法中,继承是指()。

A.一组对象所具有的相似性质B.一个对象具有另一个对象的性质C.各对象之间的共同性质D.类之间共享属性和操作的机制

12.有下列程序:

#include<stdi0.h>

voidmain()

{intx=1,y=2,z=3;

if(x>y)

if(y<z)print{("%d",++z);

elseprintf("%d",++y);

printf(”%d\n”,x++);

}

程序的运行结果是()。

A.A.331B.41C.2D.1

13.下列数据模型中,具有坚实理论基础的是()。

A.层次模型B.网状模型C.关系模型D.以上3个都是

14.在______情况下适宜采用inline定义内联函数。

A.函数体含有循环语句B.函数体含有递归语句C.函数代码少、频繁调用D.函数代码多、不常调用

15.开发大型软件时,产生困难的根本原因是()

A.大系统的复杂性B.人员知识不足C.客观世界千变万化D.时间紧、任务重

16.静态数据成员在()进行初始化。

A.成员函数列表B.类体外C.构造函数D.成员函数

17.有定义语句“chars[10];”,若要从终端给S输入5个字符,错误的输入语句是()。

A.A.gets(&s0);

B.B.scanf("%s",s+1);

C.C.gets(s);

D.D.scanf("%s",s[1]);

18.有如下程序:

#include<iostream>

usingnamespacestd;

voidfunction2(intn);

voidfunctionl(intn):{

if(n<=0)return;

function2(n-2);

}

voidfunction2(intn){

if(n<=O)return;

functionl(n-1);

}

intmain(){

functionl(5);

return0;

}

下列关于程序运行情况的描述中,正确的是()。

A.A.functionl运行1次,function2运行2次

B.functionl运行2次,function2运行l次

C.functionl运行2次,function2运行3次

D.functionl运行2次,function2运行2次

19.下列不是描述类的成员函数的是()

A.构造函数B.析构函数C.友元函数D.拷贝构造函数

20.下列有关继承和派生的叙述中,正确的是()。

A.派生类不彘访问基类的保护成员

B.作为虚基类的类不能被实例化

C.派生类应当向基类的构造函数传递参数

D.虚函数必须在派生类中重新实现

21.已知类MyClass的定义如下:ClassMyClass{public:MyClass(intd){data=d;}~MyClass(){}private:intdata;};下列对MyClass类对象数组的定义和初始化语句中,正确的是()。A.MyClassarray[2];

B.MyClassarray[2]={MyClass(5)};

C.MyClassarray[2]={MyClass(5),Myclass(6)};

D.MyClass*array=newMyClass[2];

22.下列程序输出的结果是()。#include<stdio.h>fun1(chara,charb){charc;c=a;a=b;b=c;}fun2(char*a,charb){charc;c=*a;*a=b;b=c;}fun3(char*a,char*b){charc;c=*a;*a=*b;*b=c;}voidmain(){chara,b;a='A';b='B';fun1(a,b);putchar(a);putchar(b);a='A';b='B';fun2(&a,b);putchar(a);putchar(b);a='A';b='B';fun3(&a,&b);putchar(a);putchar(b);putchar('\n');}

A.BABBABB.ABBBBAC.ABBABAD.ABABBA

23.已知类MyClass声明如下:classMyClass{intn;public:MyClass(intk):n(k){}intgetValue()const{returnn;}};在下列数组定义中正确的是_________。A.MyClassx1[2];

B.MyClassx2[2]={newMyClass(1),newMyClass(2)};

C.MyClass*x3[2];

D.MyClass*x4[2]={MyClass(1),MyClass(2)};

三、2.填空题(12题)24.operator是运算符重载时必须使用的关键字,它和被重载的运算符连在一起,作为运算符函数的专用函数名,务必把该函数说明为______的。

25.可以把具有相同属性的一些不同对象归类,称为______。

26.按照逻辑结构分类,结构可以分为线性结构和非线性结构,栈属于______。

27.用来派生新类的类称为______,而派生出的新类称为它的子类或派生类。

28.软件是程序、数据和______的集合。

29.测试分为白箱法和黑箱法,______又称为逻辑覆盖测试。

30.在面向对象方法中,类之间共享属性和操作的机制称为【】。

31.假定用户没有给一个名为MyClass的类定义析构函数,则系统为其定义的默认析构函数首部形式为【】。

32.数据模型按不同应用层次分成3种类型,它们是概念数据模型、【】和物理数据模型。

33.以下程序的执行结果为【】。

#include<iostream>

usingnamespacestd;

classbase

{

public:

virtualvoidwho()

{

cout<<"baseclass"<<end1;

};

classderivel:publicbase

{

public:

voidwho()

{

cout<<"derivelclas

34.请将下列类定义补充完整。

classBase{public:voidfun(){cout<<"Base::fun"<<endl;}};

classDerived:publicBase

{

public:

voidfun(){

______//显式调用基类的fun函数

cout<<"Derived::fun"<<endl;

}

};

35.下列程序的运行结果是______。

#include<iostream.h>

classSample

{

inta;

public:

Sample(intaa=0){a=aa;}

~Sample(){cout~<<"Sample="<<a<<'';}

};

classDerived:publicSample

{

intb;

public:

Derived(intaa=0,intbb=0):Sample(aa)(b=bb;}

~Derived(){cout<<"Derived="<<b<<";}

};

voidmain()

{

Derivedd1(9);

}

四、程序改错题(10题)36.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错误,请改正程序中的错误。本程序要求实现的功能为从键盘输入一个字符串,并将结果保存到文件1.txt中。注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在//******error******的下面。试题程序:#include<iostream>#include<fstream>//********error********usingstd;voidWriteFile(char*s){ofstreamout1;//********error********out1.open("1.txt",binary|app);for(inti=0;s[i]!=0;i++){//********error********out1.puts(s[i]);}out1.close;}voidClearFile{ofstreamout1;out1.open("1.txt");out1.close;}intmain{chars[1024];ClearFile;cout<<"pleaseinputastrin9:"<<endl;cin.getline(s,1024);WriteFile(s);return0;}37.使用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;}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,该程序运行时有错误,请改正程序中的错误,使得程序输出:

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;

}

40.使用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;}41.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错。请改正程序中的错误,使程序输出的结果为1003732注意:错误的语句在//******error******的下面,修改该语句即可。试题程序:#include<iostream.h>//******error******voidmain{//******error******intm=0142://******error******intn=0X27:intq=32;cout<<m<<endl;cout<<n<<endl;cout<<q<<endl;return;}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,该程序运行时有错误,请改正错误,使程序正常运行,并且要求最后一个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;

}

44.使用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;

}

45.使用VC++6.0打开考生文件夹下的源程序文件

1.cpp,该程序运行时有错误,请改正程序中的错误。本程序要求实现的功能为从键盘输入一个字符串,并将结果保存到文件1.txt中。

注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在

//******error******的下面。

试题程序:

#include<iostream>

#include<fstream>

//********error********

usingstd;

voidWriteFile(char*s)

{

ofstreamout1;

//********error********

out1.open("1.txt",binary|app);

for(inti=0;s[i]!=0;i++)

{

//********error********

out1.puts(s[i]);

}

out1.close;

}

voidClearFile

{

ofstreamout1;

out1.open("1.txt");

out1.close;

}

intmain

{

chars[1024];

ClearFile;

cout<<"pleaseinputastrin9:"<<endl;

cin.getline(s,1024);

WriteFile(s);

return0;

}

五、综合应用题(2题)46.请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程proj3,其中声明的DataList类,是一个用于表示数据表的类。DataList的重载运算符函数0perator+,其功能是求当前数据表与另一个相同长度的数据表之和;即它返回一个数据表,其每个元素等于相应两个数据表对应元素之和。请编写这个operator+函数。程序的正确输出应该是:两个数据表:1,2,3,4,5,63,4,5,6,7,8两个数据表之和:4,6,8,10,12,14要求:补充编制的内容写在“//********333********”与“//********666********”之间,不得修改程序的其他部分。注意:程序最后将结果输出到文件。ut.dat中。输出函数writeToFile已经编译为。bj文件,并且在本程序中调用。//DataList.h#inClude<iostream>usingnamespaCestd;ClaSSDataList{//数据表类intfen;double*d;publiC:DataList(intlen,doubledata[]=NULL);DataList(DataList&data);intlengthConst{retumlen;}doublegetElement(inti)Consttreturnd[i];}DataListoperator+(ConstDataList&list)Const;//两个数据表求和voidshowConst;//显示数据表};voidwriteToFile(Char$,ConstDataList&);//main.Cpp#inClude”DataList.h”DataList::DataList(intlen,doubledata[]):len(ien){d=newdouble[1en];for(inti=0;i<len;i++)d㈨i=(data==NULL?0.0:data[i]);}DataList::DataList(DataList&data):len(data.1en){d=newdouble[1en];for(inti=0;i<len;i++)d[i]=data.d[i];DataListDataList::0perator+(Con8tDataList&list,)Const{//两个数据表求和double*dd=newdouble[1ist.1ensth];//********333********//********666********returnDataList(1ist.1ength,dd);}voidDataList::showConst{//显示数据表fr(int。i=0;i<len-1;i++)eout<<d[i]<<”,”;Cout<<d[1en-1]<<endl;intmain{doublesl[]={1,2,3,4,5,6};doubles2[]={3,4,5,6,7,8};DataListlist1(6,sl),list2(6,s2);//定义两个数据表对象eout<<”两个数据表:”<<endl:listl.show:list2.show;eout<<endl<<”两个数据表之和:”<<endl:(1istl+list2).show;writeToFile(””,listl+list2);return0:47.使用VC++6.0打开考生文件夹下的源程序文件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的构造函数,该构造函数有3个整型的参数x,y和z,在构造函数中请将x赋值给数据成员C,将y和z分别赋值给基类A1构造函数的参数x和y。请在注释“//********3********”之后添加适当的语句。(4)完成类A2的成员函数show的定义,该函数调用基类成员函数,输出基类数据成员a和b及类A2自身的数据成员C的值,上述3个值在输出时以空格隔开。请在注释“//********4********”之后添加适当的语句。程序输出结果如下:73738注意:除在指定的位置添加语句之外,请不要改动程序的其他部分。试题程序:#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(8.3.7):cout<<a.geta<<endl:cout<<a.getb<<endl:a.show;}六、3.综合应用题(2题)48.使用VC6打开考生文件夹下的工程test22_3,此工程包含一个源程序文件test22_3.cpp,其中定义了用于表示考生的类CStudent和它的派生类CGraduateStudent,但它们的定义并不完整。请按要求完成下列操作,将程序补充完整。

(1)定义CStudent的构造函数,函数含参数nm,它是char型的指针数据,请使用字符串函数将类数据成员name初始化。请在注释“//**1**”之后添加适当的语句。

(2)完成类CStudent的成员函数voidaddscore(doublesc)的定义,将类数据成员score加上参数sc,请在注释“//**2**”之后添加适当的语句。

(3)添加类CGraduateStudent的成员函数voidaddpaper(intd)的定义,将int型的参数d的值加到类的数据成员paper上,请在注释“//**3**”之后添加适当的语句。

(4)调用对象sdt的成员函数addpaper使得该考生的论文数量变为10,将请在注释“//**4**”之后添加适当的语句。

输出结果如下:

StudentHanson

(Advisor:MichaelPhong)

Totalpaperis10

注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。

源程序文件test22_3.cpp清单如下:

#include<iostream.h>

#include<string.h>

classCStudent

{

private:

charname[30];

intcode;

doublescore;

public:

CStudent(char*nm)

{

//**1**

}

CStudent(){}

voidputname(char*nm){strcpy(name,nm);}

voidputcode(intd){code=d;}

voidputscore(doublesc){score=sc;}

voidgetname(char*nm){strcpy(nm,name);}

doublegetcode(){returncode;)

doublegetscore(){returnscore;}

voidaddscore(doublesc)

{

//**2**

}

};

classCGraduateStudent:publicCStudent

{

private:

charadvisor[30];

intpaper;

public:

voidputadvisor(char*nm){strcpy(advisor,nm);}

voidgetadvisor(char*nm){strcpy(nm,advisor);}

voidputpaper(intd){paper=d;}

//**3**

intgetpaper(){returnpaper;}

};

voidmain()

{

CGraduateStudentsdt;

sdt.putname("Hanson");

sdt.putadvisor("MichaelPhong");

sdt.putpaper(8);

//**4**

charcsname[30];

sdt.getname(csname);

charcaname[30];

sdt.getadvisor(caname);

cout<<"Student"<<csname<<endl;

cout<<"(Advisor:"<<caname<<")"<<endl;

cout<<"Totalpaperis"<<sdt.getpaper()<<endl;

}

49.使用VC6打开考生文件夹下的工程test10_3,此工程包含一个源程序文件test10_3.cpp,其中定义了用于表示雇员信息的CEmployee类与表示公司信息的Company类,但这两个类的定义并不完整。请按要求完成下列操作。

(1)定义Cemployee类的私有数据成员name(大小为50的字符数组)和pay(double型数据),分别用于记录雇员姓名和月薪。请在注释“//**1**”之后添加适当的语句。

(2)完成Company类默认构造函数的定义,该构造函数将n值赋值给私有成员nam,并完成指针emp所指的n个Cemployee对象空间的申请,请在注释“//**2**”之后添加适当的语句。

(3)完成Company类成员函数voidCompany::add(血code,charname[50],doublepay)的定义,该函数将某一雇员的编号code、姓名name及月薪pay输入到公司信息中。请在注释“//**3**”之后添加适当的语句。

(4)完成Company类成员函数voidCompany::print()的定义,使其以“_ispaid_RMBforouemonth”的格式输出公司内所有员工的月薪信息。请在注释“//**4**”之后添加适当的语句。

注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。

源程序文件旭st10_3.cpp清单如下:

#include<iostream.h>

#include<string.h>

classCEmployee

{

public:

voidputname(charn[50]){strcPY(name,n);)

voidgetname(charn[501){strcDY(n,name);)

voidputpay(doubled){pay=d;)

doublegetpay(){returnpay;)

private:

//**1**

};

classCompany

{

private:

CEmployee*emp;

intnum;

public:

Company(intn);

voidadd(intCOde,Charname[50],doublepay);

voidprint();

}

Company::Company(intn)

{

//**2**

}

voidCompany::add(intcode,Charname[50],doublepay)

{

//**3**

}

voidCompany::print()

{

//**4**

for(inti=0;i<num;i++)

{

(emp+i)->getname(C);

money=(emp+i)->getpay();

cout<<C<<"ispaid"<<money<<"

RMBforonemonth"<<endl;

}

}

voidmain()

{

Companycom(2);

com.add(0,"Jack",200);

com.add(1,"Lee",300);

com.print();

}

参考答案

1.C

2.B解析:本题考核字符串指针。在程序段中,有语句:“charstr[]='BCDE',*ptr=str;”。由字符串赋值的规则可知:字符串数组str中的5个元素的值分别为:\'B\'、\'C\'、\'D\'、\'E\'和\'\\0\'。而指针ptr指向str[0]。最后程序要求输出*(p+4),即数组元素str[4]的值,而str[4]中存放的是字符\'\\0\'。所以最后输出的值为0。

3.D解析:本题考核C++语言词汇中的标识符的定义。标识符不是一个随意的字符序列,定义标识符时一般应注意如下几点:第一个字符必须是字母或下划线,中间不能有空格;在第一个字母后,可以是任意字母、下划线和数字组成的字符序列;标识符的长度是任意的,但特定的编译系统能够识别的标识符长度是有限的。一般不要超过31个字符;标识符中大小写字母是有区别的;用户定义标识符时,不要采用系统的保留字。

4.A解析:本题主要考察有关C++语言保留字这个知识点。C++语言中,运算符(>=)、函数名(printf)和非基本数据类型(string)都不是C++语言的保留字(关键词)。

5.D

6.D解析:一个类的友元函数对类成员的访问能力等同于类的成员函数,即能访问类的所有成员。

7.C解析:对于任何一种赋值运算,其赋值号或复合赋值号左边必须是一个左值。左值是指具有对应的可由用户访问的存储单元,并且能够由用户改变其值的量。而在C)选项中赋值号对应的是表达式“i+1”,不是一个左值,因此是非法的赋值表达式。

8.D解析:需求分析常用的工具有数据流图(DFD)、数据字典(DD)、判定树和判定表。PAD(问题分析图)、PFD(程序流程图)、N-S(盒式图)都是详细设计的常用工具,不是需求分析的工具。

9.D解析:本题首先通过第一个while循环计算字符串a的长度,再通过第二个循环,将字符串a和b相连,最后返回连接后的总长度。

10.D解析:逻辑表达式的值输出结果是数字的形式。C++规定,逻辑假用数字。表示,而逻辑真则用非零表示。注意:在c++中,如果逻辑表达式的值是非零,则可以认为是真。VC编译器在编译输出时将逻辑真输出为1。

11.D继承是面向对象的方法的一个主要特征,是使用已有的类的定义作为基础建立新类的定义技术。广义的说,继承是指能够直接获得已有的性质和特征,而不必重复定义它们,所以说继承是指类之间共享属性和操作的机制。

12.DD。【解析】C语言中规定,else与离它最近的if相匹配。

x=1,y=2,z=3,所以第一个if的条件(x>y)不成立,直接执行printf("%d\n",x+1);语句,输出x的值1,再把x加1。

13.C在数据库设计中,目前常用的数据模型主要有三种,分别是层次模型、网状模型和关系模型。

层次模型是数据库系统中最早出现的数据模型。我们通常把满足以下两个条件的数据模型称为层次模型。

(1)有且仅有一个结点无双亲,这个结点称为根结点。

(2)其他结点有且仅有一个双亲。

层次模型用树形结构来表示各实体与实体间的联系。实体是数据库中数据描述的对象,可以是一个人、一种商品等。在层次模型中,每个结点表示一个记录类型,记录之间的联系用结点之间的连线表示,这种联系是父子之间一对多的联系。记录就是描述实体的相关数据。

如果取消层次模型中的两个限制,即允许一个以上的结点无双亲,则每一个结点可以有多个父结点,便形成了网状。我们把网状表示实体之间联系的模型称为网状模型。

关系模型用表格形式表示实体类型及其实体间的联系。关系模型是目前最重要的一种模型,它是建立在严格的数学概念的基础上的,具有最坚实的理论基础。关系模型的基本数据结构是二维表,每一张二维表称为一个关系。

14.A

15.A开发大型软件时,产生困难的原因有很多,如需求难以捕捉、员工水平有限、工作安排不太合理、进度控制难以把握、系统开发时间有限等元素,但这些都不是根本的原因,根本的原因是大系统的复杂性。

16.B静态数据成员不能在参数初始化表对静态数据成员初始化,只能在类体外进行初始化。

17.DD。【解析】选项A调用函数gets使得s数组从s[0]开始得到输入的字符;选项B使得数组从元素s[1]开始得到输入的5个字符;选项C使得数组从s[0]开始得到输入的字符;而选项D的scan[(”%S”,S[1])调用错误,应为scanf(”%s”,&s[1])输入项部分应该是一个地址值。

18.DD。【解析】函数执行过程为:functionl(5),function2(3),functionl(2),function2(0)return。

19.C

20.C派生类可以访问基类的保护成员,而不能访问基类的私有成员。作为虚基类的类可以被实例化。虚函数如果没有派生类中重新实现,那么仍然使用基类的成员函数。

21.CC。【解析】A只是声明,没有初始化;B的初始化错误,另一个数组对象没有指明地址;D同样做的不是初始化的事情。

22.B解析:由程序中的主函数main入手,分别调用fun1,fun2,fun3函数,得出输出结果。其中,3个函数都是实现的两个形参的交换功能,只是值传递的方式不同,有的是引用,有的是传值。第一个函数中参数采用的是值传递的方式,形参的变化不影响实参。所以d调用fun1后,实参a和b并没有交换,仍然是AB。第二个调用中,实参a采用的是地址,即传递的是地址,所以形参a的改变会影响实参a的值,即BB。同理,调用fun3后为BA.

23.C本题主要考查了对象数组、指针数组和new运算符。new运算符返回指向指定类型的一个指针。对象数组是指数组元素为对象的数组,该数组中的每一个元素都是同一个类的对象。定义对象数组时,系统将自动调用构造函数创建每一个对象元素,因为类MyClass中定义了一个有一个整型参数的构造函数,编译器将不再为其生成缺省构造函数,所以定义对象数组时必须分别调用有参构造函数为每一个数组元素指定初始值。因此选项A错误,没有初始化对象数组;选项B中,用指向对象的指针初始化对象数组,类型不匹配,因此选项B错误;指针数组是由指针组成的数组,即数组中的每一个元素都是指向同一类型对象的指针。选项C定义了指向MyClass类对象的指针数组x3,该定义语句正确;选项D中,只能用指向MyClass类对象的指针或用已有的MyClass类对象的地址来初始化指针数组x4的每一个元素,不能用对象进行初始化,因此选项D错误。

24.public

25.对象类对象类

26.线性结构线性结构解析:数据的逻辑结构,是指数据元素之间的逻辑关系,分为线性结构和非线性结构,常见的线性结构有线性表、栈和队列等;常见的非线性结构有树、二叉树等。

27.基类基类解析:被继承的类叫基类,或者父类,用来派生其他子类。

28.相关文档相关文档

29.白箱法白箱法解析:白箱测试是根据程序内部逻辑结构的分析来选取测试用例。由于测试用例对程序的逻辑覆盖程序决定了测试的完全性的程度,因此白箱测试也称为逻辑覆盖测试。

30.继承继承解析:类是面向对象语言中必备的程序语言结构,用来实现抽象数据类型。类与类之间的继承关系实现了类之间的共享属性和操作,一个类可以在另一个已定义的类的基础上定义,这样使该类型继承了其超类的属性和方法,当然,也可以定义自己的属性和方法。

31.~MyClass()

32.逻辑数据模型逻辑数据模型解析:数据是现实世界符号的抽象,而数据模型(datamodel)则是数据特征的抽象,它从抽象层次上描述了系统的静态特征、动态行为和约束行为,为数据库系统的信息表示与操作提供一个抽象的框架。数据模型按不同的应用层次分成3种类型,它们是概念数据模型(conceptualdatamodel)、逻辑数据模型(logicdatamodel)、物理数据模型(physicaldatamodel)。

33.baseclassderivelclassderive2classbaseclass\r\n\u3000\u3000\u3000derivelclass\r\n\u3000\u3000\u3000derive2class解析:类base含有虚函数who(),该类派生出derivel类和derive2类,两个派生类中都有虚函数who()的定义。在main()函数中定义了一个指向base类的指针,它也被允许指向其派生类。在执行过程中,不断改变它所指的对象,当p->who()时就能调用不同的版本。这是因为使用了虚函数,因而进行动态联编。注意:应掌握静态联编的使用方法。

34.Base::fun();Base::fun();解析:本题考核虚基类。作用域分辨符号是'::',它可以用来限定要访问的成员所在的类的名称。一般来说,在派生类中对基类成员的访问应该是唯一的。但是,多继承情况下可能造成对基类中某个成员的访问出现不唯一的情况,通过使用对象作用域分辨符可以解决这种对基类成员访问的二义性问题。

35.Derived=0Sample=9Derived=0Sample=9解析:本题考察派生类和基类的构造函数,析构函数的执行顺序。36.(1)应改为“usingnamespacestd;”。(2)应改为“outl.open("1.txt",ios::binary|ios::app);”。(3)应改为“out1.put(s[i]);”。【解析】本题第1处的“usingstd;”是在程序中引入标准命名空间std,对于C++中引入标准命名空间的格式,缺少namespace,所以第1处的语句修改为“usingnamespacestd;”。第2处,调用成员函数open中,输入、输出方式是在ios类中定义的,所以“out1.open("1.txt",binary|app);”语句缺少类ios,即第2处的语句修改为“out1.open("1.txt",ios::binary|ios::app);”。第3个标识应该用流成员函数put输出字符,所以第3处的语句修改为“out1.put(s[i]);”。37.(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”。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)应添加“public:”。

\n(2)“inti”应改为“inti(10);”。

\n(3)“i++;”应改为“i--;”。

\n【解析】本题主要考查的是成员的访问属性。成员的访问属性有公有、保护和私有3种,而默认的访问属性为私有,只有公有成员才能通过类的对象被访问。故应在构造函数前添加“public:”,否则该类无法被实例化。变量的初始化可以通过“=”号,也可以和初始化对象一样添加构造参数,题目已要求使用后者。本题要求输出5个数,while的循环变量i每次减1,在i>5时循环,故i初始化应为10。若循环中i每次增1,则循环永远不会退出。40.(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)”。41.(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;”。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)应改为“catch(char*s)”。(2)应改为“cateh(inti)”。

(3)应改为“catch(…)”。

【解析】本题中第1个标识前的异常抛出语句为“throw("error");

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论