2022年吉林省四平市全国计算机等级考试C++语言程序设计测试卷(含答案)_第1页
2022年吉林省四平市全国计算机等级考试C++语言程序设计测试卷(含答案)_第2页
2022年吉林省四平市全国计算机等级考试C++语言程序设计测试卷(含答案)_第3页
2022年吉林省四平市全国计算机等级考试C++语言程序设计测试卷(含答案)_第4页
2022年吉林省四平市全国计算机等级考试C++语言程序设计测试卷(含答案)_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

2022年吉林省四平市全国计算机等级考试C++语言程序设计测试卷(含答案)学校:________班级:________姓名:________考号:________

一、1.选择题(10题)1.若有以下变量和函数说明:#include<iostream.h>charCh='*';voidsub(intx,inty,charch,double*Z){switch(ch){case'+':*Z=x+y;break;case'-':*Z=x-y;break:case'*':*Z=x*y;break;case'/':*z=x/y;break:}}以下合法的函数调用语句是()。

A.sub(10,20,Ch,y);

B.sub(1.2+3,2*2,'+',&Z);

C.sub(sub(1,2,'+',&y),sub(3,4'+',&x),'-',&y);

D.sub(a,b,&x,ch);

2.运算符重载是对已有的运算符赋予多重含义,因此()。

A.可以对基本类型(如int类型)的数据,重新定义“+”运算符的含义

B.可以改变一个已有运算符的优先级和操作数个数

C.只能重载c++中已经有的运算符,不能定义新运算符

D.C++中已经有的所有运算符都可以重载

3.有3个结点的二叉树有()。

A.2种形态B.4种形态C.7种形态D.5种形态

4.下面程序的功能是把316表示为两个加数的和,使两个加数分别能被13和11整除,在划线处应填入的选项是#include<iostream.h>voidmain(){inti=0,j,k;do{i++;k=316-13*i;}while(______);j=k/11;cout<<"316=13*"<<i<<"+11*"<<j;}

A.k/11B.k%11C.k/11==0D.k%11==0

5.在深度为4的满二叉树中,叶子节点的个数为()。

A.16B.8C.7D.15

6.()是析构函数的特征。

A.一个类中只能定义一个析构函数

B.析构函数名与类名不同

C.析构函数的定义只能在类体内

D.析构函数可以有一个或多个参数

7.下列数据结构中,能用二分法进行查找的是()。

A.顺序存储的有序线性表B.线性链表C.二叉链表D.有序线性表

8.若某二叉树的前序遍历访问顺序是abdgcefh,中序遍历访问顺序是dgbaechf,则其后序遍历的结点访问顺序是()。

A.bdgcefhaB.gdbecfhaC.bdgaechfD.gdbehfca

9.支持子程序调用的数据结构是_________。

A.栈B.树C.队列D.二叉树

10.允许用户为类定义一种模式,使得类中的某些数据成员及成员函数的返回值能去任意类型,它属于一个()。

A.函数模板B.模板函数C.类模板D.模板类

二、单选题(13题)11.下列()是C++语言的有效标识符。

A.NolB.N0.1C.12345D.int

12.下列字符串中。不可以用做c++标识符的是()。

A.y_2006B._EST_HC.ReturnD.switch

13.下列程序的运行结果为()。#include<iostream.h>inti=0;classA{public:A{i++;}};voidmain{Aa,b[3],*C;C=b;cout<<i<<endl:}A.2B.3C.4D.5

14.下列是if语句的基本形式:if(表达式)语句其中“表达式”()。

A.必须是逻辑表达式B.必须是关系表达式C.必须是逻辑表达式或关系表达式D.可以是任意合法的表达式

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

A.plus(3,5L);

B.plus(3,5L);

C.plus(3,5L);

D.plus(3,5L);

16.数据库设计中,用E—R图来描述信息结构但不涉及信息在计算机中的表示,它属于数据库设计的()。

A.需求分析阶段B.逻辑设计阶段C.概念设计阶段D.物理设计阶段

17.数据结构作为计算机的一门学科,主要研究数据的逻辑结构、对各种数据结构进行的运算,以及()。A.A.数据的存储结构B.计算方法C.数据映象D.逻辑存储18.C++中的模板包括()。A.对象模板和函数模板B.对象模板和类模板C.函数模板和类模板D.变量模板和对象模板

