2021年广东省江门市全国计算机等级考试C++语言程序设计测试卷(含答案)_第1页
2021年广东省江门市全国计算机等级考试C++语言程序设计测试卷(含答案)_第2页
2021年广东省江门市全国计算机等级考试C++语言程序设计测试卷(含答案)_第3页
2021年广东省江门市全国计算机等级考试C++语言程序设计测试卷(含答案)_第4页
2021年广东省江门市全国计算机等级考试C++语言程序设计测试卷(含答案)_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

2021年广东省江门市全国计算机等级考试C++语言程序设计测试卷(含答案)学校:________班级:________姓名:________考号:________

一、1.选择题(10题)1.有如下程序:#include<iostream>usingnamespacestd;classA{public:virtualvoidfunc1(){cout<<"A1";}voidfunc2(){cout<<"A2";}};classB:publicA{public:voidfunc1(){cout<<"B1";}voidfunc2(){cout<<"B2";}};intmain(){A*p=newB;p->func1();p->func2();return0;}执行该程序,屏幕上将显示输出()。

A.B1B2B.A1A2C.B1A2D.A1B2

2.一间教室可坐多名学生,则实体教室和学生之间的联系是()。

A.一对一B.一对多C.多对一D.多对多

3.下列C++运算符中,优先级最高的是()。

A.+(双目)B.*(单目)C.<=D.*=

4.在C++语言中,打开一个文件就是将这个文件与一个什么建立关联?

A.流B.类C.结构D.对象

5.针对数组定义intdata[10];,下列表述中错误的是()。

A.用*data可访问到数组的首元素

B.用data[9]可访问到数组的末元素

C.用data[10]访问数组元素会超出数组边界

D.data共有10个元素,其首元素是data[1]

6.下面描述中,符合结构化程序设计风格的是______。

A.使用顺序、选择和重复(循环)三种基本控制结构表示程序的控制逻辑

B.模块只有一个入口,可以有多个出口

C.注重提高程序的执行效率

D.不使用goto语句

7.能正确表示逻辑关系:“a≥10或a≤0”的C++语言表达式是

A.a>=10ora<=0

B.a>=0|a<=10

C.a>=10&&a<=0

D.a>=10||a<=0

8.下列叙述中正确的是

A.接口复杂的模块,其耦合程度一定低

B.耦合程度弱的模块,其内聚程度一定低

C.耦合程度弱的模块,其内聚程度一定高

D.上述三种说法都不对

9.下面说法正确的是()。

A.内联函数在运行时是将该函数的目标代码插入每个调用该函数的地方

B.内联函数在编译时是将该函数的目标代码插入每个调用该函数的地方

C.类的内联函数必须在类体内定义

D.类的内联函数必须在类体外通过加关键字inline定义

10.在c++语言程序中,对象之间的相互通信通过()。

A.继承实现B.调用成员函数实现C.封装实现D.函数重载实现

二、单选题(13题)11.下列程序输出的结果是()。#include<stdio.h>subl(chara,charb){charc;c=a;a=b;b=c;}sub2(char*a,charb){charc;c=*a;*a=b;b=c;}sub3(char*a,char*b){charc;c=*a;*a=*b;*b=c;}voidmain(){chara,b;a='A';b='B';subl(a,b);putchar(a);putchar(b);a='A';b='B';sub2(&a,b);putchar(a);putchar(b);a='A';b='B';sub3(&a,&b);putchar(a);putchar(b);putchar('\n');}

A.BABBABB.ABBBBAC.ABBABAD.ABABBA

12.下列语句中,错误的是()。

A.constintbuffer=256;

B.constdouble*point;

C.intconstbuffer=256;

D.double*eonstpoint:

13.若磁盘上已存在某个文本文件,其全路径文件名为d:\shiti\tes.txt,下列语句中不能打开该文件的是()。

A.ifstreamfile("d:\shiti\test.txt");

B.ifstreamfile("d:\\shiti\\test.txt");

C.ifstreamfile;file.open("d:\\shiti\\test.txt");

D.ifstream*pFile=newifstream("d:\\shiti\\test.txt");

