2023年浙江省金华市全国计算机等级考试C++语言程序设计预测试题(含答案).docx
2023年浙江省金华市全国计算机等级考试C+语言程序设计预测试题(含答案)学校:班级:姓名:考号:一、1.选择题(10题)1 .下列程序的运行结果为()。#include < iostream.h > void main() inta=2 ; int b=a+1 ; cout < < a/b < < endl ;)A.0.66667 B.O C.0.7 D.0.66666666.2 .下列程序的运行结果是()。#include < iostream.h > class A inta ;public : A()a=0: A(int aa) a=aa ; cout < < a+ ; ; void main() Ax, y(2), z(3) ; cout < < endl ; A.0B.23 C.34 D.253 .下列有关数据库的描述,正确的是A.数据处理是将信息转化为数据的过程B.数据的物理独立性是指当数据的逻辑结构改变时,数据的存储结构不变C关系中的每一列称为元组,一个元组就是一个字段D.如果一个关系中的属性或属性组并非该关系的关键字,但它是另一个关系的关键字,则称其为本关系的外关键字4 .下面程序的运行结果是 #include < iostream.h >注意:错误的语句在/ / *eiror*的下面,修改该语句即可。试题程序:#include(iostream. h) classTC inti;public:TC;voiddisplay;TC;不不不不不不en*or不小不不不小TC: TC cout«nConstructorn«n," i=0;不不不不不不en*or不小小不不个TC: display tout«ni=n«i<<% n«endl;TC: TCCOUI«nDestructorn«endl :) voidmain(TCa;a. display;)37 .使用VC+6. 0打开考生文件夹下的源程序文件1. cpp,该程序运行时有错误,请改正错误,使程序正常运行,并且要求最后一个catch必须抛出执行的任何异常。程序异常,输出信息为error0ERROR注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在/ / *errc)r*的下面。试题程序:#include<iostream. h)intmain( try(throw(nerrorn);)/不不不不不不不不eiror不不不不不不不不catch(chars)cout«s«endl ;throw(int)0);kL*1* vL*vL* k1*vL* vt>不不不不不不不不nor不不不不不个不catch cout«i«endl;throw(O);throw(nerrorn);catch cout«nERRORn«endl ;returnO ;38 .使用VC+ + 6 .0打开考生文件夹下的源程序文件1 .cpp,该程序运行时有错误,请改正程序中的错误,使得程序输出:9, 8, 7, 6, 5注意:错误的语句在/ *error* /的下面,修改该语句即可。其他的语句不能修改。试题程序:#include(iostream . h> classTC<1 vL*error不不不不不不不不TC(inti)(m_i=i ; voidprint(cout«m_i«,;)public :intmain<T> «、rj、errorinti ;TC04(10);while(i>5)! * *enr* * * / i+ + :04 . print ;)cout«endl ;returnO ;39 .使用VC+6. 0打开考生文件夹下的源程序文件1.cpp。本程序要求输入一个字符串,然后将其中的小写字母改成大写字母,字符可 能输入多行,当输入字符“?”时,默认字符输入结束,最后把结果输出 到屏幕中。注意:不要改动main函数,不能增加或删除行,也不能更改程序的结 构,错误的语句在/ / *errc)r*的下面。试题程序:#include<iostream. h> voidmain inti=O;charstr120;cout«nEnterastringendwith?. n«endl ;cin. getline(str, 120);个个个个个个个个个个个个个个个个while(str)vl*J> *1> vi*个个个个个个个个个个个个 *个个*if(stri)=a)stri=stri-a+A;i+ + ;cout«str«endl ;return ; )40 .使用VC+6. 0打开考生文件夹下的源程序文件1. cpp,该程序运行时有错误,请改正程序中的错误。本程序要求实 现的功能为从键盘输入一个字符串,并将结果保存到文件1. txt中。注意:不要改动main函数,不能增加或删除行,也不能更改程序的结 构,错误的语句在error的下面。试题程序:#include<iostream>#include<fstream> usingstd;voidWriteFile(char*s) ofstreamoutl ;vi*error 不不不个不不不7" 7"7,1* 7"个个个不不个个个enr不不不不不不不不outl. open(nl. txt",binary|app);for(inti=0; si!=0; i+ +)vt*vL*vL*k1>个个个不不不不不nc)i不不不不不个不outl. puts(si);)outl. close;)voidClearFile (ofstreamoutl ;outl. open(nl. txt'');outl. close;) intmain(chars 1024;ClearFile;cout«npleaseinputastrin9 :n«endl;cin. getline(s, 1024);WriteFile(s);returnO ; )41 .使用VC+6. 0打开考生文件夹下的源程序文件1. cpp,该程序运行时有错。请改正程序中的错误,使程序输出的结果为1003732注意:错误的语句在/ / *error*的下面,修改该语句即可。试题程序:#include<iostream. h> voidmain intm=0142:intn=0X27:intq=32;cout< <m< <endl; cout< <n< < endl ; cout <<q<< endl ; return ;42 .使用VC+ + 6.0打开考生文件夹下的源程序文件1.cpp,该程序运 行时有错,请改正其中的错误,使程序正常运行,并使程序输出的结果 为:sizeof(Sl)=5 sizeof(s2)=10 sizeof(s3)=l注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在/ / *error*的下面。不能删除assert ()语句。只能修改后面的数字。提示:assert函数如果为假,则会产生一个中断异常。试题程序:#include<iostream . h> #include<assert . h>voidmain ()(chartsl=nabcn:k,1>*1> kJ>error个个不不不不不个assert(sizeof(s 1 )=3):cout«nsizeof(sl)=5n«endl ;chars210=nabn:vl*kL*不不不不不不不不error下不不不不不不不assert(sizeof(s2)=2);cout«Hsizeof(s2)=10n«endl ;chars3=23 : assert(sizeof(s3)=4);卜error*1 *1*-卜cout«nsizeof(s3)=ln«endl ;return ;43 .使用VC+6.。打开考生文件夹下的源程序文件1.cpp,但该程 序运行有问题,请改正main函数中的错误,使该程序的输出结果正 确。程序输出:注意:错误的语句在/ *error* /的下面。修改该语句即可,其他的语句不能修改。试题程序:#include(iostream. h> classCO public:<p个个个个个不不rror不不不不不不不不staticintn=O :CO n+ + :CO n:个个个个个个不不nror不不不不不不不不intCO:n voidmainvoid fun(int * a,int * b) (int x = * a;*a= *b;*b = X;cout < <*a< < * b < <n n;)void main() (int x = l9y = 2;fun(&x,&y);cout <<X<<y<< endl;)A.12 12 B.1221 C.21 12D.21 215 .一个函数带有参数说明时,则参数的默认值应该在()中给出。A.函数定义B.函数声明C.函数定义或声明D.函数调用6 .以下类定义中可能会引起错误的语句是class A public :A()/1int i ; /2 private : int j /3 A(int i)i+ ; /4 ; A.l B.2C.3 D.47 .下列字符数组的初始化,正确的是()。A.char ch5=Je"8 .char ch=C.char ch15="welcome to china"D.char ch14=nI am a student"8.以下程序不用第三个变量实现将两个数进行对调的操作,划线处应为 ()o main() inta, b ; scanff'%d%cT, &a, &b) ; cin > > a> > b ; tout < < "a = < < a < < 66b = < < b ; a = a+b ; b = a-b ; a =; cout <COobj ;COobj27;CO*C=NULL:c二 & obj :<1# /不不不不不不不不eu*or不不不不不不不不/eout«C . n«endl ;cout«C0:n«endl; )44 .使用VC+6.。打开考生文件夹下的源程序文件1. cpp,该程序运行时有错误,请改正错误,使程序正常运行,并且要求最后一个catch必须抛出执行的任何异常。程序异常,输出信息为error0ERROR注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在/ / *errc)r*的下面。试题程序:#include<iostream h)intmain(try throw(nerrorn);、!>7,1>kJ>7,1>、!>7,7,不下不不不不不*r* nor个个个小个个个个catch(chars) cout«s«endl ;) try throw(int)0);kL# kL* vt*个个个个个个个个rror个个个个个个个个catch cout«i«endl;throw(O);throw(nerrorn);k|>*.t> *1> *1> k1> sl> k|> kJ>个个个个个个个个nc)r个个个个个个个个catch(cout«nERRORn«endl;returnO ;)45 .使用VC+6. 0打开考生文件夹下的源程序文件1. cpp,该程序运行有问题,请改正main函数中的错误,使程序的输出结果为:number= 1number=10number= 100注意:不要改动main函数,不能增加或删除行。也不能更改程序的结构,错误的语句在/ / *eirc)r*的下面。试题程序:#include<iostream . h>classTC (public:TC(inti) (number=i;)voidSetNumber(intm)(number=m;)intGetNumberconst(returnnumber;)voidPrintconst (cout«nnumber=H«number«endl;)private:intnumber;;voidmain (/不不不不不不不不error不小不不不不不不TCobjl;objl. Print;TCobj2(3);7,7,7,k,1> 7“ 7,、!> 7,个个个*t*不不个下nor个个个个个个个个objl. number=10;/ I * error* *TC. SetNumber(lOO);objl. Print;obj2. Print; )五、综合应用题(2题)46 .(1)应添力TvirtualvoidGetNamtUO ;"。(2)应添力口气0115位1面*661用111©2”。(3)应添加“TC2(char*str)”°(4)应添加“m_stri=0 ; ”。【解析】本题第1处要求“在类TC1中定义接口函数GetName,为纯虚 函数”。在C+ +中,在基类中用virtual声明成员函数为虚函数。纯虚 函数是在声明虚函数时被"初始化为0的函数,即 t4virtualvoidGetName=0 ; "。第2处要求“函数GetName2实现获得名字 的缓存,但只获得读允许操作这个缓存”。只能引用数据成员,而不能修 改,所以使用常成员函数,其一般形式为“const函数类型函数名”,即44constchar*GetName2,0第3处要求“实现TC2的构造函数”。TC2的构 造函数与类TC2的名称应该相同,而且第3处的大括弧中是对字符数 组str的操作,所以类TC2的构造函数中的参数为str,即这里补全为 “TC2(char*str)”°第4处要求“完成TC2的构造函数,实现对名字的处 理”,补全类TC2的构造函数,构造函数中的名字变量str对应于类TC 中的成员变量m_str,所以这里补全变量赋值操作“m_stri=O ;47 .使用VC+6. 0打开考生文件夹下的源程序文件3. cpp。其中定 义的类不完整,按要求完成下列操作,将类的定义补充完整。每卖出 一个水果,则计算水果的重量,还要计算所有卖出水果的总重量以及 总个数,同时允许退货,请按照以下的操作,把类补充完整。(1)定义类TCFruit的私有静态数据成员float型变量AllWeight和int型 变量AHN0,请在注释1后添加适当的语句。(2)完成类TCFruit的带一个float型变量w的构造函数,并把这个w加 到AllWeight中,并且A11N。自加。请在注释2后添加适当的语句。(3)在析构函数中,在AllWeight中减去weight,然后AHN。自减,请 在注释3后添加适当的语句。(4)完成静态成员变量的初始化为0,请在注释4后添加适当的语句。 注意:增加或者修改代码的位置已经用符号表示出来,请不要修改其 他的程序代码。试题程序:#include(iostream. h>classTCFruit (private:floatWeight;/1 *1*/卜I. .卜.卜.,、staticintAHNo;public:TCFruit(floatw)/kL* vt*kL*kL>/r|>JAllWeight+=w:AllNo + + :-TCFruit/si* *1> *1*1*J> sf> kI> k!> vl*/*T* *T* .Xrr>A11W eight-=W eight:)voiddisplay(cout«nSellaFruitwithn«Weight«nk9n<<endl;coutAllsellnumber:H«AllNo«endl ;cout«nAllsellweight:n«AllWeight«nk9n<<endl«endl ;);1 I *4* floatTCFruit: AllWeight=O. 0;intmainTCFruitFruitl(l. 2);Fruitl. display;TCFruitFruit2(2. 3);Fruit2. display;returnO ;六、3.综合应用题(2题)48.使用VC6打开考生文件夹下的工程test30_30此工程包含一个 test30_3.cpp,其中定义了类A、A1和A2,其中A1类由A类公有派 生,A2类由A1类公有派生。上述三个类的定义并不完整,请按要求完 成下列操作,将程序补充完整。定义类A的构造函数,该构造函数有一个整型的参数x,在构造函数 中请将x赋值给数据成员ao请在注释“/* 1*”之后添加适当的语句。 定义类A1的构造函数,该构造函数有两个整型的参数x和y,在构 造函数中请将x赋值给数据成员b,将y作为基类A构造函数的参数值 传入。请在注释“*2*”之后添加适当的语句。定义类A2的构造函数,该构造函数有三个整型的参数x, y和2,在构造函数中请将x赋值给数据成员c,将y和z分别赋值给基类A1构 造函数的参数X和y0请在注释“*3*”之后添加适当的语句。(4)完成类A2的成员函数show的定义,该函数调用基类成员函数,输 出基类数据成员a和b及类A2自身的数据成员c的值,上述三个值在 输出时以空格隔开。请在注释“*4*”之后添加适当的语句。注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。程序输出结果如下:96962源程序文件test3O_3.cpp清单如下:#include < iostream.h >class A(int a;public:* *int geta() return a;class Al:public A(int b;public:* 2 *int getb() return b;);class A2:public Al(int c;public:* 3 *void show()(* 4 *);void main()A2 a(2,6,9);cout < < a,geta () < < end1;cout < < a, getb () < < endl;a. show(); )49.使用VC6打开考生文件夹下的工程MyProjlO。此工程包含一个源程 序文件MyMainl0.cppo程序中定义了两个类Base和Derived,但类的 定义并不完整。请按要求完成下列操作,将类的定义补充完成:类Derived是基类Base公有派生来的。请在注释“/* *1* *”之后添加 适当的语句。完成构造函数Derived(inti)定义,采用初始化列表的方式使基类Base 私有成员a初始化为i+1,类Derived的私有成员b初始化为io请在注 释“/* *2* *”之后添加适当的语句。完成类Derived的成员函数show。的类体外的定义。函数show。中要 显式调用基类的show。函数,然后要输出私有成员b的值。请在注释“/* *3* "之后添加适当的语句。注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。源程序文件MyMainlO.cpp清单如下: /MyMainlO.cpp#include < iostream >using namespace std ;class Basepublic :Base(int x) ( a=x ) void show() (cout < < a ;) private :int a ;*public :* * * 2 * * * void show();private :int b ;void Derived : show()* * * 3 * * * int main()Derived d(l), *pb ;pb=&d ;pb- > show();=< a < <"b = "< < b < <endl ; A.a-Cb B.a-b C上*a D.a/b9 .关于在调用模板函数时模板实参的使用,下列表述中正确的是()。A.对于虚拟类型参数所对应的模板实参,如果能从模板函数的实参中获 得相同的信息,则都可以省略B.对于虚拟类型参数所对应的模板实参,如果它们是参数表中的最后的 若干个参数,则都可以省略C.对于虚拟类型参数所对应的模板实参,若能够省略则必须省略D.对于常规参数所对应的模板实参,任何情况下都不能省略10 .下面说明不正确的是A.char a10="china";B.char a10, * p=a ; p="china";C.char * a ; a= "china";D.char a10, *P ; P=a="china";二、单选题(13题)11 .由于常对象不能被更新,因此()oA.通过常对象只能调用它的常成员函数B.通过常对象只能调用静态成员函数C.常对象的成员都是常成员D.通过常对象可以调用任何不改变对象值的成员函数return 0 ; )参考答案1.B解析:因为题目中定义的变量a和b均为整型数据,所以a/b即2/3 得到的仍然是整型数据,得到0。2.B3 .D数据处理是指将数据转换成信息的过程,故选项A叙述错误。数据的 物理独立性是指数据的物理结构的改变,不会影响数据库的逻辑结 构,故选项B叙述错误。关系中的行称为元组,对应存储文件中的记 录,关系中的列称为属性,对应存储文件中的字段,故选项C叙述错 误。所以本题选D。4 .D解析:本题考查的是指针和引用,函数fun完成把x和y互换的操 作。5 .C6 .D解析:在C+语言中类定义中的构造函数是私有的,但是其却调用 了其中的公有变量,在实例化时会出现错误。注意:C+语言类的定义 7.B解析:选项A中一个数组元素存放一个字符,不能存放字符串;当把 字符串整体赋给字符串时,字符数组的长度要比字符串长度大1,用来 存放终结符,所以选项C和选项D都不正确。7 .B解析:本题思路巧妙,分析时可以发现b = (a+b)-b,则此时b中放 的是a,完成交换工作的一半。然后要将b放到a中,将表达式展开, 则为a = (a+b)-a,此时正好把b放至ij a中。此时完成全部的交换。9 .D在调用一个模板函数时,编译系统需要足够的信息来判别每个虚拟类 型参数所对应的实际类型,可以从两个不同的渠道获得这样的信息: 从模板实参表(用括起来的参数表)或从模板函数实参表(用“”括起 来的参数表)。如果从后者获得的信息已经能够判定其中部分或全部虚 拟类型参数所对应的实际参数,而且它们又正好是参数表中最后的若 干参数,则模板实参表中的那几个参数可以省略。如果模板实参表中 的实参都被省略了,则空表“<>”也可以不要,因此选项D错误。反 之,对于某个模板实参,如果从模板函数的实参表中无法获得同样的 信息,就不能省略;或者虽然能够获得同样的信息,但在它后面还有 其他不能省略的实参,则其自身还是不能省略。10 .D解析:C语言中操作一个字符串常量的方法有:将字符串常量存 放在一个字符数组之中;用字符指针指向字符串,然后通过字符指针 来访问字符串存储区域。当字符串常量在表达式中出现时,根据数组的 类型转换规则,将其转换成字符指针。本题D)项中错误的关键是对数组初始化时,可以在变量定义时整体赋 初值,但不能在赋值语句中整体赋值。11 .A解析:本题考查了常对象与常成员函数的概念。使用const关键字修饰 的对象称为常对象,它的特点是不能被更新;使用const关键字声明的 成员函数称为常成员函数,它的特点也是不能更新对象的数据成员O 因为其他成员函数没有这个限制,即可以更新对象的数据成员,所以 通过常对象只能调用常成员函数而不能调用其他成员函数,而且常成 员函数也只能调用常成员函数而不能调用其他成员函数,否则它们的 特性就会被打破。故应该选择A。12.BB。【解析】本题考查的是模极的概念。函数模板可以含有常规形参; 函数模板的一个实例就是一个函数定义;类模板中的成员函数都是模板 函数;在用类模板定义对象时,由于没有像函数实参表这样的额外信患 渠道,因此无法按函数模板的方式省略模板形参,但是可以为类模板的 参数设置默认值。13.B 14.D题干表示的是回车换行,选项A、B、c都表示回车换行,而选项D是 字符串的结尾标志。15.A16.D本题主要考查了运算符重载。C+把重载的运算符视为特殊的函数, 称为运算符函数,函数名就是在运算符前加上保留字operator。一般而 言,如果a是类X的对象,在类X中重载前置单目运算符,则下列 两种函数调用方法是等价的:第一种是通过运算符构成表达式的形式 进行调用,rn即第第二种是像一般函数那样用函数名进行调用: 当把作为成员函数重载时,调用形式为a.operator rn();当把作为 非成员函数重载时,调用形式为。peratorrn(a)。本题是把前置单目运算符+重载为成员函数,因此与表达式+a等效的表示为a.operator +()。17 .A解析:C+在创建一个对象时,会调用类的构造函数。语句MyClass ab,*p;创建了两个对象a、b和指针p,在创建对象a和b后会调用构 造函数,而创建指针p时,由于P本身不是对象,所以不调用类的构造 函数。18 .DDo【解析】C语言中规定,else与离它最近的if相匹配。x=l, y=2, z=3,所以第一个if的条件(xy)不成立,直接执行 printf("%dn", x+1);语句,输出x的值1,再把x加1。19.B解析:本题考核函数模板的使用。引用模板函数和引用一般的函数 在语法形式上没有任何区别。所有的类型替换都是编译器在幕后悄悄进 行的。但是要注意的是说明一个函数模板后,当编译系统发现有一个对 应的函数调用时,将根据实参中的类型来确认是否匹配函数模板中对应 的形参。例如,本题中的B)选项,编译系统从第一个参数“3.5”获得的 信息是叮对应于double",而从第二个参数“4”处获得的信息是“T对应 于int”,二者相互矛盾,在编译时会产生错误。对于D)选项中紧跟在 函数名后的double就是模板实参表,通过它通知编译系统在调用过 程中,int型的参数“4”将被自动换成double型。20.B解析:在数据库系统中,由于采用的数据模型不同,相应的数据库 管理系统(DBMS)也不同。目前常用的数据模型有3种:层次模型、网 状模型和关系模型。在层次模型中,实体之间的联系是用树结构来表示 的,其中实体集(记录型)是树中的结点,而树中各结点之间的连线表示 它们之间的关系。所以,本题的正确答案是B。21.AAo【解析】a是类AA的非静态数据成员,在类AA的成员函数中可 以直接访问。B是访问静态数据成员的方式,C和D都是访问函数的 方式。22 .C解析:在格式化模型中,要事先根据应用的需要,确定数据之间的 逻辑关系,即先对数据进行结构化。在关系模型中,不需要事先构造数 据的逻辑关系,只要将数据按照一定的关系存入计算机,也就是建立关 系。所以选项A错误。对于一个表示关系的二维表,其最基本的要求是 表中元组的每一个分量必须是不可分的数据项,即不允许表中再有表。 所以,选项B、D说法是错误的。一个关系的属性名表称为关系模式, 也就是二维表的表框架,相当于记录型。因此,选项C说法正确。23 .C本题主要考察虚函数。虚函数指在某基类中声明为virtual并在一一个 或多个派生类中被重新定义的成员函数,本题中定义类GA的对象a, 执行show(a)、display(a),输出U,定义了类GB的对象b,执行 show(b),仍然输出1, display(b)执行会调用派生类的f函数,因为f函 数为虚函数,输出2,所以本题答案为c。24 .前件前件解析:在树形结构中,每一个结点只有一个前件,称为父 结点,没有前件的结点只有一个,称为树的根结点;每一个结点可以有 多个后件,它们都称为该结点的了结点。没有后件的结点称为叶子结点。25.51.1 int POint二counfP=0 ; int POint:counfP=0 ;解析:静态数据成员的初始 化格式为:数据类型 类名 静态数据成员名 = 初始值;27 . MyClass()28 .*p29 .逻辑独立性逻辑独立性解析:数据独立性是数据与程序间的互不依 赖性,即数据库中数据独立于应用程序而不依赖于应用程序。数据独立 性一般分为物理独立性与逻辑独立性两个含义。注意:在人工管理阶段, 文件系统阶段和数据库管理阶段中数据独立性的特点。30 .22解析:运算符+的优先级高于双目运算符/,所以括号中的运算为 2/2,最后的结果为2/2*2。31 .继承继承 解析:类是面向对象语言中必备的程序语言结构,用来实 现抽象数据类型。类与类之间的继承关系实现了类之间的共享属性和操 作,一个类可以在另一个已定义的类的基础上定义,这样使该类型继承 了其超类的属性和方法,当然,也可以定义自己的属性和方法。32 .循环结构循环结构解析:C+语言3种基本结构就是顺序结构,选 择结构,循环结构。33 .数据库管理系统数据库管理系统 解析:本题考查数据库系统的组成 部分,其中硬件平台包括计算机、网络。软件平台包括操作系统、数据 库系统开发工具和接口软件。34 .a.*p=5 ; a.u3OOOu3OOO*p=5 ;解析:由于是公有成员,类对象 可以直接访问类的公有成员*号表示指针所指向的内容。35 .finfin解析:如果程序没有用close。主动关闭文件,则在文件流对象 退出作用域时,被调用的析构函数会关闭对象所联系的文件。但应及时 关闭,以便尽早释放占用的系统资源并将文件置于更安全的状态。36 .(1)应改为“TC:TC”。(2)应改为"voidTC:display”。应改为“TC:TC”。【解析】在类的外部定义成员函数时,必须在成员函数前面加上类名 和作用域运算符“:”,作用域运算符用采表示某个成员属于哪个 类,使用格式为“(类名):(成员函数(参数函数),因此第1处应改 为“TC:TC”,默认构造函数没有参数。由第2处“TC:display”后 的语句看,这是在类外实现TC函数,因此也有作用域运算符使用错 误问题,display函数返回值为void,因此第2处的语句应改为 “voidTC:display”。由第3处的语句“TC:TC”可知,显然这里是 在类外实现析构函数,析构函数是一个特殊的函数,它的名称和类名 相同,并在前面加“”字符,用采与构造函数加以区别,因此第3处 的语句应改为“TC:TC”。37 .( 1)应改为"catch(char*s)”。(2)应改为"cateh(inti)”。(3)应改为"catch()”。【解析】本题中第1个标识前的异常抛出语句为“throw,error");",其 中的类型为字符串。所以对应的异常捕捉语句catch中应该符合这个类 型,而程序中给出的语句“catch(chars)”是字符型的,所以第1处的语 句修改为"catch(char*S)”。第2个标识前的异常抛出语句为 t4throw(int)0);",其中的类型为int。对应的异常捕捉语句catch中应 该符合这个类型,所以补充catch子句中的类型,否则如果找不到匹配 的catch块,系统就会调用一个系统函数,使程序终止运行。即第2处 的语句修改为“catch(inti)”。如果在catch子句中没有指定异常信息的类 型,那么就用删节号“”表示它可以捕捉任何类型的异常信息,即修 改为“catch()”。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)应改为“ein. getline(str, 120, ?);(2)应改为"while(stri)"°应改为“if(stri>=a&&striv=2)”。【解析】本题中要求以输入字符“?”为结束符,用于字符输入的流成员 函数getline函数读入一行字符,格式为“cin. getline(字符数组,字符 个数,终止标志字符广,所以第1处改为“cin. getline(str,120, ?);第2处的“while(str)”语句应该是判断字符串str中的每一 个字符是否为结束符,若不是结束符,在循环中判断每一个字符是否 为小写,若为小写,则转换。所以应该修改为“while(stri)"°第3处的 “if(st巾>=a)”语句是判断字符stri是否为小写字符,而现有的语句只 是判断字符是否大于a,但是小写字符应该是a到2,所以修改为 44if(stri>=a& &stri>=z),o40.( 1)应改为"us