19.由于常对象不能被更新,因此()。

A.通过常对象只能调用它的常成员函数

B.通过常对象只能调用静态成员函数

C.常对象的成员都是常成员

D.通过常对象可以调用任何不改变对象值的成员函数

20.下列程序的运行结果是

main()

{inta=2,c=5;

cout<<"a="<<a<<"b="<<c<<endl;

}

A.a=%b=%5B.a=2b=5C.a=db=dD.a=%db=%d

21.有如下定义:inta[5]={1,3,5,7,9},*P=a;下列表达式中不能得到数值5的是()。

A.a[2]B.a[3]C.*(P+2)D.+P+4

22.下面对静态数据成员的描述中,正确的是()。

A.静态数据成员可以在类体内进行初始化

B.静态数据成员不可以被类的对象调用

C.静态数据成员不能受private控制符的作用

D.静态数据成员可以直接用类名调用

23.下列程序是用来判断数组中特定元素的位置所在,则输出结果为#include<conio.h>#include<iostream.h>intfun(int*s,intt,int*k){inti;*k=0;for(i=0;i

A.7,431B.6C.980D.6,980

三、2.填空题(12题)24.数据管理技术发展过程经过了人工管理、文件系统和数据库系统3个阶段,其中数据独立性最高的阶段是______。

25.数据模型分为格式化模型与非格式化模型,层次模型与网状模型属于【】。

26.下列程序的执行结果为______。

#include<iostream.h>

intf(inti){return++i;}

intg(int&i){return++i;}

voidmain()

{inta,b;

a=b=0;

a+=f(g(a));

b+=f(f(b));

cout<<"a="<<a<<",b="<<b<<endl;

}

27.非成员函数应该声明为类______函数才能访问该类的私有成员。

28.若有函数fun(x,y),并且已经使函数指针变量p指向函数fun,则使用p调用函数fun的方法是______。

29.阅读下列程序,并写程序运行结果【】。

#include<iomanip.h>

voidmain(){

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

cout<<end1<<setfill('')<<setw(4-i)<<'0'

<<setfill('*')<<setw(i+i)<<(i>0?'O':'');

}

30.下列软件系统结构图的宽度为【】。

31.对于派生类的构造函数,在定义对象时构造函数的执行顺序为:先执行【】。再执行成员对象的构造函数,后执行派生类本身的构造函数。

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

33.【】技术是将数据和行为看成是一个统一的整体,使一个软件成分,即所谓的对象。

34.在关系数据库中,用来表示实体之间联系的是______

35.有如下的程序:

#include<iostream>

#include<fstream>

usingnamespacestd;

intmain(){

chars[25]="Programminglanguage";

ofstreamf1(DATA.TXT");

f1<<"C++Programming";

f1.close();

ifstreamf2("DATA.TXT");

if(f2.good())f2>>s;

f2.close();

cout<<s;

return0;

}

执行上面的程序交输出【】。

四、程序改错题(10题)36.使用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;}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,该程序运行时有错误,请改正程序中的错误,使得程序输出:

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;

}

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,该程序运行时有错。请改正程序中的错误,使程序输出的结果为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;}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,该程序运行时有错误,请改正错误,使程序正常运行,并且要求最后一个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;

}

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,该程序运行时有错误,请改正程序中的错误。本程序要求实现的功能为从键盘输入一个字符串,并将结果保存到文件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;

}