14.下列程序的输出结果是()。#included<iostream>usingnamespacestd;intmain(){chara[]="Hell0,Test";char*p=a;while(*p){if(*p>=a&&*p<=z)cout<<char(*p+A-a);elsecout<<*P;p++;}return0;}A.hello,testB.Hello,TestC.HELLO,TESTD.hELLO,tEST

15.用树形结构来表示实体之间联系的模型称为()。

A.关系模型B.层次模型C.网状模型D.数据模型

16.一个栈的初始状态为空。现将元素1、2、3、4、5、A、B、C、D、E依次入栈,然后再依次出栈,则元素出栈的顺序是()。

A.12345ABCDEB.EDCBA54321C.ABCDEl2345D.5432lEDCBA

17.一棵二叉树共有25个结点,其中5个是叶子结点,则度为1的结点数为()。

A.16B.10C.6D.4

18.有如下程序段:inti=5;while(inti=0){cout<<'*';i--;}运行时输出"*"的个数是_________。A.0B.1C.5D.无穷

19.下列有关内联函数的叙述中,正确的是()。

A.内联函数在调用时发生控制转移

B.内联函数必须通过关键字inline来定义

C.内联函数是通过编译器来实现的

D.内联函数函数体的最后一条语句必须是return语句

20.有如下函数模板定义:template

T1FUN(T2n){returnn*5,0;}若要求以int型数据9作为函数实参调用该模板,并返回一个double型数据,则该调用应表示为()。

A.FUN(9)B.FUN<9>C.FUN(9)D.FUN<9>(double)

21.设int&max(int&,int&)返回两参数中较大者,如有两整型变量

inta=5;intb=10;在执行max(a,b)++后,a,b的值分别为

A.5,10B.6,10C.5,11D.6.11

22.建立一个类对象时,系统自动调用_________。

A.析构函数B.构造函数C.静态函数D.友元函数

23.已知函数f的原型是“voidf(int*x,int&y);”,变量v1、v2的定义是“intv1,v2;”,下列调用语句中,正确的是()。

A.f(v1,v2)B.t(v1,&v2)C.f(&v1,v2)D.f(&v1,&v2);

三、2.填空题(12题)24.在下面程序的横线处填上适当的内容,使程序执行后的输出结果为ABCD。

#include<iostream>

usingnamespacestd;

classA

public:A(){cout<<'A';}

};

classB:【】

public:B(){cout<<'B';}

classC:virtualpublicA

public:C(){cout<<'C';}

classD:publicB,publicC

public:D(){cout<<'D';}

};

voidmain(){Dobj;}

25.下列程序的输出结果是【】。

#include<iostream.h>

template<classT>

Tmax(Tx[],intn)

{

inti;

Tmaxv=x[0];

for(i=1;i<n;i++)

if(maxv<x[i])

maxv=x[i];

returnmaxv;

}

voidmain()

{

inta[]={3,2,7,6,8,9};

doubleb[]={1.2,3.4,2.5,7.3,6.8};

cout<<max(a,4)<<","<<max(b,3)<<endl;

}

26.下面的类中定义了一个枚举类型,请完成下面的程序。

classBase{

public:

enumWeek{Sum,Mon,Tue,Wed,Thu,Fri,Sat};

Weeka;

}

voidfun(Base&B){

【】=【】;//将对象的a赋值为所定义的枚举类型值为的枚举量

}

27.【】的目的是检查模块是否正确的组合在一起,是否能够实现规格说明文档对产品功能的要求。

28.数据库系统阶段的数据具有较高独立性,数据独立性包括物理独立性和【】两个含义。

29.在用class定义一个类时,数据成员和成员函数默认的访问权限是【】:

30.在下面横线上填上适当的语句,完成程序。

#include<iostream>

usingnamespacestd;

classBase

{

intx;

public:

Base(inti){x=i;}

~Base(){}

};

classDerived:publicBase

{

public:

【】//完成类Derive构造函数的定义

};

intmain()

{

DerivedObj();

return0;

}

31.成本效益分析的目的是从【】角度评价开发一个项目是否可行。

32.表达式8&3的结果是【】。

