国家二级C++机试(操作题)模拟试卷3(共25题)_第1页
国家二级C++机试(操作题)模拟试卷3(共25题)_第2页
国家二级C++机试(操作题)模拟试卷3(共25题)_第3页
国家二级C++机试(操作题)模拟试卷3(共25题)_第4页
国家二级C++机试(操作题)模拟试卷3(共25题)_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

国家二级C++机试(操作题)模拟试卷3(共9套)(共25题)国家二级C++机试(操作题)模拟试卷第1套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modi1.cpp,但该程序运行时有错,请改正程序中的错误,使该程序的输出结果为:20,1515,20注意:错误的语句在//******error******的下面,修改该语句即可。1#include<iostream.h>2//******error******3voidExchangel(intm,intn)4{5intt=m;6m=n;’7n=t;8}9//******error******10voidExchange2(intm,intn)11{12intt=*m;13*m=*n;14*n=t;15}16voidmain()17{18intb=20;19inta=15;20Exchange1(a,b);21cout<<a<<’,’<<b<<end1;22//******error******23Exchange2(a,b);24cout<<a<<’,’<<b<<end1;25}标准答案:(1)voidExchange1(int&m,int&n)(2)voidExchange2(int*m,int*n)(3)Exchange2(&a,&b);知识点解析:程序中定义了两个交换函数,分别采用传地址和传引用的方式来实现交换。(1)由程序的运行结果可知,分别调用Exchange1()和Exchange2()后,a和b的值两次发生交换,因此Exchange1()函数和Exchange2()函数均为实现交换的函数。参数传递方式有多种,将变量名作为实参和形参、传递变量的指针和传送引用方式,将变量名作为实参和形参方式,这种传递是单向的,在函数执行过程中形参的值发生变化不会传回实参,而指针和引用方式在函数执行过程中形参会影响实参。显然这里不是采用变量名作为实参和形参的单向传递方式,而是采用的传地址或传引用的方式,在Exchange1()体内没有出现指针运算符“*”,因此可知Exchange1()函数是采用的传引用的方式,因此第1个标识下应改为“voidExchangel(int&m,int&n)”。(2)由1分析可知,Exchange2()函数内有指针运算符“*”,可知其是采用的传指针的方式作为参数传递,因此第2个标识下应改为“voidExchange2(int*m,int*n)”。(3)Exchange2()参数为int型数据指针,因此调用Exchange2()时应传入指针而不是变量名,故第3个标识下应改为“Exchange2(&a,&b);”。二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。阅读下列函数说明和代码,补充空出的代码。函数convert(char*des,char*str)的功能是去掉字符串str中相同的字母,并将处理后的结果存到des所指的字符串中。例如:输入:Thisisgreat!输出:Tllisgrea!注意:不能修改程序的其他部分,只能补充fun()函数。1#include<iostream.h>2#defineMAXLEN10243voidconvert(char*des,char*str)4{56}7voidmain()8{9charsour[MAXLEN];10chardest[MAXLEN];11cout<<’’Pleaseinputastring:’’<<end1;12cin.getline(sour,MAXLEN);13convert(dest,sour);14cout<<dest<<end1;15return;16}标准答案:1int1,j;2boolToAdd;3des[0]=0;4for(i=0;str[i]!=NULL;i++)5{6ToAdd=true;7for(j=0;des[j]!=NULL;j++)8{9if(str[i]==des[j])10{11ToAdd=false;//des数组中已存在该元素,将标志位设置为假,说明不用再添加12break;//des数组中已存在该元素,跳出循环13}14}15if(ToAdd)//des数组中不存在,添加进来16{17des[j]=str[i];18des[j+1]=0;19}20}知识点解析:convert(char*des,char*str)函数的功能是去掉字符串str中相同的字母,并将处理后的结果存到des所指的字符串中。原来的字符串存放在str指向的数组中,新字符串存放在des指向的数组中,因此可逐个读取str指向的数组里面的字符,把不同的字符放入des指向的数组中,即每次读str指向的数组一个字符,就在des指向的数组里面查找是不是已经有该字符了,如果已经有了则不添加进来,反之则把该字符加入到des指向的数组中。(1)由审题分析可知,需要两重循环,外层循环不断读取str中的元素,内循环在des数组中查找读到的str中的字符,如果找到了des数组中己存在该元素不需要添加,如果没找到则添加到des数组中。(2)在外循环体内,先设置bool型的标志变量ToAdd为真,假设在des数组中str[i]不存在,然后再内循环中,用str[i]和des[j]比较,如果相同说明已经存在了,将ToAdd设置为假,des[j]后面的元素不需要再比较了,跳出内循环。(3)通过判断ToAdd可知,str[i]是否存在des数组中,如果ToAdd为真,则说明des数组中不存在str[i],将str[i]添加到des数组中。三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开考生文件夹下的源程序文件modi3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。完成以下功能:(1)定义复数类CComplex的私有成员变量real和imaginary,分别用来表示复数的实部和虚部,都是double类型的变量。请在注释//********1********后添加适当的语句。(2)添加复数类CComplex的带一个参数的构造函数,分别将real和imaginary赋值为参数r和0。请在注释//********2********后添加适当的语句。(3)完成对运算符“+”的重载,分别对复数的实部和虚部相加。请在注释//********3********后添加适当的语句。(4)完成复数的友元函数Equal(CComplex&c1,CComplex&c2)的定义,如果两个数的实部和虚部都相等,则返回1,否则返回0,请在注释//********4********后添加适当的语句。注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。1#include<iostream.h>2classCComplex3{4private:5//********1********67public:8CComplex()9{10real=imaginary=0;11}12CComplex(doubler){13//********2********1415}16CComplexoperator+(CComplex&c1){17//********3********1819temp.real=real+c1.real;20temp.imaginary=imaginary+c1.imaginary;21returntemp;22}23voidSet(intre,intimag)24{25real=re;26imaginary=imag;27}28friendboolEqual(CComplex&c1,CComplex&c2);29};30boolEqual(CComplex&c1,CComplex&c2)31{32//********4********3334}35intmain()36{37CComplexcomplex1(5);38CComplexcomplex2;39cout<<Equal(complex1,complex2)<<endl;40complex2.Set(5,0);41cout<<Equal(complex1,complex2)<<end1;42return0;43}标准答案:(1)添加语句:doublereal,imaginary;(2)添加语句:real=r;imaginary=0;(3)添加语句:CComplextemp;(4)添加语句:return(c1.real==c2.real)&&(c1.imaginary=c2.imaginary);知识点解析:程序中定义了类CComplex,含有私有成员变量real和imaginary,分别用来表示复数的实部和虚部,CComplex类有两个构造函数、对运算符“+”的重载、Set(intre,intimag)可改变实部和虚部的值、友元Equal(CComplex&c1,CComplex&c2)函数可判断两个CComplex对象是否相等。(1)第1个标识下完成定义复数类CComplex的私有成员变量real和imaginary,均为double类型的变量,因此第1个标识下应添加“doublereal,imaginary;”。(2)构造函数CComplex(doubler)完成类的初始化,该构造函数有一个参数,分别将real和imaginary赋值为参数r和0,因此第2个标识下应添加“real=r:imaginary=0;”。(3)编译程序可知,变量temp没有定义,由operator+(CComplex&c1)函数体的语句可知,temp为函数的返回值,而operator+(CComplex&c1)函数体函数返回CComplex类对象,故在第3个标识下补充temp定义,即“CComplextemp;”。(4)即判断两个对象c1和c2的实部和虚部是否均相等,两个逻辑结果相与即可,因此第4个标识下应添加“return(c1.real==c2.real)&&(c1.imaginary==c2.imaginary);”。国家二级C++机试(操作题)模拟试卷第2套一、基本操作题(本题共1题,每题1.0分,共1分。)1、请打开考生文件夹下的解决方案文件proj1,此工程中包含程序文件main.cpp,其中有类Book("书")和主函数main的定义。程序中位于每个//ERROR****found****之后的一行语句行有错误,请加以更正。更正后程序的输出应该是:书名:C++语言程序设计总页数:299已把"C++语言程序设计"翻到第50页已把"C++语言程序设计"翻到第51页已把书合上。书是合上的。已把"C++语言程序设计"翻到第1页注意:只修改每个//ERROR****found****下的一行,不要改动程序中的其他内容。#include<iostream>usingnamespacestd;classBook{char*title;intnum_pages;//页数intcur_page;//当前打开页面的页码,0表示书未打开public:Book(constchar*theTitle,intpages):num_pages(pages){//ERROR**********found**********title=newchar[strlen(theTitle)];strcpy(title,theTitle);cout<<endl<<"书名:"<<title<<"总页数:"<<num_pages;}~Book(){delete[]title;}//ERROR**********found**********boolisOpen()const{returnnum_pages!=0;}//书打开时返回true,否则返回falseintnumOfPages()const{returnnum_pages;}//返回书的页数intcurrentPage()const{returncur_page;}//返回打开页面的页码voidopenAtPage(intpage_no){//把书翻到指定页cout<<endl;if(page_no<1||page_no>num_pages){cout<<"无法翻到第"<<cur_page<<"页。";close();}else{cur_page=page_no;cout<<"已把“"<<title<<"”翻到第"<<cur_page<<"页";}}voidopenAtPrevPage(){openAtPage(cur_1);}//把书翻到上一页voidopenAtNextPage(){openAtPage(cur_page+1);}//把书翻到下一页voidclose(){//把书合上cout<<endl;if(!isOpen())cout<<"书是合上的。";else{//ERROR**********found**********num_pages=0;cout<<"已把书合上。";}cout<<endl;}};intmain(){Bookbook("C++语言程序设计",299);book.openAtPage(50);book.openAtNextPage();book.close();book.close();book.openAtNextPage();return0;}标准答案:(1)title=newchar[strlen(theTitle)+1];(2)boolisOpen()const{returncur_page!=0;}(3)curpage=0;知识点解析:(1)主要考查考生对动态分配的掌握情况,如果要复制字符串theTitle,就要分配空间空间大小应该为theTitle的长度加1。(2)主要考查考生对bool函数的掌握情况,根据私有成员定义:intcur_page;//当前打开页面的页码,0表示书未打开。可知应该返回cur_page!=0;。(3)主要考查考生对成员函数的掌握情况,根据私有成员定义:intcurpage;//当前打开页面的页码,0表示书未打开。可知应给curpage赋值为0。二、简单应用题(本题共1题,每题1.0分,共1分。)2、请打开考生文件夹下的解决方案文件proj2。此工程中包含一个程序文件main.cpp,其中有类AutoMobile("汽车")及其派生类Car("小轿车")、Truck("卡车")的定义,以及主函数main的定义。请在横线处填写适当的代码,然后删除横线,以实现上述类定义。此程序的正确输出结果应为:车牌号:冀ABC1234品牌:ForLand类别:卡车当前档位:0最大载重量:12车牌号:冀ABC1234品牌:ForLand类别:卡车当前档位:2最大载重量:12车牌号:沪XYZ5678品牌:QQ类别:小轿车当前档位:0座位数:5车牌号:沪XYZ5678品牌:QQ类别:小轿车当前档位:-1座位数:5注意:只在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动//****found****。#include<iostream>#include<iomanip>#include<cmath>usingnamespacestd;classAutoMobile{//“汽车”类char*brand;//汽车品牌char*number;//车牌号intspeed;//档位:1、2、3、4、5,空档:0,倒档:-1public:AutoMobile(constchar*the_brand,constchar*the_number):speed(0){//**********found**********__________________________________________;strcpy(brand,the_brand);number=newchar[strlen(the_number)+1];//**********found**********__________________________________________;}~AutoMobile(){delete[]brand;delete[]number;}constchar*theBrand()const{returnbrand;}//返回品牌名称constchar*theNumber()const{returnnumber;}//返回车牌号intcurrentSpeed()const{returnspeed;}//返回当前档位voidchangeGearTo(intthe_speed){//换到指定档位if(speed>=-1&&speed<=5)speed=the_speed;}virtualconstchar*category()const=0;//类别:卡车、小轿车等virtualvoidshow()const{cout<<"车牌号:"<<theNumber()<<"品牌:"<<theBrand()//**********found**********<<"类别:"<<________________<<"当前档位:"<<currentSpeed();}};classCar:publicAutoMobile{//“小汽车”类intseats;//座位数public:Car(constchar*the_brand,constchar*the_number,intthe_seats):AutoMobile(the_brand,the_number),seats(the_seats){}intnumberOfSeat()const{returnseats;}//返回座位数constchar*category()const{return"小轿车";}//返回汽车类别voidshow()const{AutoMobile::show();cout<<"座位数:"<<numberOfSeat()<<endl;}};classTruck:publicAutoMobile{//“卡车”类intmax_load;//最大载重量public:Truck(constchar*the_brand,constchar*the_number,intthe_max_load):AutoMobile(the_brand,the_number),max_load(the_max_load){}intmax1oad()const{returnmax_load;}//返回最大载重量constchar*category()const{return"卡车";}//返回汽车类别voidshow()const{//调用基类的show()函数//**********found**********__________________________________________cout<<"最大载重量:"<<max1oad()<<endl;}};intmain(){Trucktruck("ForLand","冀ABC1234",12);truck.show();truck.changeGearTo(2);truck.show();Carcar("QQ","沪XYZ5678",5);car.show();car.changeGearTo(-1);car.show();cout<<endl;return0;}标准答案:(1)brand=newchar[strlen(the_brand)+1];(2)strcpy(number,the_number);(3)category()(4)AutoMobile::show();知识点解析:(1)主要考查考生对动态分配的掌握情况,要复制字符串就要先给brand分配空间。(2)主要考查考生对strcpy函数的掌握情况,该函数用于复制字符串。(3)主要考查考生对成员函数的掌握情况,纯虚函数category()返回汽车类型。(4)主要考查考生对虚函数的掌握情况,调用基类的虚函数show。三、综合应用题(本题共1题,每题1.0分,共1分。)3、请打开考生文件夹下的解决方案文件prog3,其中声明的MyString类是一个用于表示字符串的类。成员函数endsWith的功能是判断此字符串是否以指定的后缀结束,其参数s用于指定后缀字符串。如果参数s表示的字符串是MyString对象表示的字符串的后缀,则返回true;否则返回false。注意,如果参数s是空字符串或等于MyString对象表示的字符串,则结果为true。例如,字符串"cde"是字符串"abcde"的后缀,而字符串"bde"不是字符串"abcde"的后缀。请编写成员函数endsWith。在main函数中给出了一组测试数据,此种情况下程序的输出应为:s1=abcdes2=cdes3=bdes4=s5=abcdes6=abcdefs1endsWiths2:trues1endsWiths3:falses1endsWiths4:trues1endsWiths5:trues1endsWiths6:false要求:补充编制的内容写在//********333********与//********666********之间。不得修改程序的其他部分。注意:程序最后将结果输出到文件out.dat中。//MyString.h#include<iostream>#include<string.h>usingnamespacestd;classMyString{public:MyString(constchar*s){size=strlen(s);str=newchar[size+1];strcpy(str,s);}~MyString(){delete[]str;}boolendsWith(constchar*s)const;private:char*str;intsize;};voidwriteToFile(constchar*);//main.cpp#include"MyString.h"boolMyString::endsWith(constchar*s)const{//********333********//********666********}intmain(){chars1[]="abcde";chars2[]="cde";chars3[]="bde";chars4[]="";chars5[]="abcde";chars6[]="abcdef";MyStringstr(s1);cout<<"s1="<<s1<<endl<<"s2="<<s2<<endl<<"s3="<<s3<<endl<<"s4="<<s4<<endl<<"s5="<<s5<<endl<<"s6="<<s6<<endl;cout<<boolalpha<<"s1endsWiths2:"<<str.endsWith(s2)<<endl<<"s1endsWiths3:"<<str.endsWith(s3)<<endl<<"s1endsWiths4:"<<str.endsWith(s4)<<endl<<"s1endsWiths5:"<<str.endsWith(s5)<<endl<<"s1endsWiths6:"<<str.endsWith(s6)<<endl;writeToFile("");return0;}标准答案:ints_size=strlen(s);for(inti=0;i<s_size;i++)if(str[size-s_size+i]!=s[i])returnfalse;returntrue;知识点解析:主要考查考生对字符串的掌握情况,根据题目要求可知.函数用来判断此字符串是否以指定的后缀结束。判断过程是先求形参的长度,从形参的第一个字符开始判断字符串是否一致。该函数是bool函数最后要确定是返回true还是false。国家二级C++机试(操作题)模拟试卷第3套一、基本操作题(本题共1题,每题1.0分,共1分。)1、请打开考生文件夹下的解决方案文件proj1,此工程包含有一个源程序文件proj1.cpp。其中位于每个注释“//ERROR****found****”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为:(4,4)注意:只修改注释“//ERROR****found****”的下一行语句,不要改动程序中的其他内容。//proj1.cpp#include<iostream>usingnamespacestd;classPoint{public://ERROR*******found*******Point(doubleX,doubleY)_x(x),_y(y){}doubleGetX()const{returnx;doubleGetY()const{Eeturn_y;}//ERROR**********found**********voidNove(doublexOff,doubleyoff)const{x+=xOff;y+=yOff;}protected:doublex,y;};intmain(){Pointpt(1.5,2.5);pt.Nove(2.5,1.5);//ERROR*******found*******以下语句输出pt成员x和y的值tout<<’(’<<pt.-X<<’,’<<pt._y<<’)’<<endl;return0;}标准答案:(1)Point(doublex,doubley):_x(x),_y(y){}或Point(doublex,doubley){_x=x;_y=y;}(2)voidMove(doublexOff,doubleyOff)(3)cout<<’(<<pt.GetX(<<’,<<pt.GetY()<<’)’<<endl;知识点解析:(1)主要考查的是构造函数的成员初始化列表的语法,在成员列表之前必须加’:’。(2)主要考查成员函数中const的使用,先看Move函数的函数体:{x+=xOff;y+=yOff;}可以看到Point类的两个私有成员x和y的值都发生了变化,因此Move函数不能使用const,因为只有在函数内不改变类的成员的值时才能使用const。(3)主要考查私有成员不能被类外函数调用的知识。题目要求输出pt成员_x和_y的值,从Point类中的函数doubleGetX()const{retur_x;}和doubleGetY()const{retun_y;},可以分别得到_x和_y的值,因此这里使用语句cout<<’(<<pt.GetX()<<’,<?<pt.GetY(<<’)’<<endl;调用成员函数GetX(和GetY(x)来实现题目要求。二、简单应用题(本题共1题,每题1.0分,共1分。)2、请打开考生文件夹下的解决方案文件proj2,此工程包含有一个源程序文件proj2.cpp。其中定义了Basel类、Base2类和Derived类。Basel是一个抽象类,其类体中声明了纯虚函数Show。Base2类的构造函数负责动态分配一个字符数组,并将形参指向的字符串复制到该数组中,复制功能要求通过调用strcpy函数来实现。Derived类以公有继承方式继承Basel类,以私有继承方式继承Base2类。在Derived类的构造函数的成员初始化列表中调用Base类的构造函数。请在程序中的横线处填写适当的代码,然后删除横线,以完成Basel、Base2和Derived类的功能。此程序的正确输出结果应为:I’maderivedclass.注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。//proj2.cpp#include<iostream>#include<cstring>usingnamespacestd;classBase1{public://*******found*******下列语句需要声明纯虚函数Show________;};classBase2{protected:char*p;Base2(constchar*S){_p=newChar[stolen(s)+1];//*******found*******下列语句将形参指向的字符串常量复制到该类的字符数组中________;}~Base2(){delete[]_p;}};//*******found*******Derived类公有继承Basel,私有继承Base2类classDerived:________{public://*******found*******以下构造函数调用Base2类构造函数Derived(constchar*s):________{}voidShow(){cout<<.p<<endl;)};intmain(){Base1*pb=newDerived(”I’maderivedclass.”);pb->Show();deletepb;return0;}标准答案:(1)virtualvoidShow()=0(2)strcpy(_p,s)(3)publicBase1,privateBase2(4)Base2(s)知识点解析:(1)主要考查的是纯虚函数的定义。题目要求声明纯虚函数Show,所以首先看Base1类的派生类Derived类中Show函数的定义:voidShow){cout<<_p<<endl;}这时就可以得出答案了,只要在void前加上virtual,在0后加上=0;,再把函数体去掉就可以了,即virtualvoidShow()=0;。特别注意纯虚函数和虚函数的区别,虚函数不能用添加=0。(2)主要考查的是字符串赋值语句,题目要求将形参指向的字符串常量复制到该类的字符数组中。即把s复制给p,直接使用语句strcpy(_p,s);就可以了,strcpy为系统提供的字符串复制函数。(3)主要考查的是派生类的声明。题目要求Derived类公有继承Base1.私有继承Base2类。公有继承使用public,保护继承使用protected.私有继承使用private。如果一个类同时继承多个基类时,各个基类之间用“,”分开。(4)主要考查的是派生类的构造函数,定义派生类的构造函数时要使用成员列表对基类初始化。基类一:Base1类,没有构造函数,不需要使用参数。基类二:Base2类,有构造函数:Base2(constchar*s),因此需要成员列表:Derived(constchar*s):Base2(s)。三、综合应用题(本题共1题,每题1.0分,共1分。)3、请打开考生文件夹下的解决方案文件proj3,此工程包含一个源程序文件proj3.cpp,其功能是从文本文件in.dat中读取全部整数,将整数序列存放到intArray类的对象myArray中,然后对整数序列按非递减排序,最后由函数writeToFile选择序列中的部分数据输出到文件out.dat中。文件in.dat中的整数个数不大于300个。要求:补充编制的内容写在“//*******333*******”与“//*******666*******”两行之间。实现对整数序列按非递减排序,并将排序结果在屏幕上输出。不得修改程序的其他部分。注意:程序最后已将结果输出到文件out.dat中。输出函数writeToFile已经给出并且调用。//proj3.cpp#include<iostream>#include<fstream>#include<cstring>usingnamespacestd;classintArray{private:int*array;//整数序列首地址intlength;//序列中的整数个数public://构造函数,从文件中读取数据用于初始化新对象。参数是文件名intArray(char*filename);voidsort();//对整数序列按非递减排序~intArray();voidwriteToFile(char*filename);};intArray::intArray(char*filename){ifstreammyFile(filename);intlen=300,array=newint[len];length:0;while(myFile>>array[length++]);length--;myFile.close();}voidintArray::sort(){//*******333*******//*******666*******}intArray::~intArray(){delete[]array;}voidintArray::writeToFile(char*filename){intstep=0;OfstreamoutFile(filename);for(inti=0;i<length;i=i+step){outFile<<array[i]<<endl;step++;}outFile.close();}voidmain(){intArraymyArray(”in.dat”);myArray.sort();myArray.writeToFile(”out.dat”);}标准答案:for(inti=0;i<length;++i)//遍历整个数组for(intj=i;j<length;++j)if(array[i]>array[i]){inttemp;//定义一个临时变量temptemp=array[i];//存放变量值array[i]=array[j];//赋值array[j]=temp;//变量存放}for(inta=0;a<length;++a)//遍历数组,把数组中的所有元素打印到控制台cout<<array[a]<<"";知识点解析:题目要求对整数序列按非递减排序要排序就必须要有比较,所以定义两个下标i和j,按题目非递减排序要求,当array[i]比array[j]大时就交换其值,利用中间变量temp来实现。国家二级C++机试(操作题)模拟试卷第4套一、基本操作题(本题共1题,每题1.0分,共1分。)1、请打开考生文件夹下的解决方案文件proj1,其中有线段类Line的定义。程序中位于每个“//ERROR****found****”之后的一行语句有错误,请加以改正。改正后程序的输出结果应该是:Endpoint1=(1,8),Endpoint2=(5,2),length=7.2111。注意:只修改每个“//ERROR****found****”下的那一行,不要改动程序中的其他内容。#include#includeusingnamespacestd;ClassLine;doublelength(Line);classLine{//线段类doublex1,y1;//线段端点1doublex2,y2;//线段端点2public://ERROR*******found*******Line(doublex1,doubley1,doublex2,doubley2)const{this->xl=xl:this->yl=yl;this->x2=x2;this->y2=y2;}doublegetXl()const{returnx1;}doublegetYl()const{returny1;}doublegetX2()const{returnx2;}doublegetY2()const{returny2;}voidshow()const{cout<<"Endpoint1=("<标准答案:(1)Line(doublex1,doubley1,doublex2,doubley2){(2)cout<<"),length="<知识点解析:(1)主要考查考生对构造函数的掌握,构造函数要给私有成员赋初始值,因此不能使用const来限制。(2)主要考查考生对this指针的掌握,由函数length的声明doublelength(Line);可知,length函数的形参是Line类,在wildshow()eunst函数里,this指针指向的足当前Line类,因此可以用*this表示当前Line类。(3)主要考查考生对成员函数的掌握,length函数是类外函数,不能直接调用类的私有成员,因此要通过成员函数取得对应的值。二、简单应用题(本题共1题,每题1.0分,共1分。)2、请打开考生文件夹下的解决方案文件proj2,该工程中包含一个程序文件main.cpp,其中有“书”类Book及其派生出的“教材”类TeachingMaterial的定义,还有主函数main的定义。请在程序中“//********found********”下的横线处填写适当的代码,然后删除横线,以实现上述类定义和函数定义。此程序的正确输出结果应为:教材名:C++语言程序设计页数:299作者:张三相关课程:面向对象的程序设计注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“//********found********”。#includeusingnamespacestd;classBook{//“书”类char*title;//书名intnumpages;//页数char*writer;//作者姓名public:Book(constchar*the_title,intpages,constchar*the_writer):numpages(pages){title=newchar[strlen(thetitie)+1];strcpy(title,thetitle);//********found********strcpy(writer,thewriter);}//********found********~Book(){__________}intnumOfPages()const{returnnumpages;}//返回书的页数constchar*theTitle()const{returntitle;}//返回书名constchar*theWriter()const{returnwriter;}//返回作者名};classTeachingMaterial:publicBook{//“教材”类char*course;public:TeachingMaterial(constchar*the_title,intpages,constchar*thewriter,constchar*thecourse)//********found********:______________{course=newchar[strlen(thecourse)+1];strcpy(course,thecourse);}~TeachingMaterial(){delete[]course;)constchar*theCourse()const{returncourse;}//返回相关课程的名称};intmain(){TeachingMaterialabook("C++语言程序设计",299,"张三","面向对象的程序设计");cout<<"教材名:"<三、综合应用题(本题共1题,每题1.0分,共1分。)3、请打开考生文件夹下的解决方案文件proj3,其中包含了类TaxCalculator(“个税计算器”)和主函数main的定义。创建“个税计算器”需要接收税率表信息和起征额信息。在main函数中,通过两个数组创建了如下的税率表:利用这个税率表创建“个税计算器”时,假定起征额为2000元(即不超过2000元的所得不征收个人所得税)。请补充完成计算应纳个人所得税额的成员函数getTaxPayable,其中的参数income为月收入。此程序的正确输出结果应为:月收入为800元时应缴纳个人所得税0元月收入为1800元时应缴纳个人所得税0元月收入为2800元时应缴纳个人所得税55元月收入为3800元时应缴纳个人所得税155元月收人为4800元时应缴纳个人所得税295元月收人为5800元时应缴纳个人所得税455元注意:只能在函数getTaxPayable中的“//***********333***********”和“//***********666***********”之间填入若干语句,不要改动程序中的其他内容。//TaxCalCulator.h#inClude#includeusingnamespacestd;classTaxCalCUlator{public:TaxCalculator(doublethelimits[],doubletherates[],intthelength,doublethethreshoid):lower1imitS(newdouble[thelength]),rates(newdouble[thelength]),listlen(thelength),threshold(thethreshoid){for(inti=0;i=0){//**********333**********//**********666**********___________i;}returntax_payable;}voidTaxCalculator::showTaxPayable(doubleincome)const{cout<<"月收入为"<国家二级C++机试(操作题)模拟试卷第5套一、基本操作题(本题共1题,每题1.0分,共1分。)1、请打开考生文件夹下的解决方案文件proj1,此工程中包含程序文件main.epp,其中有类Score(“成绩”)和主函数main的定义。程序中位于每个“//ERROR****found****”之后的一行语句有错误,请加以改正。改正后程序的输出结果应为:学号:12345678课程:英语总评成绩:85注意:只修改每个“//ERROR****found****”下的一行,不要改动程序中的其他内容。#include<iostream>usingnamespaceStd;classScore{public:Score(constchar*the_course,constchar*the_id,intthe_normal,intthemidterm,intthe_endof_term):course(the_course),normal(the_normal),midteEm(the_midterm),end_of_term(the_end_of_term){//ERROR*******found*******strcpy(the_id,student_id);}constchar*get;Course()const{returncourse;}//返回课程名称//ERROR*******found*******constchar*getTD()const{return&student_id;}//返回学号intgetNormal()const{returnnormal;}//返回平时成绩intgetMidterm()const{returnmidterm;}//返回期中考试成绩intgetEndOfTerm()const{returnend_of_term;}//返回期末考试成绩intget;Final()const;//返回总评成绩private:constchar*course;//课程名称charstudent_id[12];//学号int;normal;//平时戍绩intmidterm;//期中考试成绩intend_of_term;//期末考试成绩};//总评成绩中平时成绩占20%,期中考试占30%,期末考试占50%,最后结果四舍五入为一个整数//ERROR*******found*******intgetFinal()const{returnnormal*0.2+midterm*0.3+end_of_term*0.5+0.5;}intmain(){charEnglish[]="英语";Scorescore(English,"12345678",68,83,92);cout<<"学号:"<<score.getTD()<<"";cout<<"课程:"<<score.getCouEse()<<"";cout<<"总评成绩:"<<score.getFinal()<<endl;return0;}标准答案:(1)strcpy(student_id,the_id);(2)coastchar*getID()coast{returnstudent_jd;}(3)intScore::getFinal()const{知识点解析:(1)主要考查考生对strcpy()函数的掌握情况,strcpy(参数一,参数二)函数的功能是将参数二的字符串复制给参数一,因此在这里student_id应该位于参数一的位置,即strcpy(student_id,the_id);。(2)主要考查考生对函数返回值的掌握情况,根据注释:返回学号可知学号应该由一个字符串组成。再看函数要返回的类型:constchar*,可知要返回一个char型指针,也就是一个char型数组,而&student_id是一个char型数组指针,因此直接写studentjd即可。(3)主要考查考生对类的成员函数的掌握情况,因为getFinal函数是Score类的成员函数,所以在定义时要加上类名和作用域符,即Score::。二、简单应用题(本题共1题,每题1.0分,共1分。)2、请打开考生文件夹下的解决方案文件proj2,该工程中包含一个程序文件main.cpp,其中有坐标点类point、线段类Line和三角形类Triangle的定义,还有main函数的定义。程序中两点间距离的计算是按公式实现的,三角形面积的计算是按公式实现的,其中请在程序中的横线处填写适当的代码,然后删除横线,以实现上述类定义。此程序的正确输出结果应为:Side1:9.43398Side2:5Side3:8area:20注意:只在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。#iticlude<iostream>#include<cmath>usingnamespacestd;classPoint{//坐标点类public:constdoublex,y;Point(doublex=0.0,doubley=0.0):x(x),y(y){}//**********found**********doubledistanceTo(_________)const{//到指定点的距离returnsqrt((x-p.x)*(x-p.x)+(y-p.y)*(y-p.y));}};classLine{//线段类public:constPointp1,p2;//线段的两,个端点//**********found**********Line(Pointp1,Pointp2):___________{}doublelength()const{returnp1.distanceTo(p2);}//线段的长度};classTriangle{//三角形类public:constPointp1tp2lp3;//三角形的三个顶点//**********found**********Triangle(________):p1(p1),p2(p2),p3(p3){}doublelength1()const{//边p1,p2的长度returnLine(p1,p2).length();}doublelength2()const{//边p2,p3的长度returnLine(p2,p3).length();};doublelength3()const{//边p3,p1的长度returnLime(p3,p1).length();}doublearea()const{//三角形面积//**********found**********doubles=________;returnsqrt(s*(s—length1())*(s-length2())*(s-length3()));}};intmain(){Triangler(Point(0.0,8.0),Point(5.0,0.0),Point(0.0,0.0));cout<<"Side1:"<<r.lengthl()<<endl;cout<<"Side2:"<<r.length2()<<endl;cout<<"Side3:"<<r.length3()<<endl;cout<<"area:"<<r.area()<<endl;return();}标准答案:(1)constPoint&p(2)pl(p1),p2(p2)(3)Pointp1,Pointp2,Pointp3(4)(1engthl()+Length2()+length3())/2知识点解析:(1)主要考查考生对函数形参的掌握,由函数的注释可知有本坐标点到达某个坐标点类的距离,再根据函数体returnsqrt((x—p.x)*(x—p.x)+(y—p.y)*(y—p.y));可知,该坐标点类名为p,因此可以知道形参为Point&p,为了不改变该坐标点的值,前面要加上eonst。(2)主要考查考生对构造函数的掌握,对于常变量型私有成员constPointp1,p2,只能用成员初始化列表进行赋值。(3)主要考查考生对构造函数的掌握,由空格后面的语句:p1(p1),p2(p2),p3(p3){}可知,该构造函数需要进行成员列表初始化,再看类的私有成员constPointp1,p2,p3,可知p1,p2,p3是Point类型,因此形参为Pointp1,Pointp2,Pointp3。(4)主要考查考生对成员函数的掌握,根据函数注释,可知本函数要求计算三角形面积,再看题目的提示:s=(a+b+c)/2。可知空格处要填的是三角形的三条边之和除以2,而求边长的函数已经给出,这里直接调用即可。三、综合应用题(本题共1题,每题1.0分,共1分。)3、请打开考生文件夹下的解决方案文件proj3,其中使用友元函数访问类的私有数据成员,求出两个数据成员的大于1的最小公因子。请编写友员函数FriFun,使其输出结果为:Commondenominatoris2要求:补充编制的内容写在“//********333********”与“//********666********”之间,不得修改程序的其他部分。注意:程序最后将结果输出到文件out.dat中。输出函数writeToFile已经编译为obj文件,并且在本程序中调用。//proj3.hclassFriFunClass{inta,b;public:FriFunClass(inti,intj){a=i;b=j;}friendintFriFun(FriFunClassx);//友元函数};voidwriteToFile(constchar*);//proj3.cpp#include<iostream>usingnamespacestd;#include”prj3.h”intFriFun(FriFunClassx){//********333********//由于函数FriFun()是类FriFunClass的友元函数,所以它可以直接访问a和b//********666********}intmain(){FriFunClassn(10,20);if(FriFun(n))cout<<"Commondenominatoris"<<FriFun(n)<<"\n";elsecout<<"NOcommondenominator.\n";writeToFile("");return0;}标准答案:1intmin=x.a<x.b?x.a:x.b;//此处为取出x.a与x.b中的最小值2for(inti=2;i<=min;i++)//从i到min遍历数组3if(x.a%i==0&&x.b%i==0)4//如i能同时整除x.a来的x.b,则仅回ireturni;5return-1;知识点解析:主要考查考生对友元函数的掌握情况,友元函数可以访问类的私有数据成员,题目要求函数求出两个数据成员的大于1的最小公因子,从2开始往上算,因此要同时可以被两个私有成员整除,这里用取余符号完成,取余为0即为整除。国家二级C++机试(操作题)模拟试卷第6套一、基本操作题(本题共1题,每题1.0分,共1分。)1、请打开考生文件夹下的解决方案文件proj1。此工程定义了StopWatch(秒表)类,用于表示时、分、秒信息,有构造函数StopWatch()、设置时间函数reset(),并且重载了前置和后置++运算符,实现增加1秒的功能。程序中位于每个//ERROR****found****下一行的语句有错误,请加以更正。更正后程序的输出应该是:00:00:0000:01:00注意:只修改每个//ERROR****found****下的那一行,不要改动程序中的其他内容。#include<iostream>#include<iomanip>usingnamespacestd;classStopWatch//"秒表"类{inthours;//小时intminutes;//分钟intseconds;//秒public:StopWatch():hours(0),minutes(0),seconds(0){}voidreset(){hours=minutes=seconds=0;}StopWatchoperator++(int)//后置++{StopWatchold=*this;++(*this);returnold;}//前进1秒StopWatch&operator++()//前置++{//ERROR*********found*********if(seconds++==60){seconds=0;minutes++;if(minutes==60){minutes=0;hours++;}}//ERROR*********found*********returnthis;}friendvoidshow(StopWatch);};voidshow(StopWatchwatch){cout<<setfill(’0’);cout<<setw(2)<<watch.hours<<’:’<<setw(2)<<watch.minutes<<’:’<<setw(2)<<watch.seconds<<endl;}intmain(){StopWatchsw;show(sw);for(inti=0;i<59;i++)sw++;//ERROR*********found*********show(sw++);return0;}标准答案:(1)if((++seconds)==60)(2)return*this;(3)show(++sw);知识点解析:(1)主要考查考生对’++"运算符的掌握结合程序可知,应先使seconds加1,再判断是否需要进位,因此为++second。(2)主要考查考生对this指针的掌握,应返回this指针指向的类。(3)主要考查考生对’++’运算符的掌握,判断sw是要先取值再自加1还是先自加1再取值。二、简单应用题(本题共1题,每题1.0分,共1分。)2、请打开考生文件夹下的解决方案文件proj2。此工程中定义了一个人员类Person,然后派生出学生类Student和教授类Professor。请在横线处填写适当的代码,然后删除横线,以实现上述类定义。此程序的正确输出结果应为:MynameisZhang.mynameisWangandmyG.P.A.is3.88.MynameisLi,Ihave8publications.注意:只在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动"//**********found********"。#include<iostream>usingnamespacestd;classPerson{public://**********found**********_______________{name=NULL;}Person(char*s){name=newchar[strlen(s)+1];strcpy(name,s);}~Person(){if(name!=NULL)delete[]name;}//**********found**********____________Disp()//声明虚函数{cout<<"Mynameis"<<name<<".\n";}voidsetName(char*s){name=newchar[strlen(s)+1];strcpy(name,s);}protected:char*name;};classStudent:publicPerson{public://**********found**********Student(char*s,doubleg)_____________________{}voidDisp(){cout<<"mynameis"<<name<<"andmyG.P.A.is"<<gpa<<".\n";}private:floatgpa;};classProfessor:publicPerson{public:voidsetPubls(intn){publs=n;}voidDisp(){cout<<"Mynameis"<<name<<",Ihave"<<publs<<"publications.\n";}private:intpubls;};intmain(){//**********found**********_________________;Personx("Zhang");p=&x;p->Disp();Studenty("Wang",3.88);p=&y;p->Disp();Professorz;z.setName("Li");z.setPubls(8);p=&z;p->Disp();return0;}标准答案:(1)Person()(2)virtualvoid(3):Person(s),gpa(g)(4)Person*p知识点解析:(1)主要考查考生对构造函数的掌握情况,构造函数使用成员列表初始化name。(2)主要考查考生对虚函数的掌握情况,虚函数使用关键字virtual,参考派生类中Disp函数可知函数返回类型为void。(3)主要考查考生对构造函数的掌握情况,使用成员列表初始化。(4)主要考查考生对指针的掌握情况,由语句:p=&x;p->DispO;可知,要定义p为Person类的指针。三、综合应用题(本题共1题,每题1.0分,共1分。)3、请打开考生文件夹下的解决方案文件prog3,其中声明了MyString类。MyString是一个用于表示字符串的类。成员函数startsWith的功能是判断此字符串是否以指定的前缀开始,其参数s用于指定前缀字符串。如果参数s表示的字符串,是MyString对象表示的字符串的前缀,则返回true;否则返回false。注意,如果参数s是空字符串或等于MyString对象表示的字符串,则结果为true。例如,字符串"abc"是字符串"abcde"的前缀,而字符串"abd"不是字符串"abcde"的前缀。请编写成员函数startsWith。在main函数中给出了一组测试数据,此种情况下程序的输出应为:s1=abcdes2=abcs3=abds4=s5=abcdes6=abcdefs1startsWiths2:trues1startsWiths3:falses1startsWiths4:trues1startsWiths5

温馨提示

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

评论

0/150

提交评论