45.使用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;}五、综合应用题(2题)46.使用VC++6.0打开考生文件夹下的源程序文件3.cpp,其中定义了类BA、PA1和PA2,其中PA1类由BA类公有派生,PA2类由PA1类公有派生。上述3个类的定义并不完整,请按要求完成下列操作,将程序补充完整。程序输出结果如下:1O51057(1)定义类BA的构造函数,该构造函数有一个整型的参数m,在构造函数中将m赋值给数据成员a。请在注释1之后添加适当的语句。(2)定义类PA1的构造函数,该构造函数有两个整型的参数m和n,在构造函数中将m赋值给数据成员b,将n作为基类BA构造函数的参数值传人。请在注释2之后添加适当的语句。(3)定义类PA2的构造函数,该构造函数有3个整型的参数m、n和k,在构造函数中请将m赋值给数据成员c,将n和k分别赋值给基类PA1构造函数的参数m和n。请在注释3之后添加适当的语句。(4)完成类PA2的成员函数show的定义,该函数调用基类成员函数,输出基类私有成员a、b及类PA2自身的数据成员C的值,上述3个值在输出时用空格隔开。请在注释4之后添加适当的语句。注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。试题程序:#include(iostream.h>classBA{inta;public://********1********intgeta{returna;}};classPAl:publicBA{intb;public://********2********intgetb{returnb;}};classPA2:publicPAl{intC;public://********3********voidshow{//********4********}};voidmain{PA2a(7,5,10);cout<<a.geta<<endl;cout<<a.getb<<endl;a.show;}

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

六、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打开考生文件夹下的工程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.B

2.C重载运算符的规则如下:①c++不允许用户自己定义新的运算符,只能对已有的c++运算符进行重载;②c++不能重载的运算符只有5个;③重载不能改变运算符运算对象的个数;④重载不能改变运算符的优先级和结合性;⑤重载运算符的函数不能有默认的参数;⑥重载的运算符必须和用户定义的自定义类型的对象一起使用,至少应有一个是类对象,即不允许参数全部是c++的标准类型。故本题答案为c。

3.DD.【解析】由3个结点组成的二叉树可以有5种形杰,如下图所示。

4.B解析:do-while语句的一般形式是

do

{

语句

}while(表达式);

特点是:“直到型”循环结构。先执行一次“语句”,判“表达式”,当“表达式”为非0,再执行“语句”,直到“表达式”的值为0时停止执行语句。在一般情况下,用while和do-while语句解决同一问题时,若二者的循环体部分是一样的,它们的结果也一样。但当while后面的“表达式”一开始就为“假”时,两种循环的结果不同。这是因为此时while循环的循环不被执行,而do-while循环的循环体被执行一次。本题的关键是两个加数分别能被13和11整除,在i=0时,直接将316赋值给k,当k%11的值为0时,则不必执行循环,将执行j=k/11语句,输出结果,所以该表达式合理的条件是k%11。

5.B解析:满二叉树的第k层上有2k-1个结点,且深度为m的满二叉树有2m-1个结点。

6.A

7.A解析:要对线性表进行二分法查找,对线性表有两个要求:第一,要求线性表是按顺序方式存储的;第二,要求线性表中的元素是按照从小到大的顺序排好序。

8.D解析:中序遍历的递归算法定义:①遍历左子树;②访问根结点;③遍历右子树。前序遍历的递归算法定义:①访问根结点;②遍历左子树;③遍历右子树。后序遍历的递归算法定义:①遍历左子树;②遍历右子树;③访问根结点。根据前序遍历的结果可知,a是根结点。由中序遍历的结果dgbaechf可知,d、g、b是左子树的结点,e、c、h、f是右子树的结点。再由前序遍历的结果bdg可知,b是a左边子树的根,由cefh可知,c是a右边子树的根。再由中序遍历的结果dgb可知,d、g是b左边子树的结点,b右边子树无结点。再由前序遍历结果dg可知,d为b左子树的根,g是以d为根的子树的右结点。至此,a的左子树已完全弄清楚了。同样的道理,可以弄清楚以c为根的子树的结点位置。所以可知后序遍历的结果是D。

9.A栈支持子程序调用。栈是-种只能在-端进行插入或删除的线性表,在主程序调用子函数时要首先保存主程序当前的状态,然后转去执行子程序,最终把子程序的执行结果返回到主程序中调用子程序的位置,继续向下执行,这种调用符合栈的特点,因此本题的答案为A。

10.C解析:类模板的定义。注意类模板和模板类的区别:类模板不是一个具体的类,使用时必须首先实例化为具体的模板类,然后通过模板类定义对象。

11.A标识符是一个以字母或下画线开始的,由字母、下画线和数字组成的字符串,标识符不能与任意关键字同名。

