2021年四川省绵阳市全国计算机等级考试C++语言程序设计模拟考试(含答案)_第1页
2021年四川省绵阳市全国计算机等级考试C++语言程序设计模拟考试(含答案)_第2页
2021年四川省绵阳市全国计算机等级考试C++语言程序设计模拟考试(含答案)_第3页
2021年四川省绵阳市全国计算机等级考试C++语言程序设计模拟考试(含答案)_第4页
2021年四川省绵阳市全国计算机等级考试C++语言程序设计模拟考试(含答案)_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

2021年四川省绵阳市全国计算机等级考试C++语言程序设计模拟考试(含答案)学校:________班级:________姓名:________考号:________

一、1.选择题(10题)1.下列选项中合法的用户标识符是()。

A.10ngB._2TestC.3DmaxD.A.dat

2.以下程序段的执行结果是()。inta,y:a=10;y=10do{a+=2:y+=a;cout<<“a”=“<<a<<”,“<<”y=“<<y<<”\n”;if(y>20)break;}while(a<=14);

A.a=12,y=12

B.a=12,y=12a=14,y=1a=16,y=28

C.a=12,y=12

D.a=12,y=12a=14,y=26a=14,y=44

3.下列关于goto语句的描述中,正确的是()。

A.goto语句可在一个文件中随意转向

B.goto语句后面要跟一个它所转向的语句

C.goto语句可以同时转向多条语句

D.goto语句可以从一个循环体内转到循环体外

4.有如下程序:#include<iostream.h>longfib(intn){if(n>2)return(fib(n-1)+fib(n-2));elsereturn(2);}voidmain(){cout<<fib(3);}该程序的输出结果是

A.2B.4C.6D.8

5.下面关于模板的描述,错误的是()A.函数模板和类模板的参数可以是任意的数据类型

B.类模板不能直接使用,必须先实例化为相应的模板类,然后定义了模板类的对象后才能使用

C.函数模板不能直接使用,需要实例化为模板函数后才能使用

D.类模板的成员函数都是模板函数

6.在一个无向图中,所有顶点的度数之和等于所有边数的()倍。

A.3B.2C.1D.1/2

7.对于C++流运算符>>,说法正确的是______。

A.它可以重载为类的友元或成员函数

B.它是流类的一个输出运算符

C.C++内预定义了各种基本数据类型的输入操作

D.可以直接用它输入类类型数据

8.下列运算符中不能在C++中重载的是()

A.?:B.+C.-D.<=

9.复制构造函数的参数一般是

A.某对象名B.某对象成员名C.某对象的引用名D.指向对象的指针名

10.两个或两个以上模块之间关联的紧密程度称为()。

A.耦合度B.内聚度C.复杂度D.数据传输特性

二、单选题(13题)11.在单链表中,增加头结点的目的是______。

A.方便运算的实现B.使单链表至少有一个结点C.标识表结点中首结点的位置D.说明单链表是线性表的链式存储实现

12.有如下函数模板定义:templateT2plus(T1t1,T3t3){returnt1+t3;}则以下调用正确的是()。

A.plus(3,5L);

B.plus(3,5L);

C.plus(3,5L);

D.plus(3,5L);

13.有下列程序:

#include<stdi0.h>

structst

{intx,Y,date[2]={1,10,2,20};

voidmain()

{structst*p=date;

printf("%d,",p->y);printf("%d\n",(++p)

->x);

}

程序的运行结果是()。

A.A.10,1B.20,1C.10,2D.20,2

14.如果表达式“--x/y”中的“--”和“/”是作为友元函数重载的运算符,采用运算符函数调用格式,该表达式还可以表示为()。

A.operator/(X.operator--(),y);

B.operator/(operator--(x),y);

C.X.operator--().operator/(y);

D.y.operator/operator--(x));

15.下面关于类和对象的描述中,错误的是()。

A.类就是C语言中的结构体类型,对象就是C语言中的结构体变量

B.类和对象之间的关系是抽象和具体的关系

C.对象是类的实例,一个对象必须属于一个已知的类

D.类是具有共同行为的若干对象的统一描述体

16.有如下类定义

classMyClass

public:

Private:

intdata;

};

若要为MyClass类重载流输入运算符>>,使得程序中可以“cin>>obj;”形式输入MyClass类的对象obj,则横线处的声明语句应为()。A.friendistream&operator>>(istream&is,MyClass&A);

B.friendistream&operator>>(istream&is,MyClassA);

C.istream&operator>>(istream&is,MyClass&A);