33.一个项目具有一个项目主管,一个项目主管可管理多个项目。则实体集“项目主管”与实体集“项目”的联系属于【】的联系。

34.将代数式

转换成程序设计中的表达式为【】。

35.【】是实现c++语言编译时多态性的机制,【】是实现C++语言运行时多态性的机制。

四、程序改错题(10题)36.使用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;

}

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

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

}

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

}

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,该程序运行时有错误,请改正错误,使程序正常运行,并且要求最后一个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;

}

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

}

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。本程序要求输入一个字符串,然后将其中的小写字母改成大写字母,字符可能输入多行,当输入字符“?”时,默认字符输入结束,最后把结果输出到屏幕中。

注意:不要改动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,此工程中包含一个源程序文件proj3.cpp,补充编制c++程序proj3.cpp,其功能是读取文本文件in.dat中的全部内容,将文本存放到doc类的对象myDoc中。然后将myDoc中的字符序列反转,并输出到文件out.dat中。文件in.dat的长度不大于1000字节。要求:补充编制的内容写在“//**********”与“//**********”两行之间。实现将myDoc中的字符序列反转,并将反转后的序列在屏幕上输出。不得修改程序的其他部分。注意:程序最后已将结果输出到文件0ut.dat中,输出函数writeToFile已经给出并且调用。//proj3.cpp#include<iostream>#include<fstream>#include<catting>usingnamespacestd;classdoc{private:char*sir;//文本字符串首地址intlength;//文本字符个数public://构造函数,读取文件内容,用于初始化新对象,filename是文件名字符串首地址doc(char*filename);voidreverse;//将字符序列反转一doc;voidwriteToFile(char*filename);};doc::doc(char}filename){ifstreammyFile(filename);intlen=1001,tmp;atr=newchar[1en];length=0;while((trap=myFile.get)!=EOF){str[1ength++]=trap;}str[1ength]=‘\0’;myFile.close;}voiddoc::reverse{//将数组atr中的length个字符中的第一个字符与最后一个字符交换,第二个字符与倒数第二个//字符交换……//*************333*************//*************666*************}doc::~doe{delete[]str;}voiddoc::writeToFile(char*filename){OfstreamoutFile(filename);outFile<<str;outFile.close;}voidmain{docmyDoc(”in.dat”);myDoc.reveme;myDoc.writeToFile(”out.dat”);}

47.(1)“while”应改为“while(infile.get(ch))”。

(2)应添加“bur[len++]=ch;bur[len]=ch;len++;”。

(3)应添加“outfile2<<bur[i++];”或“outfile2<<buf[i];i++;”。

(4)“TCobj;”应改为“TCobi("in.txt");”。

【解析】本题考查了文件流的使用。根据题意,第1处要获得一个字符,并判断是否到文件结尾,所以应使用get函数;第2处应将ch存入buf数组,同时让len增1;第3处将buf中的字节输出给outfile2,注意同时让i增1,否则while循环将进入死循环;第4处TC只确一个带char*参数的构造函数,所以创建对象时必须使用构造参数,根据题意这个参数应该是“"in.txt"”。

六、3.综合应用题(2题)48.使用VC6打开考生文件夹下的工程test21_3,此工程包含一个源程序文件test21_3.cpp,其中定义了用于表示长方形的类CRectangle,但类CRectangle的定义并不完整。请按要求完成下列操作,将类CRectangle的定义补充完整。

(1)定义CRectangle的构造函数,函数含参数dx,dy,da和db,它们都是double型的数据,请将类数据成员x,y,a和b初始化,并输出“CRectangleConstructed.”(另起一行输出该文字)。请在注释“//**1**之后添加适当的语句。

(2)完成类CRectangle的成员函数getperimeter()的定义,将以a和b为边的矩形周长的值返回,请在注释“//**2**”之后添加适当的语句。

(3)完成类CRectangle的成员函数getarea()的定义,将以a和b为边的矩形面积的值返回,请在注释“//**3**”之后添加适当的语句。

(4)完成类CRectangle的友元函数frienddoubledist(CRectangle&rt)的定义,先定义两个double型的临时变量tx和ty,然后将参数对象rt的数据成员x与a的一半相加,y与b的一半相加,分别赋值给tx和ty,最后求出tx与ty的平方和的值之后将它的平方根返回,将请在注释“//**4**”之后添加适当的语句。