12.D本题考查C++标识符的命名规则,其规则有如下几点:①所有标识符必须由字母、数字或下画线组成,且必须由字母或下画线开头;②所有标识符不能使用C++已有的关键字;③大、小写字母表示不同意义,即代表不同的标识符。选项C中虽然retum是关键字,但因首字母大、小写不同,也可用于标识符,但不建议使用。故答案为D。

13.C外部变量i实际上记录的是调用构造函数的次数。

14.DD。【解析】在C语言中if关键字后的一对圆括号中的表达式可以是c语言中任意合法的表达式。

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

16.CC。【解析】E—R(Entity—Relationship)图为实体一联系图,提供了表示实体型、属性和联系的方法,用来描述现实世界的概念模型。

17.A解析:数据结构作为计算机的一门学科,主要研究和讨论以下三个方面的问题:①数据集合中各数据元素之间所固有的逻辑关系,即数据的逻辑结构;②在对数据进行处理时,各数据元素在计算机中的存储关系,即数据的存储结构;③对各种数据结构进行的运算。

18.C本题考查的知识点是:模板。在C++语言中,模板只有两类:函数模板和类模板。故本题应该选择C。

19.A解析:本题考查了常对象与常成员函数的概念。使用const关键字修饰的对象称为常对象,它的特点是不能被更新;使用const关键字声明的成员函数称为常成员函数,它的特点也是不能更新对象的数据成员。因为其他成员函数没有这个限制,即可以更新对象的数据成员,所以通过常对象只能调用常成员函数而不能调用其他成员函数,而且常成员函数也只能调用常成员函数而不能调用其他成员函数,否则它们的特性就会被打破。故应该选择A。

20.B解析:本题非常简单,考查C++中基本的输出语句,注意不要与C语言的输出控制字符混淆。

21.B本题考查指向数组的指针,本题中指针变量P指向数组a,直接使用数组下标即可取值,数组F标是从0开始标号的,所以a[2]能取到5,而a[3]取不到5,(:选项中使用指针后移方法能够取到5,D选项中*P为1,所以*P+4为5。

22.D解析:静态数据成员必须在类体外初始化,它是类的所有对象的共有成员,需要使用类名调用,静态数据成员的初始化与权限控制无关。

23.D解析:本题中直接使用指针变量k,但在使用时要注意对k的指针运算,此外,一开始应认为*k的值为数组中的某一下标值,即*k=0。

24.数据库系统数据库系统解析:数据库系统通过三层模式、两级映射保证了数据库的数据独立性,而其他人工管理和文件系统均无法保证数据的独立性。

25.格式化模型格式化模型解析:层次模型与网状模型属于格式化模型。

26.a=3b=2a=3,b=2解析:本题考查函数间引用传递的知识点。g(a)执行之后,返回值为1,a也变为1,这就是引用传递的特点。然后执行f(1),返回值为2,此时a=2+1,故a此时为3。由于f(b)不具有引用传递的特征,因此,执行后b=0+2,结果为2。

27.友元友元解析:友元函数是对应于当前类的外部函数,但它可以访问该类的所有成员。友元函数不是当前类的成员函数,可以是另外一个类的成员函数。在类中声明友元函数时,需要在函数名前加关键字friend。

28.(*p)(xy)(*p)(x,y)解析:一个函数总是占用一段连续的内存区,而函数名就是该函数所占内存区的首地址。我们可以把函数的这个首地址(或称入口地址)赋予一个指针变量,使该指针变量指向该函数。然后通过指针变量就可以找到并调用这个函数。我们把这种指向函数的指针变量称为“函数指针变量”。函数指针变量定义的一般形式为:类型说明符(*指针变量名)();其中“类型说明符”表示被指函数的返回值的类型。“(*指针变量名)”表示“*”后面的变量是定义的指针变量。最后的空括号表示指针变量所指的是一个函数。

29.00*0O***00*****0

30.3

31.基类的构造函数基类的构造函数

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

33.面向对象面向对象

34.关系关系

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

38.(1)应添加“public:”。

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

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

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

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

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

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

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

46.(1)应添加“BA(intm){a=m;}”。

(2)应添加“PAl(intm,intn):BA(n){

温馨提示

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

评论

0/150

提交评论