全国计算机等级考试二级C++上机真题题库13套.docx
- 文档编号:26156541
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:47
- 大小:36.97KB
全国计算机等级考试二级C++上机真题题库13套.docx
《全国计算机等级考试二级C++上机真题题库13套.docx》由会员分享,可在线阅读,更多相关《全国计算机等级考试二级C++上机真题题库13套.docx(47页珍藏版)》请在冰豆网上搜索。
全国计算机等级考试二级C++上机真题题库13套
计算机等级考试二级C++莫拟试题及解析上机部分
一、改错题
使用VC6打开考生文件夹下的工程kt6_1,此工程包含一个源程序文件kt6_1.cpp,但该程序运行有问题,请改正程序中的错误,使程序的输出结果如下:
Constructor2
Constructorli=0
i=10
Destructor
源程序文件kt6_1.cpp青单如下:
#includeclassCSample
{inti;
public:
CSample(){cout<<"Constructor1”<
CSample(intval){cout<<"Constructor2”<
~CSample(){cout<<"Destructor" }; /**********found**********/voiddisp() {cout<<"i="< voidmain() { CSample*a,b(10); /**********found**********/a->disp(); /**********found**********/b->disp(); } 【参考答案】 ⑴将voiddisp() 改为: voidCSample: : disp() ⑵将a->disp(); 改为: a=newCSample;a->disp(); ⑶将b->disp(); 改为: b.disp(); 【试题解析】 (1)主要考查类成员函数定义格式的熟练掌握,对于类体外函数的实现,应该使用作用域符": : ",按照返回值类型类名: : 函数名(参数列表)的形式进行说明; (2)主要考查对动态存储分配的掌握,根据前面的定义,a是一个指针类型的变量,指向一个对象,但是并没有被初始化,此时a中的数据无任何意义,应该使用动态存储分配new生成一个新的对象,并将返回的指针赋值给a; (3)主要考查对象指针与对象在调用成员函数时格式的不同,b是一个对象变量, 使用b调用成员函数应该用"."运算符。 二、简单应用题 编写函数fun(),它的功能是利用以下所示的简单迭代方法求方程cos(x)-x=0的一 个实根。 xn+1=cos(xn) 迭代步骤如下: ⑴取x1初值为0.0。 ⑵x0=x1,把x1的值赋给x0o ⑶x1=cos(x0),求出一个新的x10 ⑷若x0-x1的绝对值小于0.000001则执行步骤(5),否则执行步骤 (2)。 (5)所求x1就是方程cos(x)-x=0的一个实根,做为函数值返回。 程序输出结果Root=0.739085= 注意: 部分源程序已存在文件kt6_2.cpp中。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若十语句。 文件kt6_2的内容如下: #include #include #include floatfun() { } voidmain() {cout<<"Root="< 【参考答案】 floatfun() { floatx1=0.0,x0; do {x0=x1; x1=cos(x0);} while(fabs(x0-x1)>=1e-6); returnx1; } 【试题解析】 解答本题的关键之处在于看活题中所给的迭代步骤”,同时要理解xn+1=cosxnfi 式的含义,要考虑到x1的初值为0.0。 三、综合应用题 使用VC6打开考生文件夹下的工程kt6_3,此工程包含一个源程序文件kt6_3.cpp,其中定义了用于表示考生的类Student,请按要求完成下列操作,将程序补充完整。 (1)定义私有数据成员code、english分别用于表示考生的编号、英语成绩、它们都是int型的数据。 请在注释“//**1**之后添加适当的语句。 (2)完成成员函数voidStudent: : inputinformation()的定义,该函数用于用户输入一个考生对象的信息,输入格式如下所示: 输入编号: 英语成绩: 计算机成绩: 请在注释“//**2**之后添加适当的语句。 ⑶利用已实现的类Student的成员函数,完成函数voidfirstname(Student*A[],intnum)的定义,该函数根据考生信息A[],输出num个考生中总分最高者的编号及其相应的总分,在此不考虑总分相同的情况。 请在注释“//**3**之后添加适当的语句。 注意: 除在指定位置添加语句之外,请不要改动程序中的其他内容。 源程序文件kt6_3.cpp青单如下: #includeclassStudent{//**1*intcomputer; inttotal; public: voidgetinformation(); voidcomputesum(); intgetcode(); intgettotalscore(); ~Student();}; voidStudent: : getinformation(){//**2 II. cout<<"英语成绩: cin>>english; cout<<"计算机成绩: "; cin>>computer;} voidStudent: : computesum() (total=english+computer; cout<<"编号" : getcode() (returncode;} intStudent: : gettotalscore() (returntotal;}voidfirstname(Student*A[],intnum) (//**3tempsum=(*A[0]).gettotalscore(); for(inti=1;i ( if(((*A[i]).gettotalscore())>tempsum) (tempcode=(*A[i]).getcode(); tempsum=(*A[i]).gettotalscore();} } cout<<"总分最高者--"< } voidmain() (Student*A[3]; inti,n=3; for(i=0;i (A[i]=newStudent; A[i]->getinformation();} for(i=0;i (A[i]->computesum();} 【参考答案】 (1)intcode; intenglish; ⑵cout<<"输入编号: "; cin>>code; (3)inttempcode,tempsum; tempcode=(*A[0]).getcode(); 【试题解析】 本题是对C++程序设计的综合考查,其设计类的成员及成员函数的定义与调用, 数据的输入输出,for循环语句,if条件判断语句等多个知识点,其中(3)中为指针数组的使用,指针数组是一组指针,每一个成员都按照指针的操作规则,但是整个访问规则仍然使用数组下标方式,如A[0]指的是第一个指针,而*A[0]是取出第一个指针指向的内容。 一、改错题 使用VC6打开考生文件夹下的工程kt7_1,此工程包含一个源程序文件kt7_1.cpp,但该程序运行有问题,请改正程序中的错误,使程序的输出结果如下: Constructorl Constructorl Constructorl Destructor Constructor2 Destructor x=0 x=5 Destructor Destructor 源程序文件kt21_1.cpp青单如下: #includeclassB{intx; public: B(){x=0;cout<<"Constructor1"< {B*ptr; ptr=newB[2]; /**********found**********/ptr[0]=B(0); ptr[1]=B(5); /**********found**********/for(inti=0;i<2;) ptr[i].print(); delete[]ptr;} 【参考答案】⑴将~B(inti){cout< < ⑵将ptr[0]=B(0);改为: ptr[0]=B(); ⑶将for(inti=0;i<2;)改为: for(inti=0;i<2;i++) B(inti){x=i;cout<<"Constructor2"< ptr=newB[2]; /**********found**********/ptr[0]=B(0); ptr[1]=B(5); /**********found**********/for(inti=0;i<2;) ptr[i].print(); delete[]ptr;} 【参考答案】 ⑴将~B(inti){cout< < ptr[0]=B(); ⑶将for(inti=0;i<2;)改为: for(inti=0;i<2;i++) 【试题解析】 本题主要考查对文件相关操作的熟练程度。 首先定义文件流类的变量,然后使用该对象的open方法打开一个文件,接着使用while循环和getch方法每次读入一个字符并统计字符个数,最后使用closed法关闭文件,返回i值。 二、简单应用题 编写一个函数intcharnum(charfn[10]),该函数以只读方式打开文件fn,,通过统计,返回文件中字符的个数,请使用while循环实现计数功能。 注意: 部分源程序已存在文件kt7_2.cpp中。 请勿修改主函数main和其他函数中的任何内容,仅在函数charnum的花括号中填写若十语句° 文件kt7_2.cpp的内容如下: #include #include #include intcharnum(charfn[10]); voidmain() {intnum; num=charnum("abc.txt"); cout<<"num="< { } 【参考答案】 intcharnum(charfn[10]) {fstreamfile; file.open(fn,ios: : in); if(! file) {cout<<"abc.txtcan'topen"< charch; inti=0; while(! file.eof()) (file.get(ch); i++;} file.close(); returni-1;} 【试题解析】 本题主要考查对文件相关操作的熟练程度。 首先定义文件流类的变量,然后使用该对象的open方法打开一个文件,接着使用while循环和getch方法每次读入一个字符并统计字符个数,最后使用closed法关闭文件,返回i值。 三、综合应用题 使用VC6打开考生文件夹下的工程kt7_3,此工程包含一个源程序文件kt7_3.cpp,其中含有一个类Circle的定义,但该类的定义并不完整。 请按要求完成下列操作,将类Circle的定义补充完整。 (1)为类Circle增加一个构造函数,该函数有一个参数,并在构造时将该参数值赋给成员radius。 将该函数实现为一个非内联函数,并且使用参数列表的方式将类成员赋值。 请在注释“//**1**之后添加适当的语句。 (2)为类Circle增加一个成员函数print(),使得可以输出有关圆的信息,比如下列程序 Circlec; c.SetRadius(5); c.Print(); 将输出: Thecirclehasradiusof5! 请在注释“//**2**之后添加适当的语句。 (3)完成友元函数voidCompareR(Circle*c1,Circle*c2)的定义,在屏幕中输出c1与c2比较radiu次小结果,要求使用if-else结构完成。 请在注释“//**3**之后添加适当的语句。 输出结果如下: Thecirclehasradusof5! Thecirclehasradiusof10! c1 除在指定位置添加语句之外,请不要改动程序中的其他内容 源程序文件kt7_3.cpp青单如下: #includeclassCircle{ public: Circle(): radius(5)&//**1voidSetRadius(intr){radius=r;}intGetRadius(){returnradius;}//**2friendvoidCompareR(Circle*c1,Circle*c2); private: intradius;}; voidCompareR(Circle*c1,Circle*c2){//**3cout<<"c1>c2"< cout<<"c1=c2"< cout<<"c1 {Circlec1; c1.SetRadius(5); c1.Print(); Circlec2(10); c2.Print(); CompareR(&c1,&c2);} 【参考答案】 (1)Circle(intrad): radius(rad){} (2)voidPrint(){cout<<"Thecirclehasradiusof"< \N";} (3)if((c1->GetRadius())>(c2->GetRadius())) 【试题解析】 本题考查成员函数的定义与实现,友元函数,if分支语句等知识点。 友元函数的类体外的定义与一般函数一样,其中if-else的使用,else总是与其最近的那个if配对使用的,书写时最好使用缩进格式,将配对的if-else对齐,以免出错。 一、改错题 使用VC6打开考生文件夹下的工程kt8_1,此工程包含一个源程序文件kt8_1.cpp,但该程序运行有问题,请改正程序中的错误,使程序的输出结果如下: fifunctionofderive f2functionofbase f4functionofbase 源程序文件kt8_1.cpp青单如下: #include classbase{public: /**********found**********/voidf1(){cout<<"f1functionofbase"< : publicbase {voidf1(){cout<<"f1functionofderive"< {base*p; deriveobj2; /**********found**********/p=obj2; p->f1(); p->f2(); p->f4();} 【参考答案】 ⑴将voidf1(){cout<<"f1functionofbase"< virtualvoidf1(){cout<<"f1functionofbase"< : publicbase 改为: classderive: publicbase ⑶将p=obj2; 改为: p=&obj2; 【试题解析】 (1)主要考查对虚函数的深刻理解,虚函数是动态联编的基础,也是实现多态性 的重要方法,它可以根据不同的情况动态的选择执行哪一个函数。 在派生类中实现虚函数应该满足与基类的同名函数完全相同,并且使用关键字virtual修饰,本题中由输出结果中的f1functionofderive可知,必须将基类base勺成员函数f1()定义为虚函数; (2)主要考查对派生类定义格式的掌握,应该使用“启面是继承列表,而“: : 是'作 用域符; (3)主要考查类对象的定义与使用,p是一个指针类型的变量,给它的赋值应该是一个地址,即使用取地址操作符&。 二、简单应用题 已知考生的记录由学号和学习成绩构成,N名考生的数据已存入黔构体数组中。 请编写函数fun,该函数的功能是: 找出成绩最低的考生记录,通过形参返回主函数(规定只有一个最低分)。 已给予出函数的首部,请完成该函数。 注意: 部分源程序已存在文件kt8_2.cpp中。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若十语句。 文件kt8_2.cpp的内容如下: #include #include #include #defineN10typedefstructss (charnum[10]; ints; }STU; voidfun(STUa[],STU*s) ( } voidmain() {STU a[N]={{"A01",81},{"A02",89},{"A03",66},{"A04",87},{"A05",77},{"A06",90},{"A 07",79},{"A08",61},{"A09",80},{"A10",71}},m; fun(a,&m); cout<<"*****Theoriginaldate*****"< "< fun(STUa[],STU*s) {inti,min; min=a[0].s; for(i=0;i *s=a[i];}} 【试题解析】 解题思路为: 先假设第一个考生的成绩最优,通过循环找到最低成绩,并将最低 成绩的考生记录传给指针s,带回主函数。 三、综合应用题 使用VC6打开考生文件夹下的工程kt8_3,此工程包含一个源程序文件kt8_3.cpp,该文件设计了用于输出乘法九九表的类。 请认真阅读已有的代码,按要求完成下歹0操作,将程序补充完整。 (1)定义类Table的私有数据成员x和y,分别用于表示九九表中的两个乘数(x*y),它们都是int型的数据。 请在注释“//**1**之后添加适当的语句; ⑵完成类Table的成员函数print()的定义,该函数以"x*y=z"的格式打印出九九表中的一个乘法算式,请使用格式化输出函数printf实现,在注释“//**2**之后添加适当的语句; ⑶完成类Table9的成员函数print()的定义,该函数调用基类Table的print()函数,将九九表输出到屏幕,请在注释“//**3**之后添加适当的语句; (4)补充主函数,在屏幕上输出九九表,以便测试所定义的类的正确性。 请在注释“〃**4**之后添加适当的语句。 注意: 除在指定位置添加语句之外,请不要改动程序中的其他内容。 源程序文件kt8_3.cpp青单如下: #include #includeclassTable{//**1*intz; public: voidprint(intx,inty,intz);}; voidTable: : print(intx,inty,intz){//**2**}classTable9: publicTable {public: voidprint();}; voidTable9: : print(){//**3intx,y,z; for(i=1;i<10;i++) {for(j=1;j{x=i; y=j; z=i*j; Table: : print(y,x,z);} printf("\n");}} main(){//**4**return0;} ⑴intx; inty; (2)printf("%d*%d=%d",x,y,z); if(z<10)printf(""); ⑶inti,j; ⑷Table9t_9; t_9.print(); 【试题解析】 主要考查将具体问题抽象为类,将类的定义补充完整,并进行类定义测试的能力 一、改错题 使用VC6打开考生文件夹下的工程kt9_1,此工程包含一个源程序文件kt9_1.cpp,但该程序运行有问题,请改正程序中的错误,使程序的输出结果如下: 4,5 20 源程序文件活单如下: #include intn,m; public: voidset(inta,intb){m=a;n=b;} voidshow(){cout< publicA{ints; public: voidset(){s=m*n;} voidshows(){cout< voidmain(){ Bb; /**********found**********/ b.set(); b.show(); b.set();/**********found**********/b.show(); } 【参考答案】 (1)在“}后添加分号 (2)将b
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 全国 计算机等级考试 二级 C+ 上机 题库 13