输出结果如下:

CRectangleConstructed.

Down_Leftcornerpointis:(100,50)

a=1200,b=700

Perimeterofthisrectangleis:3800

Areaofthisrectangleis:840000

TheDistanceis:806.226

CRectangleConstructed.

Down_Leftcornerpointis:(200,150)

a=2000,b=800

Perimeterofthisrectangleis:5600

Areaofthisrectangleis:1.6e+006

TheDistanceis:1320.04

CRectangleDestructed.

CRectangleDestructed.

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

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

#include<iostream.h>

#include<math.h>

classCRectangle

{

private:

doublex;

doubley;

doublea;

doubleb;

public:

CRectangle()

{

cout<<"\nCRectangleConstructed."<<endl;

}

CRectangle(doubledx,doubledy,doubleda,doubledb)

{

//**1**

a=da;

b=db;

cout<<"\nCRectangleConstructed."<<endl;

}

~CRectangle()

{

cout<<"CRectangleDestructed."<<endl;

}

voidputxy(doubledx,doubledy){x=dx;y=dy;}

voidputab(doubleda,doubledb)(a=da;b=db;}

doublegetx(){returnx;}

doublegety(){returny;}

doublegeta(){returna;}

doublegetb(){returnb;}

doublegetperimeter()

{

//**2**

}

doublegetarea()

{

//**3**

}

frienddoubledist(CRectangle&rt);

};

doubledist(CRectangle&rt)

{

//**4**

ty=rt.y+rt.b/2.0;

returnsqrt(tx*tx+ty*ty);

}

voidmain()