D.istream&operator>>(istream&is,MyClassA);

17.若在表达式y/x中,“/”是作为成员函数重载的运算符,则该表达式还可以表示为A.x.operator/(y)

B.operator/(x,y)

C.y.operator/(x)

D.operator/(y,x)

18.下列程序的输出结果是()。#include<iostream.h>voidmain()(char*str="12123434";intx1=0,x2=0,x3=0,x4=0,i;for(i=0;str[i]!=\0;i++)switch(str[i]){case1:x4++;case2:x3++;case3:x2++;case4:x1++;}cout<<x1<<","<<x2<:<","<<x3<<","<<x4;}A.8,6,4,1B.8,6,3,2C.8,8,4,1D.8,6.4,2

19.有下列程序:#include<stdi0.h>voidmain(){inta=S,b=1,t;t=(a<<2)|b;printf("%d\n",t);}程序运行后的输出结果是()。A.21B.11C.6D.1

20.以下不是结构化程序设计方法的技术是()。

A.自顶向下,逐步求精B.自底向上,逐步求精C.从整体到局部D.结构清晰,层次分明

21.下面关于C++流的叙述中,正确的是()。A.cin是一个输入流对象

B.可以用ifstream定义一个输出流对象

C.执行语句序列char*y="PQMN";cout<<y;将输出字符串PQMN的地址

D.执行语句序列charx[80];cin.getline(x,80);时,若输入Happynewyear,则X中的字符串是“Happy”

22.执行语句序列intx=1,&y=x;cout<<x<<'-'<<y<<endl;输出结果为()

A.x-xB.1-1C.1-0D.异常

23.若AA为一个类,a为该类的非静态数据成员,在该类的一个成员函数定义中访问a时,其书写格式为()。

A.aB.AA.aC.a{}D.AA::a{}

三、2.填空题(12题)24.参照函数模板的写法,完成非模板函数的定义,语句为______。

#include<iostream.h)

#include(string.h>

template(classT)

Tmin(Ta,Tb)

{

return(a<b?a:b);

}

char*min(char*a,char*b)

{

}

voidmain()

