《2021年山西省太原市全国计算机等级考试C++语言程序设计预测试题(含答案).docx》由会员分享,可在线阅读,更多相关《2021年山西省太原市全国计算机等级考试C++语言程序设计预测试题(含答案).docx(42页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2021年山西省太原市全国计算机等级考试C+语言程序设计预测试题(含答案)学校:班级:姓名:考号:一、1.选择题(10题)1 .以下程序段是函数返回a所指数组中最大的值所在的下标值,横线处 的语句为()。 fun(int*a, int n) int i,j=0,k; k=j; for(i=j;i ak); return(k); A.k=i B.k=j C.i=j D.i=n2 .阅读以下程序,写出程序运行后的输出结果是 o include voidmain() chara=H, e, 1, 1, o, 0 ; inti, j ; i=sizeof(a)/sizeof(char); j=strl
2、en(a) cout i 6 5 j;A.6 6B.5 6C.1 5D.6 53 .有以下程序: #include using namespace std; class CSample private: int i; public: CSample ( ); CSample( int val ); void Display(); CSample (); ; CSample: CSample () cout Cl; i =4 ; CSample: :CSample( int val ) cout C2; i = val; void CSample: :Display() cout i CSamp
3、le:CSample () cout D; int main () CSample a, b( 10 ); return 0; )执行后的输出结 果为()。A.C1C2DD B.DDC1C2 C.C2C1DD D.C1DC2D 4.在关系数据库中,用来表示实体之间联系的是A.树结构B.网结构C.线性表D.二维表);其中构造函数MyClass用的值初始化数据成员no因此在模板类体外, 构造函数MyClass应定义。31 . C+中的多态分为运行时的多态性及【】时的多态性。32 .某二叉树有5个度为2的结点以及3个度为1的结点,则该二叉树 中共有 个结点33 .软件生命周期包括八个阶段。为使各时期
4、的任务更明确,又可以分 为以下三个时期:软件定义期,软件开发期,软件维护期。编码和测试 属于【】期。34 .所谓数据封装就是将一组数据和与这组数据有关操作组装在一起, 形成一个实体,这实体也就是【o35 .如果要把返回值为void的函数A声明为类B的友元函数,则应在 类B的定义中加入的语句是。四、程序改错题(10题)36 .使用VC+6. 0打开考生文件夹下的源程序文件1. cpp,该程序 运行有问题,请改正main函数中的错误,使程序的输出结果为:number=l number=10 number=100注意:不要改动main函数,不能增加或删除行。也不能更改程序的结构,错误的语句在/ /
5、*error*的下面。试题程序:#includeclassTC (public :TC(inti) (number=i;)voidSetNumber(intm)(number=m;)intGetNumberconst(returnnumber;)voidPrintconst (coutnnumber=nnumberendl;)private:intnumber;;voidmain (/不不不不小个不小error不小不个不不不不TCobjl;objl. Print;TCobj2(3);7,7,7,7,7, 个个个个个个不个个个个个个个个个objl. number=10;1 I *0*TC. Se
6、tNumber(lOO);objl. Print;obj2. Print;cpp,该程序运修改该语句即37 .使用VC+ +6 .0打开考生文件夹下的源程序文件1 .行时有错误,请改正程序中的错误,使得程序输出:9, 8, 7, 6, 5注意:错误的语句在/ *error* /的下面,可。其他的语句不能修改。试题程序:#include(iostream . h classTC7“ 7,7个不不不不个不不不不不不不不不不TC(inti) m i=i ;voidprint(coutm_i,;)public :intm i ;);intmain(不不不不不不不不en*or不不不不不不不不inti ;
7、TC04(10);while(i5)(/5!if 1 si*kJ kI 1 kY不不不不不不不不prr()r不不不不不不不不i+ + :04 . print ; coutendl ;returnO ;38 .使用VC+6.。打开考生文件夹下的源程序文件1.cpp,该程序运行时有错,请改止其中的错误,使程序止常运行,输出的结果为Constructor, i=0,Destructor注意:错误的语句在/ / *error*的下面,修改该语句即可。试题程序:#include(iostream. h) classTC inti;public:TC;voiddisplay;TC;不不不不不不erpor不
8、不不不不不TC: TC coutnConstructornn, i=0;7,7, 不不不小不不error不不不不小小TC: display toutni=nin, nendl;TC: TCCOUInDestructornendl :voidmainTCa;a. display;39 .使用VC+6. 0打开考生文件夹下的源程序文件 1. cpp,该程序运行时有错误,请改正程序中的错误。本程序要求实现的功能为从键盘输入一个字符串,并将结果保存到文件1.txt中。注意:不要改动main函数,不能增加或删除行,也不能更改程序的结 构,错误的语句在* eiror* * - 自 j试题程序:#inclu
9、de#include个个个个个个个个个个个个个个个个usingstd;voidWriteFile(char*s) ofstreamoutl ;个小个个个个不个nor个个个个个小个个outl. open(nl. txt, binary|app);for(inti=0; si!=0; i+ +)7,个个个个个个个个个个个个个个个个outl. puts(si);outl. close;voidClearFile ofstreamoutl ;outl. open(nl. txt);outl. close;intmain chars 1024;ClearFile;coutnpleaseinputastr
10、in9 :nendl ;cin. getline(s, 1024);WriteFile(s);returnO ;40.使用VC+ +6.0打开考生文件夹下的源程序文件 1 . cpp,该程序运行时有错误,请改正程序中的错误。本程序要求实现的功能为从键盘输入一个字符串,并将结果保存到文件1.txt中。注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在* error* * * * * * 的下面。试题程序:#include#include usingstd ;voidWriteFile(char s) (ofstreamoutl ;rrw rr rrerror out
11、l . open(nl . txt, binary|app);for(inti=0 ; si!=0 ; i + +)!rj. rT*rT*error outl . puts(si); )outl . close ;voidClearFile(ofstreamoutl ;outl . open(nl .txt);outl . close ;)intmainClearFile ;coutnpleaseinputastrin9 :!endl ;cin . getline(s, 1024);WriteFile(s);returnO ;)41 .使用VC + +6 .0打开考生文件夹下的源程序文件1 .
12、cpp,该程序运 行时有错,请改正其中的错误,使程序正常运行,并使程序输出的结果 为:sizeof(Sl)=5sizeof(s2)=10sizeof(s3)=l注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在/error,J、.卜的下面。不能删除assert ()语句。(2)只能修改后面的数字。提示:assert函数如果为假,则会产生一个中断异常。试题程序:#include #include voidmain () char*sl=nabcn:个个个个个个个个个个个个个个个个assert(sizeof(s 1 )=3): coutnsizeof(sl)=5nen
13、dl ;chars210=nabn:kX*个不不不不不不不nor不不不不不不不不assert(sizeof(s2)=2);coutnsizeof(s2)=10nendl ;chars3=23 :、彳、error*1* *L*、,assert(sizeof(s3)=4);coutnsizeof(s3)=lnendl ;return ; )42.使用VC+ +6 .0打开考生文件夹下的源程序文件1 .cpp。本程序要 求输入一个字符串,然后将其中的小写字母改成大写字母,字符可能输 入多行,当输入字符“?”时,默认字符输入结束,最后把结果输出到屏幕 中。注意:不要改动main函数,不能增加或删除行,
14、也不能更改程序的结构,错误的语句在/errorJ、-卜的下面Q试题程序:#include voidmain inti=0 ;5,下列程序的输出结果是 o #include voidmain() int a=l, 2, 3, 4, 5, 6, *p, *q ; p=a; q=&p; cout *(p+); cout *q kJkI、!kJ不不小不小不en*or不不不不不不TC : TCCOUInDestructornendl :) voidmainTCa ;a . display ;44 .使用VC+6.。打开考生文件夹下的源程序文件1.cpp,该程序 运行时有错。请改正程序中的错误,使程序输出
15、的结果为1003732注意:错误的语句在/ / *error*的下面,修改该语句即可。试题程序:#include voidmain intm=0142:intn=0X27:intq=32;cout mendl;cout n endl ;cout qendl;return ;45 .使用VC+6. 0打开考生文件夹下的源程序文件1.cpp。本程序 要求输入一个字符串,然后将其中的小写字母改成大写字母,字符可能输入多行,当输入字符“?”时,默认字符输入结束,最后把结果输出 到屏幕中。注意:不要改动main函数,不能增加或删除行,也不能更改程序的结 构,错误的语句在/ / *error*的下面。试题
16、程序:#include voidmain inti=O;charstr120;coutnEnterastringendwith?Hendl;*1 kL* *i* *J kL*不不不不不不不不nor个个个*个个个个cin. getline(str, 120);kJ* *1* 1*vl* kJ* 1* *1* *1* vt*不不不不不不不不rror个个个*个个个个while(str)Kt* vt*kL*不不不不不不不个error个个不个个个小小stri=stri-a+A;i+ + ;coutstrendl ;return ;五、综合应用题(2题)46 .应添加“BA(intm)a=m ;(2)应添
17、力rPAKintm, intn) :BA(n)b=m ;应添力 H“PA2(intm, intn, intk) :PAl(n, k)C=m ;(4)应添力【解析】根据第1处要求,构造函数的函数名和类名一致,显然BA构 造函数的名称为BA,在BA中通过参数m完成对成员变量a的赋值, 因此构造函数的名称为BA(intm),在函数内部对成员a赋值,故第1处 的语句应添加“BA(intm)a=m ;)根据第2处的要求,构造函数的形式 为“PAl(intm, intn)”,m赋值给PA1类成员b,将n作为基类BA构造函 数的参数值传入,故第2处应添力TPAl(iiitm, intn) :BA(n)b=m
18、 ; ”。 根据第3处的要求,函数形式为PA2(intm, intn, intk),在构造函数中 将m赋值给数据成员c,将n和k分别赋值给基类PA1构造函数的参 数 m 和 n,因此第 3 处应添力PA2(intm, intn, intk) :PAl(n, k)C=m ;”。 根据第4处的要求,PA2类公有派生于PAI,而PA1公有派生于BA, 因此在PA2类中可以调用基类的geta和getb来获得基类私有成员a和 b,再输出PA2的私有成员C即满足要求,因此第4处应添加 ttcoutgetagetb,Cendl ; 5,o47 .请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程
19、proj3,其中声明的DataList类,是一个用于表示数据表的类。DataList 的重载运算符函数Operator+,其功能是求当前数据表与另一个相同长 度的数据表之和;即它返回一个数据表,其每个元素等于相应两个数 据表对应元素之和。请编写这个operator函数。程序的正确输出应该 是:两个数据表:1, 2, 3, 4, 5, 63, 4, 5, 6, 7, 8两个数据表之 和:4, 6, 8, 10, 12, 14 要求:补充编制的内容写在“/*333*与“*666*之间,不得修改程序的其他部分。注意:程序最后将结果输出到文件。ut. dat中。输出函数writeToFile 已经编译
20、为。bj文件,并且在本程序中调用。/DataList. h #inClude using namespaCe std;ClaSS DataList数据表类 intfen ;double*d; public:DataList(int len, double data=NULL) ; DataList(DataList&data);int lengthConstreturn len; double getElement(int i)Constt return di; DataList operator+(Const DataList&list)Const;两个数据表求和 void showCons
21、t;显示数据表;void writeToFile(Char$, Const DataList&) ; /main. Cpp#inClude,DataList. hDataList: DataList(int len, double data): len(ien) d=newdoublet len;for(int i=0; ilen; i+)d(九)i=(data=NULL?O. 0: datai); )DataList: DataList(DataList&data) : len(data. len) d=newdoublet len;for(int i=0; ilen; i+) di=dat
22、a. di;DataList DataList: 0perator+(Con8t DataList&list, )Const两个数据表求和 double*dd=new doublet list. 1 ensth;*333*666*return DataList(list. 1 ength, dd) ; void DataList: showConst显示数据表 fr(into i=0; ilen-l; i+) eoutdivv,;Coutdl en-lendl ;int main double sl=l, 2, 3, 4, 5, 6;double s2=3, 4, 5, 6, 7, 8;Dat
23、aList list 1(6, si), list2(6, s2);定义两个数据表对象 eoutw两个 数据表:endl:listl. show: list2. show; eoutwendlw”两个数据表之和:vVendl:(listl+list2). show;writeToFile(, listl+list2) ; return 0 :六、3.综合应用题(2题)48 .使用VC6打开考生文件夹下的工程test40_3o此工程包含一个 test40_3.cpp,其中定义了类CVector,但该类的定义并不完整。请按要 求完成下列操作,将程序补充完整。完成类CVector构造函数的定义,把传
24、入的int型参数a和b分别赋 值给类的成员变量x和yo请在注释“*1*”之后添加适当的语句。完成类CVector的运算符重载函数的定义,使Cvector类的两个对 象相加时可以直接使用符号“+”,并且结果仍然为类Cvector的对象,请 在注释“*2*,之后添加适当的语句。在主函数中添加适当的语句,把类Cvector的对象a和b相加,并且 把结果保存在对象c中,最后以“x, y”的形式输出在屏幕上,请在注释 “*3*,之后添加适当的语句。源程序文件test40_3.cpp清单如下:#include class CVector public:int x,y;CVector () ;CVector
25、 operator + (CVector); );CVector: :CVector (int a, int b)CVector CVector: :operator+ (CVector param) temp.y = y + param.y; return (temp);)int main ()(CVector a (3,1);CVector b (1,2);CVector c;return 0;49 .使用VC6打开考生文件夹下的工程testl6_3,此工程定义类Cat的保护数据成员itsAge用于表示年龄,它是血型的数 据。请在注释“* 1 *”之后添加适当的语句。定义类Cat的保护数据
26、成员GetAge()的类外定义,返回成员的itsAge 值,请在注释“*2*”之后添加适当的语句。(3)完成成员函数SetAge(intage)的类外定义 把数据成员itsAge赋值为 参数age的值,请在注释“*3*之后添加适当的语句。(4)完成成员函数Meow的类外定义,使其输出字节符串“meow.”到屏幕 上。请在注释“*4*”后添加适当的语句。输出结果如下:meow .kitty is a cat who is 5 years old .meow .注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。源程序文件testU3 . cpp清单如下: #include class C
27、at public:int GetAge();void SetAge(int age);void Meow();protected:*);int Cat:GetAge()*2*)void Cat:SetAge(int age) void Cat: :Meow()void main ()Cat kitty; kitty.Meow(); kitty. SetAge(5);cout kitty is a cat who is n;cout kitty.GetAge();cout n years old.nn;kitty. Meow();二、单选题(13题)11.16.考虑函数原型void test(
28、int aunt b=7tchar z=),F面的函数调用中,属于不合 法调用的是()oA. test(5);B. test(5.8)1C. test(6/tfz);D. test(O,O/ * );12 .对C+编译器区分重载函数无任何意义的信息是0A.参数类型B.参数个数C.返回值类型D.常成员函数关键字const13 .下列一维数组定义正确的是()。A.x=5;int numx;B.const iht x=5;float numx;C.const float x=5;int numx;D.const int x;x=5;intnumx;14.语句int*P=&k;定义了指针P,与这个语句
29、等效的语句序列是()。A.int* p ; P二&k ;B.int * P ; P=k ;C.int * p ; * P=&k ;D.int * p ; * P=k ;15.有如下程序:#inClude using namespaCe std; Class Bookpublic:Book(Char*t=) strCpy(title, t) ; 参考答案LA解析:函数fun中首先定义整型变量k用来存放返回最大值的下标, 并将其首先指向第一个元素,即k=j。然后在for循环中依次将当前元素 ai与标识为最大值的元素进行比较,如果当前元素大于这个标识元素, 那么将最大值标识为当前元素,即k二i。2
30、.D3 .A解析:本题程序首先定义了类CSample,其内部成员为private类型 数据成员inti和public类型成员函数,包括两个构造函数、一个析构函 数和一个普通成员函数voidDisplayO,其成员函数的功能分别为:CSample :CSample():构造函数,输出构造函数的执行消息“C1”,并 将数据成员i赋值为i=0 :CSample :CSample(intval):重载构造函数,输出构造函数的执行消 息“C2”,并将数据成员i赋值为i=val :void CSample :DisplayO :成员函数,输出数据成员i的值;CSample : CSample():析构函数
31、,输出析构函数的执行消息,并输 出数据成员值。在主函数中,程序分别采用两个构造函数,创建了类 CSample的两个对象,一个利用不带参数的构造函数创建对象a,另一 个利用带参数的构造函数创建对象b。根据上面的分析,可以得到a和 b中数据成员i的值分别为。(不带参数情况)和10(所带参数值)。因此下 面的两条输出语句分别输出“0”和“10”。此外,由于系统在创建对象时会调用构造函数,在对象生命期结束时会 调用析构函数,因此程序还会有相应的输出。由于构造函数的调用顺序 与对象创建的先后顺序一致,因此程序应该首先输出两个构造函数的调 用信息,即“C1”和“C2”。在主函数执行结束后,由于两个对象a和
32、b的 生命期已经结束,因此系统将调用析构函数收回系统资源。由于析构函 数的调用顺序与构造函数完全相反,因此系统将首先调用对象b的析构 函数,程序输出析构函数执行信息“D” ;之后调用对象a的析构函数, 程序输出析构函数执行信息“D”。4 .D解析:在关系模型中,把数据看成一个二维表,每一个二维表称为 一个关系。即关系模型是用表格数据来表示实体本身及其相互之间的联 系。本题的正确答案是D。5 .C6 .D解析:抽象类指的是类中至少有一个纯虚函数,纯虚函数是虚函数 后有“二0”修饰,表示该函数在本级类中没有实现,类仅用于派生。抽象 类存在的唯一目的就是构造类层次,派生出其他类。抽象类与其他类的 最
33、大区别就在于抽象类不能实例化。7 .C解析:对外部变量进行说明时,用extern标识。8 .D9.B解析:将E-R图转换成指定RDBMS中的关系模式是数据库逻辑 设计的主要工作。从E-R图到关系模式的转换是比较直接的,实体和联 系都可以表不成关系。10.B11 .C12 .C本题主要考查了函数重载。进行函数重载时,要求同名函数在参数个 数上不同,或者参数类型上不同,不可以根据函数返回值类型来重载 函数;const关键字可以用于参与对重载函数的区分。因此对C+编译器 区分重载函数无任何意义的信息是返回值类型。13.B解析:数组的下标不能是变量,不能为非整数,定义为常量的标识 符不能再用来赋值,只
34、能在定义时初始化。14 .A解析:本题考查的知识点是:指针的赋值。题目中的语句int*p二&k;有两个作用:首先,定义了一个血型指针p;然后,将变量k的地址 &k赋给刚定义的指针p。所以等效的语句序列为:int*p; p=&k;,应 该选择Ao15 .D本题考查纯虚函数和抽象类,纯虚函数是在声明虚函数时被“初始化” 为。的函数,包含纯虚函数的类为抽象类,抽象类足不能被实例化 的,但是可以定义指向抽象类数据的指针变量,当派生类成为具体类 后,就可以用这种指针指向派生类的对象,然后通过该指针调用虚函 数,实现多态性的操作。所以本题答案为D。16 .C解析:树具有明显的层次关系,即树是一种层次结构。
35、在树结构 中,根结点在第一层上。当树为非空时,树中有且只有一个根结点,当 树为空时,树中根结点的数目为0。17.DDo【解析】本题考查break语句的使用。break可以结束switch语句 和for循环语旬,但是不能使用在条件判断语句内。18.A19.D本题考查的是引用调用,因为函数swapOl用调用参数a,所以在swap 函数中a的变化会改变主函数中a的值,即a自加1,但b的值并未改 变。20 .C解析:C+中,类是用户自定义的一种数据类型,对象是类的实例, 类定义了属于该类的所有对象的共同特性。一个类作为一种数据类型, 它可以定义多个对象21 .D解析:本题考核类的析构函数。在C+中,析
36、构函数名为符号“” 加类名,析构函数没有参数和返回值。根据以上知识可知,MyClass类 的正确析构函数的说明为MyClass()o22 .D解析:假设线性表的长度为n,在最坏情况下,冒泡排序和快速排 序需要的比较次数为n(n-l)/2。由此可见,选项D正确。23 .CCo【解析】本题考查实型常数的指数表示法,可以肯定的是指数不能 为小数即必须为整数。由于符号E前面必须有数字。D在指数符号后 面没有数字,是错误的。24 .#解析:“产是预处理命令.的开始标记符。25 .驱动模块驱动模块解析:驱动模块是用来模拟被测试模块的上一级 模块,相当于被测模块的主程序,它将接收数据,将相关数据传送给被 测
37、模块,启用被测模块,并打印出相应的结果。1 6.6060解析:本题考察继承中子类对父类的继承方式,注意子类的add 成员函数,它直接使用了父类的成员函数进行运算。27.328.420420解析:一般二又树有一个性质:在任意一棵二叉树中,度为。 的结点(即叶子结点)总是比度为2的结点多一个。在根据完全二叉树的定义,在一棵完全二叉树中,最多有1个度为1的 结点。综合以上两点可以得到如下结论;设一棵完全二叉树具有n个结点。如果n为偶数.则在该二叉树中有n/2 个叶子结点以及n/2-l个度为2的结点,还有1个是度为1的结点;如 果n为奇数,则在该二叉树中有n+1个叶子结点以及n/2个度为2的 结点,没
38、有度为1的结点。在本题中,完全二叉树共有839个结点,839是奇数,因此,在该二叉 树中有420个叶子结点以及419个度为2的结点,没有度为1的结点。 29.s=730 . tempi ate TyClass :MyClass(TYPE k):n(k) template rnTyClass :MyClass(TYPE k):n(k)31 .编译编译解析:C+中的多态分为编译时的多态性及运行时的多态 性。32.1414解析:在二叉树中,度为0的结点数是度为2的结点数加1, 故二叉树中结点数的总和为度为0的结点数、度为1的结点数及度为2 的结点数三者相加,得出结果为14个结点。33 .软件开发软件
39、开发解析:通常,软件生命周期包括八个阶段,问题 定义、可行性研究,需求分析、系统设计、详细设计、编码、测试、运 行维护。为使各时期的任务更明确,又可以分为以下三个时期: 软件定义期:包括问题定义、可行性研究和需求分析三个阶段; 软件开发期:包括系统设计、详细设计,编码和测试四个阶段; 软件维护期;即运行维护阶段。34 .对象对象解析:注意不要误以为是类,实体是指对象。35 .friend void A() ; friend void A();解析:C+中类的友元函数在声明 时应在该函数前面加上关键字friend,同样如果要声明一个类为另一个 类的友元类也要在前面类名前加上friendo36 .
40、(1)应改为TCobjl(l);(2)应改为“Objl. SetNumber(lO);(3)应改为“0bj2. SelNumber(lOO);【解析】本题第1处的“TCobjl;”语句是声明TC类的对象Objl,根据 TC类构造函数的定义TC(血i),存在整型参数,并且题目要求第一个 输出结果两1,所以补全参数1,即第1处的“TCobjl(l);第2处处 的“objl. number=10;”应该是调用成员函数SetNumber赋值。在C+ 十中成员函数的使用形式应该是:对象名.成员函数,所以修改为 “objl. SetNumber(lO);?,o类是对象的抽象,而对象是类的具体实 例。第3处
41、“TC. SetNumber(lOO);”语句中的TC为类,并不是对象,这里应该使用定义的对象,即。bj2,所以将语句修改为“obj2. SetNumber(lOO);37 .(1)应添加“public :。n(2)“inti”应改为“inti(10);n(3)“i+ + ; ”应改为“i;n【解析】本题主要考查的是成员的访问属性。成员的访问属性有公有、 保护和私有3种,而默认的访问属性为私有,只有公有成员才能通过类 的对象被访问。故应在构造函数前添加“public :,否则该类无法被实例 化。变量的初始化可以通过“=”号,也可以和初始化对象一样添加构造 参数,题目已要求使用后者。本题要求输出5个数,while的循环变量i 每次减1,在i5时循环,故i初始化应为10。若循环中i每次增1,则 循环永远