{

CRectanglerect;

rect.putxy(100.0,50.0);

rect.putab(1200.0,700.0);

cout<<"Down_Leftcornerpointis:("<<rect.getx()<<","<<rect.gety()<<")"<<endl;

cout<<"a="<<rect.geta()<<",b="<<rect.getb()<<endl;

cout<<"Perimeterofthisrectangleis:"<<rect.getperimeter()<<endl;

cout<<"Areaofthisrectangleis:"<<rect.getarea()<<endl;

cout<<"

49.使用VC6打开考生文件夹下的工程test12_3,此工程包含一个test12_3.cpp,其中定义了类Base和类A,类A公有继承Base,但这两个类的定义都并不完整。请按要求完成下列操作,将程序补充完整。

(1)定义枚举类型变量en,它包含两个枚举符front和back,请在注释“//**1**”之后添加适当的语句。

(2)在类Base中添加常成员虚函数voidE()的定义,该函数输出“InBaseE!”,请在注释“//**2**”之后添加适当的语句。

(3)在类A中添加常成员虚函数voidE()的定义,该函数先调用基类中的虚函数E()再输出“InAE!”,请在注释“//**3**”之后添加适当的语句。

(4)完成类A构造函数的定义,请使用参数列表的形式初始化类A的成员,并输出“Aconstructor.”,请在注释“//**4**”之后添加适当的语句。

输出结果如下:

Baseconstructor.

Aconstructor.

InBaseE!

InAE!

InBaseP!

InA!

1

Adestructor.

Basedestructor.

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

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

#include<iostream.h>

//**1**

classBase

{

protected:

intb1;

intb2;

public:

Base();

~Base();

intGetb1()const{returnb1;}

voidSetb1(intx){b1=x;}

intGetb2()const{returnb2;}

voidSetb2(inty){b2=y;}

voidPrint()const{cout<<"InBaseP!"<<end1;}

//**2**

};

Base::Base():b1(1),b2(5)

{

cout<<"Baseconstructor."<<endl;

}

Base::~Base()

{

cout<<"Basedestructor."<<endl;

}

classA:publicBase

{

protected:

enenA;

public:

A();

~A();

enGetColor()const{returnenA;}

voidSetColor(encolor){enA=color;}

voidInA(){cout<<"InA!"<<endl;}

//**3**

{

Base::E();

cout<<"InAE!"<<endl;

}

};

//**4**

{

cout<<"Aconstructor."<<endl;

}

A::~A()

{

cout<<"Adestructor."<<endl;

}

voidmain()

{

Aa1;

a1.E();

cout<<endl;

a1.Print();

a1.InA();

cout<<a1.Getbl()<<endl;

}

参考答案

1.C解析:程序中B为A的派生类,由主函数入手,主函数中定义了类A的指针p指向类B。根据基类中的“virtualvoidfunc1()”知道A中的func1为虚函数,执行“p->func1();”语句,通过指针变量调用此虚函数,此时调用的就是指针变量指向的同名函数,即派生类的func1函数,输出B1。而fun2不是虚函数,所以执行“p->func2();”输出为A2。

2.B两个实体集间的联系可以有下面几种:一对一的联系、一对多或多对一的联系和多对多的联系。由于一间教室可以坐多个学生,所以它们的联系是一对多联系。

3.B解析:在题中各选项中,只有选项B是单目运算符,所以它是优先级最高的。

4.A解析:C++的I/O系统是通过一种称为流的机制来实现文件和控制台的I/O操作的。简单地说,在C++中,输入/输出操作是通过流来完成的。而文件流以磁盘文件及其他可按文件方式进行管理的外部设备为输入/输出对象。每个文件流都应当与一个打开的文件相联系;关闭一个文件就是取消这种联系。

5.D解析:本题考核数组和指针。一维数组中,数组元素的下标是从0到<数组长度>-1,所以数组data的首元素是data[0],末元素是data[9]。其他选项的描述都是正确的。

6.A解析:结构化程序设计方法的四条原则是:①自顶向下;②逐步求精;③模块化;④限制使用goto语句。“自顶向下”是指在程序设计时,先考虑总体,后考虑细节;先考虑全局目标,后考虑局部目标。“逐步求精”是指对复杂问题应设计一些子目标作过渡,逐步细节化。“模块化”是指一个复杂问题由若干稍简单的问题构成;解决这个复杂问题的程序,也应由若干稍简单问题的小程序组成。

7.D解析:逻辑运算符“||”表示或的意思。

8.C解析:影响模块之间耦合的主要因素有两个:模块之间的连接形式,模块接口的复杂性。一般来说,接口复杂的模块,其耦合程度要比接口简单的模块强,所以选项A的说法错误;耦合程度弱的模块,其内聚程度一定高,选项B错误;选项C正确。

9.B内联函数用inline修饰,用于取代C语言中的宏定义。inline是个建议机制而不是强制机制,也就是说,程序员可以指定任意函数为inline函数,但是编译器会根据系统情况来决定是否将其inline处理。对于较大的函数,编译器往往会取消其inline特性。inline函数的特点之一就是执行速度快.他实质是在编译时将函数的目标代码插入到每个调用该函数的地方,从而没有出栈人栈、保护现场等开销。提高了效率。在类体内定义的成员函数,自动被编译器当做内联函数处理,在类体外定义的成员函数,如果用inline修饰,编译器也认为是一种内联建议。

10.B解析:对象属于某个已知的类,是类的实例,对象之间通信实际上就是通过函数传递信息,封装是把数据和操作结合在一起,继承是对于类的方法的改变和补充,重载是多态性之一。

11.B

12.Dconst是一个C++关键字,用于限定不允许改变的变量。选项B是指向常量的指针,定义时可以不初始化;选项D是指针常量,定义时必须初始化。故答案为D。

13.A

14.CC。【解析】用一个指针变量p指向字符数组A,在while循环中,当不指向数组尾时,将小写字母转换为大写字母,然后将其输出。

15.B解析:在数据库系统中,由于采用的数据模型不同,相应的数据库管理系统(DBMS)也不同。目前常用的数据模型有3种:层次模型、网状模型和关系模型。在层次模型中,实体之间的联系是用树结构来表示的,其中实体集(记录型)是树中的结点,而树中各结点之间的连线表示它们之间的关系。所以,本题的正确答案是B。

16.B栈是先进后出的原则组织数据,所以入栈最早的最后出栈,所以选择B。

17.A【答案】:A【知识点】:二叉树的性质

【解析】:由二叉树的性质3可知,度为0的结点数(即叶子结点数)=度为2的结点数+1。题目中给出叶子结点数为5个,利用性质3可计算出度为2的结点数为4个。在二叉树只有三种结点:度为0的、度为1的、度为2的,总数为25个,所以度为1的结点数即为25-5-4=16个,所以答案为A。

18.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。

19.C解析:此题考查的是内联函数的概念.在调用时,内联函数会像宏函数一样地层开,将调用表达式用内联函数体来替换,所以它没有一般函数的参数压栈和退栈操作,所以选项A)错误;即使没有使用inline说明,编译器也会将在类的说明部分定义的函数认定为内联函数,所以选项B)错误:内联函数只是比普通函数有更高的执行效率。对于类型为void的函数,它不需要返回任何函数值,所以在函数体中既可以使用return语句,也可以不使用,选项D)错误。