{

doublea=1.23,b=3.45;

chars1[]=”abcd”,s2[]=”efg”

25.指针变量所保存的不是一般的数据值,而是程序中另一个对象的______。

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

27.mystrlen函数的功能是计算str所指字符中的长度,并作为函数值返回,请填空。

intmystrlen(char*str)

{inti;

for(i=0;【】!='\0';i++);

return(i);}

28.将一个函数声明为一个类的友元函数必须使用关键字【】。

29.用树型结构表示实体类型及实体间联系的数据模型称为【】。

30.下面函数的作用是【】。

intindex(intx,inta[],intn)

{

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

{

if(a[i]==x)

returni;

}

returni;

}

31.下列函数的功能是判断字符串str是否对称,对称则返回true,否则返回false。请在横线处填上适当内容,实现该函数。

boolfun(char*str)

{

inti=0,j=0;

while(str[j])j++;

for(j--;i<j&&str[i]==str[j];i++,j--);

returni______j;

}

32.对基类数据成员的初始化必须派生类的构造函数中的______处执行。

33.算法的工作量大小和实现算法所需的存储单元多少分别称为算法的【】。

34.类的具体表现是通过______定义来操作的。

35..、.*、->、::、?:这五个运算符______重载。

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

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

}

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

}

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

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函数中的错误,使程序的输出结果为:

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,该程序运行时有错误,请改正程序中的错误,使得程序输出:

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;

}

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

}45.使用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;}五、综合应用题(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.(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打开考生文件夹下的工程MyProj8。此工程包含一个源程序文件MyMain8.cpp,该程序实现栈的入栈和出栈的操作。其中有两个类:一个是节点类node,它包含节点值和指向上一个节点的指针prey;另一个类是栈类stack,它包含栈的头指针top。但类的定义并不完整。

请按要求完成下列操作,将类Sample的定义补充完成:

①定义私有节点值data,它是血型的数据,以及定义一个指向上一个节点的指针prev。请在注释“//**1**”之后添加适当的语句。

②完成构造函数node(intd,node*n)的定义,使得私有成员data和prev分别初始化为d和n。请在注释“//**2**”之后添加适当的语句。

③完成类stack的成员函数push(inti)的类体内的定义。函数push()实现入栈这个操作,即把形参i压入栈中,那么此时应该创建一个新的节点,并让这个节点的prev指针指向栈顶。请在注释“//**3**”之后添加适当的语句。

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

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

//MyMain8.cpp

#include<iostream>

usingnamespacestd;

classstack;

classnode

{

private:

//**1**

public:

node(intd,node*n)

{

//**2**

}

friendclassstack;

};

classstack

{

node*top;//栈头

public:

stack()

{

top=0;

}

voidpush(inti)

{

//**3**

}

intpop()

{

node*t=top;

if(top)

{

top=top->prev;

intc=t->data;

deletet;

returnc;

}

return0;

}

};

intmain()

{

stacks;

s.push(6);

s.push(3);

s.push(1);

return0;

}

49.使用VC6打开考生文件夹下的工程test23_3,此工程包含一个源程序文件test23_3.cpp,其中定义了类X和它的友元类Y,但它们的定义并不完整。请按要求完成下列操作,将程序补充完整。

(1)将类X的静态数据成员y初始化为1。请在注释“//**1**”之后添加适当的语句。

(2)完成类Y的构造函数Y(inti,intj)的定义,将参数i赋值给类Y的数据成员,X的对象a中的数据成员x,并且把参数j赋值给类X的数据成员y,请在注释“//**2**”之后添加适当的语句。

(3)完成类Y的成员函数voidDisplay()的定义,将Y的数据成员,X的对象a中的数据成员x和类X的数据成员y按照“x=_,y=_”的形式显示出来(“_”代表一个数字),请在注释“//**3**”之后添加适当的语句。

输出结果如下:

x=5,y=l

x=6,y=9

x=5,y=9

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

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

include<iostream.h>

classX

{

friendclassY;

public:

voidSet(inti){x=i;}

voidDisplay()

{

cout<<"x="<<x<<",";

cout<<"y="<<y<<endl;

}

private:

intx;

staticinty;

};

classY

{

public:

Y(inti,intj)

voidDisplay();

private:

Xa;

};

//**1**

Y::Y(inti,intj)

{

//**2**

}

voidY::Display()

{

//**3**

}

voidmain()

{

Xb;

b.Set(5);

b.Display();

Yc(6,9);

c.Display();

b.Display();

}

参考答案

1.B解析:此题考查的是标识符。标识符是由数字、字母以及下划线构成,其第一个字符必须是字母或下划线,中间不能有空格;标识符的长度是任意的,但由于编译系统的限制一般不超过31个字符;标识符中的大小写字母是不同的;定义标识符时不能采用系统的保留字。符合这些要求的只有选项B)。

2.C

3.D解析:goto语句也可以跳出循环和switch语句,goto语句无条件地转移程序的执行控制。它总是与一标号相匹配,其形式为:goto标号;,标号是用户自定义的标识符,它可以处于goto语句的前面,也可以处于其后,但标号必须与goto语句处于同一个函数中。定义标号时,由一个标识符后面跟一个冒号组成。

4.B解析:fib(3)=fib(2)+fib(1),而fib(2)的返回值为2,fib(1)的返回值也为2,故输出的fib(3)的值为4。

5.A类模板不能被重载,而函数模板可以,它们不能被未知的数据类型替换。

6.B解析:在一个无向图中,所有顶点的度数之和等于所有边数的2倍。

7.C

8.A解析:本题考查运算符的重载。Ct+中,“::、*、、?:”这4个运算符不能重载。

9.C解析:C++语言中拷贝构造函数的参数一般是某个对象的引用名。

10.A解析:本题考核模块独立性的评价。评价模块独立性的主要标准有两个;一是模块之间的耦合,它表明两个模块之间互相独立的程度,也可以说是两个或两个以上模块之间关联的紧密程度(所以,本题的正确答案为选项A);二是模块内部之间的关系是否紧密,称为内聚。一般来说,要求模块之间的耦合尽可能地弱,即模块尽可能独立,而要求模块的内聚程度尽量地高。

11.A\nA。【解析】头结点不仅标识了表中首结点的位置,而且根据单链表(包含头结点)的结构,只要掌握了表头,就能够访问整个链表,因此增加头结点的目的是为了便于运算的实现。

\n

12.DD。【解析】C++中对函数模板的调用有时候只使用了函数实参,而没有使用模板实参,模板实参都被省略了,但模板实参的省略并不是必然的,而是有条件的:从模板函数实参表获得的信息有矛盾;需要莸得特定类型的返回值,而不管参数的类型如何;虚拟类型参数不出现在模板函数的形参中;函数模板含有常规形参。题中定义的函数模板中虚拟类型参数T2没有出现在模板数的形参列表中,所以在调用时不能省略,D选项的调用省略了T3,这是允许的。

13.Cc。【解析】data[2]是两个结构体组成的数组,p指向结构体数组的首地址,p->y访问第一个结构体的第二个元素;(++p)x访问第二个结构体的第一个元素。所以输出为10,2。

14.BB。【解析】本题考查运算符的重载。假定已经作为某个类的成员函数重载了二元运算符+,且c1、c2都是该类的对象,则“c1.operator+(c2)”,与“c1+c2”含义相同。如果+作为该类的非成员函数重载,则“operator+(c1,c2)”与“c1+c2”含义相同。同理,运算符“/”作为友元函数重载,则“(--x)/y”与表达式“operator/((--x),y)”相同。前缀运算符“--”作为友元函数重载,则“--X与operator--(x)”相同,所以组合起来是“0perator/(operator--(x),y);”,即B选项。

15.A解析:在C++语言中,类和结构体有本质区别,类中包含数据及操作函数,而结构体只包含有数据。

16.A

17.C解析:“/”是一个二元运算符,作为成员函数重载时形参表中只有一个参数,对应于第二操作数,而第一操作数就是对象本身,以this指针的形式隐藏在形参表中。本题中,y为第一操作数,x为第二操作数,故正确答案为C。

18.DD。【解析】本题考查循环的嵌套、for和switch语句的应用、C++中各种条件判断,循环语句的用法。只要注意在C++语言中,系统在字符指针的最后位置会增加一个字符串结束符\0,执行8次for循环,再根据switch语句中的条件易知答案。

19.AA。【解析】本题考查移位运算符在程序中对5逻辑左移2位,其值扩大4倍等于20,然后再进行按位运算,其值等于21。

20.BB.【解析】结构化程序设计的主要原则可以概括为自顶向下、逐步求精、模块化、限制使用GOTO语句。

21.AA。本题考查C++流的溉念和I/0的格式化。tin是istream类的对象,即输入流对象。ifstream是输入文件流,类不能定义个输出流对象。getline函数的功能是允许从输入流中读取多个字符,并且允许指定输入终止,在读取完成后,从读取的内容中删除该终止字符,所以D选项中的语句序列后x中字符串应该是Happynewyear。

22.B

23.AA。【解析】a是类AA的非静态数据成员,在类AA的成员函数中可以直接访问。B是访问静态数据成员的方式,C和D都是访问函数的方式。

24.Base:97。Base:97。解析:本题主要考查两个知识点,一是基类指针可以指向派生类对象,并可以访问派生类的所有成员。二是在函数重载中进行隐式类型转换。如pd->f(‘a’);系统到底调用哪个重载函数呢?实参既不是派生类中的形参,也不是基类中f函数的形参类型。此时系统根据就近原则和从高优先级到低优先级的规则尝试隐式转换。单字符更接近整数,故调用的是基类的f函数。

25.内存地址内存地址

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

27.*(str+i)或str[i]*(str+i)或str[i]解析:str是指针变量,它指向字符型数据,在循环过程中,可以用*(str+i)来访问字符串中的第i个元素,判断是否是结束标志,如果不是,i=i+1,继续取下一个元素进行判断,直到*(str+i)的值为'\\0'为止,也可以用下标的方式引用字符,如*(str+i)相当于str[i]。注意:C++中字符串指针的相关问题。

28.A或者friendA或者friend解析:友元的定义。

29.层次模型层次模型解析:用树形结构表示实体类型及实体间联系的数据模型称为层次模型,用有向图结构表示实体类型及实体间联系的数据模型称为网状模型,用二维表格结构表示实体及其联系的数据模型称为关系模型。

30.数组a中查找x若有则返回第一个x的下标若没有则返回n数组a中查找x,若有则返回第一个x的下标,若没有则返回n解析:函数的作用是通过变量数组,在数组中查找x,若找到则显示下标i。

31.>=

32.成员初始化列表成员初始化列表

33.时间复杂度和空间复杂度时间复杂度和空间复杂度解析:算法的复杂性是指对一个在有限步骤内终止算法和所需存储空间大小的估计。算法的计算量是算法的时间复杂性,算法所需存储空间大小是算法的空间复杂性。注意:算法的各种属性及其相互作用。

34.对象对象

35.不能不能36.(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;”。

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

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

39.(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)”。40.(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]);”。

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

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)应添加“public:”。

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

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

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

温馨提示

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

评论

0/150

提交评论