20.CC。【解析】函数返回类型是double型,则T1为double型,T2为int型才符合函数模板的定义。

21.C考点:本题主要考查知识点为引用作为函数参数透析:执行max(a,b)++后,函数返回变量b后加1,即b=11.因为函数参数采用的引用方式,使用改变的是实参变量b的值。

22.B本题主要考查了构造函数。构造函数的作用是在对象被创建时利用特定的值构造对象,将对象初始化为一种特定的状态,使该对象具有区别于其他对象的特征。构造函数在对象被创建的时候由系统自动调用。

23.BB。【解析】voidf(int*X,int&。y);第一个参数需要取值,第二个参数需要取地址,所以为v1为取值,&Lv2为取址。

24.virtualpublicA

25.73.47,3.4解析:函数的功能是求出数组中指定范围的元素中的最大值。所以在a数组中前四个数据中最大值为7,数组b中前3个元素中最大值为3.4。

26.b.aTueb.a,Tue解析:b.a取对象的成员变量

Tue在枚举中变量为2的是Tue

27.集成测试集成测试

28.逻辑独立性逻辑独立性解析:数据独立性是数据与程序间的互不依赖性,即数据库中数据独立于应用程序而不依赖于应用程序。数据独立性一般分为物理独立性与逻辑独立性两个含义。注意:在人工管理阶段,文件系统阶段和数据库管理阶段中数据独立性的特点。

29.私有私有解析:C++类中数据成员和成员函数的默认访问权限是私有。

30.Derived(inti):Base(i){}

31.经济经济

32.00解析:8&3为二进制的00001000&00000011,结果为0。

33.一对多一对多解析:实体集“项目主管”与实体集“项目”的联系属于一对多的联系。

34.SQRT(x2+y2)/(a+b)

35.静态联编或静态绑定动态联编或动态绑定静态联编或静态绑定\r\n动态联编或动态绑定解析:C++语言编译时多态性的机制是静态绑定,实现C++语言运行时多态性的机制是动态绑定。

36.(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);”。

37.(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;”。

38.(1)应改为“TC::TC”。

\n(2)应改为“voidTC::display”。

\n(3)应改为“TC::~TC”。

\n【解析】在类的外部定义成员函数时,必须在成员函数前面加上类名和作用域运算符“::”,作用域运算符用采表示某个成员属于哪个类,使用格式为“(类名)::<成员函数>((参数函数)),因此第1处应改为“TC::TC”,默认构造函数没有参数。由第2处“TC::display”后的语句看,这是在类外实现TC函数,因此也有作用域运算符使用错误问题,display函数返回值为void,因此第2处的语句应改为“voidTC::display”。由第3处的语句“TC::TC”可知,显然这里是在类外实现析构函数,析构函数是一个特殊的函数,它的名称和类名相同,并在前面加“~”字符,用采与构造函数加以区别,因此第3处的语句应改为“TC::~TC”。

39.(1)应改为“usingnamespacestd;”。

\n(2)应改为“outl.open('1.txt',ios::binary|ios::app);”。

\n(3)应改为“out1.put(s[i]);”。

\n【解析】本题第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]);”。

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)应改为“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(…)”。

42.(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);”。

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)应改为“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)”。

45.(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

温馨提示

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

评论

0/150

提交评论