版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
国家二级C++机试(操作题)模拟试卷49(共9套)(共25题)国家二级C++机试(操作题)模拟试卷第1套一、基本操作题(本题共1题,每题1.0分,共1分。)1、请使用“答题”菜单或使用VC6打开考生文件夹projl下的工程projl,此工程包含程序文件main.cpp,其中有类TimesTable(“乘法口诀表”)的定义和主函数main的定义。程序中位于每个//ERROR**********found**********下的语句行有错误,请加以改正。更正后程序的输出应该是:1*1=11*2=22*2=41*3=32*3=63*3=91*4=42*4=83*4=124*4=161*5=52*5=103*5=154*5=205*5=251*6=62*6=123*6=184*6=245*6=306*6=361*7=72*7=143*7=214*7=285*7=356*7=427*7=491*8=82*8=163*8=244*8=325*8=加6*8=487*8=568*8=641*9=92*9=183*9=274*9=365*9=456*9=547*9=638*9=729*9=81注意:只能修改每个//ERROR**********found**********下的那一行,不要改动程序中的其他内容。#include#includeusingnamespacestd;classTimesTable//乘法口诀表{public://ERROR**********found**********TimesTable(intn=9){count:n;)voidPrint()const;private:constintcount;};//ERROR**********found**********voidPrint()const{inti,j;//ERROR**********found**********for(i=1;i标准答案:(1)TimesTable(intn=9):count(n){}(2)voidTimesTable::Print()const(3)for(i=1;i<=count;i++)知识点解析:主要考查类中成员函数,在类定义的外部来实现。成员函数后附加const的作用【解题思路】(1)const为只读变量,const变量应该在成员初始化列表中赋初值,否则C++认为是语法错误,可知成员变量count,定义const类型,不能在构造函数中赋值。(2)类中的成员函数,在类外部定义,必须附加域说明符,来表示该函数属于某个类的。(3)根据题设值,计算出从1一n的乘法口诀表,包括n在内,因此使用“<=”运算符。二、简单应用题(本题共1题,每题1.0分,共1分。)2、请使用“答题”菜单或使用VC6打开考生文件夹proj2下的工程proj2,此工程包含程序文件main.cpp,其中有类Graphics(“图形”)、Squares(“正方形”)、Diamods(“菱形”)的定义和主函数main的定义。请在程序中的横线处填写适当的代码,然后删除横线,以实现上述定义。例如,当输入数值3时,程序分别输出边长为3的菱形和正方形,即此程序的正确输出结果应为:**********************注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不能删除或移动”//**********found**********#inflnclude<10stream>#includeusingnamespacestd;classGraphics//图形类{public:Graphics(inte):edges(e){)//**********found**********——;protected:intedges;};classSquares:publicGraphics//正方形类{public:Squares(intx):Graphics(x){)voidDraw();},voidSquares::Draw(){inti,j;if(edges<=0)cout<<“errors”<0){for(i=0;i0){for(i=0;i>e;Graphics*objs[2];objS[0]=newDiamonds(e);objS[1]=newSquares(e);for(inti=0;i<2;i++’)obJS[i]一>Draw();deleteobjS[0];delete,jobjS[1],return0;}标准答案:(1)virtualvoidDraw()=0(2)classDiamonds:publicGraphics(3)for(j=O;j<2,*i+1;j++)(4)for(i=edges;i>0;i一一)知识点解析:主要考查类的纯虚函数的使用,类的公有继承,以及简单图形的构造。【解题思路】(1)由于Graphic的子类都使用了Draw()成员函数,并且都有自己各自不同的实现,很容易发现类中成员多态的特性,类的多态是使用虚函数来实现的。(2)Diamonds的成员函数Draw()中使用了edges。但是类Diamonds中没有该成员,而Graphic中有此成员,可知该类公有继承了Graphic。(3)根据图形的变化可知第一行1个*,第二行3个*,第三行5个*,增长的规律是2*i+1,因而可以很容易得出结果。(4)菱形的下半部分是由5个木开始递减的,即从最大边递减,直到为0,可以得出答案。三、综合应用题(本题共1题,每题1.0分,共1分。)3、请使用“答题”菜单或使用VC6打开考生文件夹proj3下的工程proj3,其中声明了MagicNumber:类,该类是一个用于表示连续正整数序列的类。MagicNumber的成员函数Nar-cissistic的功能是查找该序列中的水仙花数水仙花数是指一个n位数(11>=3),其每个位上的数字的n次方之和等于该数本身,例如153就是一个3位的水仙花数(153=1*1*1+5*5*5+3*3*3)).请编写成员函数Narcissistic。在main函数中给出了一组测试数据,若输入3,此时程序的输出应该是:3位的水仙花数共4个:153370371407注意:只需在//**********333**********和//**********666**********之间填入所编写的若干语句,不要改动程序中的其他内容。#include”MagicNumber.h”voidMagicNumber::Narcissistic(){inti,number,sum,figures[30];for(number=min;number>d;MagicNumberobj(d);obj.Narcissistic();obj.Print(string(”水仙花数”)>;writeToFile(”C:\\test\\.-);return0;}//proj3\MagicNumber.h#include#include#includeusingnamespacestd;classMagicNumber{public:MagicNumber(intd):digits(d),min(pow(i0,digits一1)),max(pow(i0,digits)一.1),count(0){)MagicNumber(intxl,intx2):min(x1),max(x2){}voidResetCount(){count=0;}intGetCount()const{returncount;)intGetSet(intindex){returnset[index];}voidNarcissistic();//查找水仙花数voidPrint(string&str){cout<标准答案:sum=0;for(i=i一1;i>=0;i一一){sum+=pow(figures[i],digits);}if(sum==number){set[count++]=number;}知识点解析:主要考查类构造函数的使用,初始化列表。获取整数各个位上的数值。【解题思路】MagicNumber类中的成员变量digits代表连续数列的位数,构造函数首先使用参数来初始化digits,然后根据digits初始化min和max,其中min代表digits位数的最小值,max代表digits位数的最大值,count用来统计min—max范围内的水仙花数的个数,set数组用来存储min~max范围内的水仙花数。程序首先在main函数根据用户输入的数字d来构造一个MagicNumber对象,构造函数完成digits、min、max的初始化,然后调用MagicNumber对象的成员函数Narcissistic()来统计所有digits位数的水仙花数信息。for循环通过遍历min~max范围内的所有数,在遍历过程中,while循环将当前遍历到的数x的各个数位上的数字统计到figures数组的前digits个元素中,接下来需要做的事情就是判断x是否是水仙花数,即将figures数组的前digits个元素分别求digits次方(位数次方)再相加,累加的和存储到sum中,最后判断sum是否与当前数x(number)相等,若相等,则x属于水仙花数,这时需要把x存储到下标为count的set数组中,同时count变量自增1(水仙花数个数加1),否则的话继续下一次for循环,直到当前数x达到最大值max为止。统计完水仙花数后,再调用对象的Print函数,输入水仙花数信息。国家二级C++机试(操作题)模拟试卷第2套一、基本操作题(本题共1题,每题1.0分,共1分。)1、请使用VC6或使用【答题】菜单打开考生文件夹proj1下的工程proj1,此工程中包含程序文件main.cpp,其中有ElectricFan(“电风扇”)类和主函数main的定义。程序中位于每个“//ERROR****found****”之后的一行语句有错误,请加以改正。改正后程序的输出结果应为:品牌:清风牌,电源:关,风速:0品牌:清风牌,电源:开,风速:3品牌:清风牌,电源:关,风速:0注意:只修改每个“//ERROR****found****”下的那一行,不要改动程序中的其他内容。#includeusingnamespacestd;classElectricFan{//“电扇”类char*brand;intintensity;//风速:0一关机,1一弱,2一中,3一强public:ElectricFan(constchar*the_brand):intensity(0){brand=newchar[Strlen(thebrand)+1];strcpy(brand,thebrand);}~ElectricFan(){delete[]brand;}//ERROR********found********constchar*theBrand()const{return*brand;}//返回电扇品牌inttheIntensity()const{returnintensity;}//返回风速boolisOn()const{returnintensity>0;}//返回电源开关状态//ERROR****found****voidturnOff(){intensity=1;}//关电扇voidsetIntensity(intinten){//开电扇并设置风速//ERROR********found********if(intensity>=1&&intensity<=3)intensity=inten;}voidshow(){cout<<"品牌:"<标准答案:(1)constchar*theBrand()const{returnbrand;}//返回电扇品牌(2)voidturnOff(){intensity=0;}//关电扇(3)if(inten>=1&&inten<=3)intensity=inten:知识点解析:(1)主要考查考生对指针的掌握情况,因为brand是一个动态指针,水brand表示字符串的首个字符,brand表示动态数组,这里要返回动态数组存储的品牌名称。(2)主要考查考生对成员函数的掌握情况,根据题目中类的定义中私有成员的定义:intintensity;//风速:0-关机,1-弱,2-中,3-强,可知本函数要关电扇,因此在这里intensity=0;。(3)主要考查考生对成员函数的掌握,根据题目中函数的注释:开电扇并设置风速,可知if语句里要判断的应该是形参inten而不是intensity。二、简单应用题(本题共1题,每题1.0分,共1分。)2、请使用VC6或使用【答题】菜单打开考生文件夹proj2下的工程proj2,此工程中含有一个源程序文件proj2.cpp。函数char*GetNum(ehar*src,ehar*buf)从src开始扫描下一个数字字符序列,并将其作为一个字符串取出放入字符串空间buf中。函数返回扫描的终止位置,如果返回NULL表示没有扫描到数字字符序列。运行程序时,如果输入的一行字符序列是ABC012XYZ378MN274WS则输出为:Digitstring1is012Digitstring2is378Digitstring3is274注意:只在横线处编写适当代码,不要删除或移动“//****found****”。//proj2.cpp#includeusingnamespacestd;char*GetNum(char*src,char*bur){while(*src!=’\0’){if(isdigit(*src))break;src++;}if(*src==’\0’)//********found********__________;while(*src!=’\0’&&isdigit(*src)){//********found********__________;buf++;src++;}*bur=’\0’;returnsrc;}intmain(){charstr[100],digits[20];cin.getlihe(str,100);char*p=str;inti=1;while((p=CetNum(p,digits))!=NULL){cout<<"Digitstring"<标准答案:for(int1=0;1<1en;++i)//从头遍历数组dfor(intj=i;jd[j])//d[i]和d[j]比较,如果大于,就d[i]和d[j]值交换{inttemp=d[i];//把临时整型变量temp赋值为d[i]d[i]=d[j];//把d[j]赋值给d[i]d[j]=temp;//把temp值赋给d[j]}知识点解析:本题使用最简单的冒泡排序算法,首先明确要排序的动态数组d,其长度为len,在此可以使用两个下标i和j相比较,当d[i]>d[j]时,数组内的值利用中间变量temp进行交换。(2)tout<<"),length="<国家二级C++机试(操作题)模拟试卷第3套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modi1.cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,输出的结果为:Constructor,i=0,Destnlctor注意:错误的语句在//********error********的下面,修改该语句即可。#includeclassCObj{inti;public:CObj();voiddisplay();~CObj();};//********error********CObj:CObj(){cout<<"ConstruCtor"<<",";i=0;}//********error********CObj:display(){cout<<"i="<标准答案:(1)CObj::CObj()(2)voidCObj::display()(3)CObl::~CObl()知识点解析:(1)在类的外部定义成员函数时,必须在成员函数前面加上类名和作用域运算符(::),作用域运算符用来表示某个成员属于哪个类,使用格式为:<类名>::<成员函数>(<参数函数>),因此第1个标识下应改为COb.j::COb.j(),默认构造函数没有参数。(2)第2个标识下“CObj:display()”,从其后的语句看,这是在类外实现CObj函数,因此也有作用域运算符使用错误问题,display()函数返回值为void,因此第2个标识下应改为voidCObj::display()。(3)第3个标识下“CObj:CObj()”,显然这里是在类外实现析构函数,析构函数是一个特殊的函数,它的名字和类名相同,并在前面加“~”字符,用来与构造函数加以区别,因此第3个标识下应改为CObj::~CObj()。二、综合应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi3.cpp,通过把类Distance定义为类Point的友元类,来实现计算两点之间距离的功能。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。(1)把类CDistance定义为类CPoint的友元类。请在注释//********1********之后添加适当的语句。(2)定义类CPoint的构造函数,完成给私有数据成员x和y的赋值,并且两个参数的缺省值都为0。请在注释//********2********之后添加适当的语句。(3)完成类CDistance的成员函数length(Point&pPoint,Point&qPoint)的定义,并在其中计算点p、q之间的距离,并且返回结果。假设两点之间的距离distance=sqrt((pPoint.x-qPoint.x)*(pPoint.x-qPoint.x)+(pPoint.y-qPoint.y)*(pPoint.y-qPoint.y))。请在注释//********3********之后添加适当的语句。注意:增加代码,或者修改代码的位置已经用符号表示出来。请不要修改其他的程序代码。#include#includeusingnamespacestd;classCPoint{public://********1********//定义类Point的构造函数//********2********voiddisplay(){cout<<"x="<标准答案:(1)添加语句:friendclassCDistance;(2)添加语句:CPoint(floata=0,floatb=0){x=a;y=b;}(3)添加语句:returnsqrt((pPoint.x-qPoint.x)*(pPoint.x-qPoint.x)+(pPoint.y-qPoint.y)*(pPoint.y-qPoint.y));知识点解析:(1)第1个标识下补充定义类CDistance为类CPoint的友元类,声明友元类的格式为:friend<类名>;,故第1个标识下应添加“friendclassCDistance;”。(2)类CPoint的构造函数完成给私有数据成员x和Y的初始化,两个参数的缺省值都为0,因此参数含有默认值0,故第2个标识下应添加“CPoint(floata=0,floatb=0){x=a;y=b;}”。(3)类CDistance的成员函数length(CPoint&pPoint,CPoint&qPoint)返回点p、q之间的距离,可由公式distance=sqrt((pPoint.x-qPoint.x)*(pPoint.x-qPoint.x)+(pPoint.y-qPoint.y)*(pPoint.y-qPoint.y))计算求得,第3个标识下应添加“returnsqrt((pPoint.X—qPoint.x)*(pPoint.x-qPoint.x)+(pPoint.y-qPoint.y)*(pPoint.y-qPoint.y));”。国家二级C++机试(操作题)模拟试卷第4套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹proj1下的工程proj1,其中有“沙发”类Sofa和主函数main的定义。程序中位于每个//ERROR**********found**********下的语句行有错误,请加以更正。更正后程序的输出应该是:座位数:3颜色:红色注意:只能修改每个//ERROR,**********found**********下的那一行,不要改动程序中的其他内容。#include<iost:ream>usingnamespacest:d;classSofa{//“沙发”类intseats;//座位数charcolor[10];//颜色public://ERROR******found******Sofa(ints,constchar*co){//ERROR******found******if(CO=NULL)color[0]=’\0’;elsestrcpy(color,co);}//ERROR******found******constchar*getSeats()const{returnseats;)constchar*gel:Color()const{returncolor;)};int:main(){Sofasara(3);cout:<<“座位数:”<<sara.getSeats()<<end1;cout:<<“颜色:”<<sara.getColor()<<end1;return0;}标准答案:(1)Sofa(ints,constchar*co=“红色”):seats(s){(2)if(co==NULL)(3)intgetSeats()const{returnseats;}知识点解析:暂无解析二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹proj2下的工程proj2,其中有元素类Element和队列类Queue的定义。请在程序中的横线处填写适当的代码,然后删除横线,以实现上述类定义。此程序的输出结果应为:3850507注意:只能在横线处填写适当的代码,不要改动程序中的其他内容。#include<iostream>#include<cmath>#include<cstdlib>usingnamespacestd;#defineMaxLength100classElement:{//“元素”类public:intn;Element:(inti=0):n(i){}};classQueue{//“队列”类Element*element;//指向存储元素的数组的指针inttail;//队尾元素的下标public:Queue():element(newElemerit;[100]),tail(-1){}~Queue(){delete[]element;}voidpush(Elementele);//在队列尾端添加一个元素Elementpop();//在队列首端删除一个元素,返回被删元素Elementffont()const{Eeturnelement:[0];}//返回队首元素,但不从队列中删除该元素//******found******intsize()const{return(_______);}//返回元素个数voidshow()const;//显示集合中所有元素};voidQueue∷push(Elementele){if(tail==HaxLength-1)return;//空间满,不做任何处理//******found******_______;}ElementQueue∷pop(){if(size()==0)exit(1);//队列空,不做任何处理Elementtmp=element[0];for(inti=0;i<tail;i++)element[i]=element[i+1];//******found******_______;returntrnp;}voidQueue∷show()COnst{//******found******for(_______)cout<<element[i].n<<’’;cout<<end1;}intmain(){Queueq;q.push(3);q.push(8);q.push(5);q.push(0);q.show();q.pop();q.pop();q.push(7);q.show();return0;}标准答案:(1)tail+1(2)element[++tail]=ele(3)tail--(4)inti=0;i<=tail;i++知识点解析:暂无解析三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用Vc6打开考生文件夹proj3下的工程proj3,其中声明了NyString类,它是一个用于表示字符串的类。成员函数reverse将字符串反转,例如“abode”反转后就成了“edcba”。请补充完整函数reverse。在main函数中给出了一个测试数据,此情况下程序的输出应该是:ThisisastringgnirtSasisihT注意:只需在函数reverse的//********333********和//********666********之间填入若干语句,不要改动程序中的其他内容。//NyString.h#include<iostream>usirignamespacestd;char*dup(constchar*);classNyString{char*str;public:NyString(constchar*s=""):str(dup(s){}NyString(constNyString&m):str(dup(m.str)){}~HySting(){delete[]str;}voidreverse();voidshow(ostream&os=tout)const{os<<str<<end1;)};inlineostream&operator<<fostrearn&os,constNyString&m){m.show(os);returnos;}voidwriteTOFile(constchar*path);//NyString.cpp#include"NyString.h"char*clup(constohar*s){char*p=newchar[strlen(s)+1];strcpy(p,s);returnp;}voidNyString∷EeveEse(){//********333********//********666********}voidwriteToFile(constchar*path);//writetoFile.cpp#include<fstream>#include"MyString.h"voidwriteToFile(constchar*path){charfull150;strcpy(full,path);Strcat(full,"out.dat");OfStreamoutfile(full);if(outfile.fail()){cerr<<"打开输出文件失败!";return;}MyStringm1:"Thisisanotherstring";MyStringm2("字符串反转演不");outfile<<m1<<m2:m1.reverse();m2.reverse();outfile<<m1<<m2;outfile.close();}标准答案:voidMyString∷reverse(){inti,i;charch;intlen=strlen(str);for(i=0,j=len-1;i<j;i++,j--){ch=str[i];str[i]=str[j];str[j]=ch;}}知识点解析:暂无解析国家二级C++机试(操作题)模拟试卷第5套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modil.cpp,该程序运行时有错误,请改正程序中的错误。本题的功能是:从键盘输入字符串S,然后输出字符串S中的字符个数。注意:不要改动main函数,不能增行或删行,也不能更改程序的结构,错误的语句在//*******error*******的下面。#includeintmain(){∥*******error*******cout<<“pleaseinputastring:”<标准答案:(1)std::cout<<“pleaseinputastring:”<知识点解析:程序要求从键盘输入字符串S,然后输出字符串S中字符的个数。从己给定源程序的main主函数开始入手,程序通过cin输入标准类型的成员函数getline读入一行字符,然后通过strlen0函数求得字符串长度。二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。阅读下列函数说明和代码,补充空出的代码。函数IsPalindromes(cha*string)实现的功能是判定给定的字符串是否构成回文字符串,如果是则返回1,否则返回0。如:1234554321或者1234321都认为是回文字符串。如果串为空或一个字母时,均认为是回文字符串。注意:不能修改程序的其他部分,只能补充IsPalindromes()函数。#include#defineMAXLEN1024boolIsPalindromes(char*string){}voidmain(){charstr[MAXLEN];cout<<“请输入一行文字"<标准答案:Intlen=0;for(;String[fen]!=NULL;len++)//获取字符串的长度;len一一;//下标从0开始到len一1for(inti=0;i知识点解析:函数IsPalindromes(cha*string)实现的功能是判定给定的字符串是否构成回文字符串,如果是则返回1,否则返回0。回文是指前后对称的字符串,因此可比较对称位置的字符是否一样来判断是否是回文,如果每个对称位置的元素均相同则是回文,返回1,否则返回0。三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开考生文件夹下的源程序文件modi3.epp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。完成以下功能:(1)定义CMyTime的私有成员函数myear、mmonth类型为int,请在注释∥********1********后添加适当的语句。(2)补充完成CMyTime的构造函数,完成对m.yearm_month、的赋值,请在注释∥********2********后添加适当的语句。(3)完成print()的输出,请在注释∥********3********后添加适当的语句。输出格式如下:CurrentTimeyear:XXmonth:XX注意:XX表示两位0~9的数字,如CurrentTimeyear:08month:04。(4)完成对month的增加函数AddMonth(intm),请在注释∥********4********后添加适当的语句。注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。{}includeclassCMyTime{private:∥********1********public:CMyTime(intyear,intmonth){∥********2********}voiddisplay(){charyearChar[3];charmonthChar[3];yearChar[0]=(myear%100)/10+‘0’;yearChar[1]=(myear%10)+‘0’;monthChar[0]=(mmonth%100)/10+‘0’;monthChar[1j=(mmonth%10)+‘0’;∥********3********cout<<“CurrentTime”<<”year:“<标准答案:(1)添加语句:intmyear,mmonth;(2)添加语句:m_year=year;m—month=month;(3)添加语句:yearChar[2]=0;monthChar[2]=0;(4)添加语句:mveam+=mmonth/12;或myear=myear+mmonth/12;知识点解析:程序中定义了类CMyTime,含有m_year和m_month两个成员变量,成员函数display()显示成员变量的值,AddMonth(intm)和AddYear(intn)函数分别改变m_month和m_year两个成员变量的值。国家二级C++机试(操作题)模拟试卷第6套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modi.cpp,该程序运行时有错,请改正其中错误,使得程序正常运行,并使程序输出的结果为:cTest注意:不要改动main函数,不能增行或删行,也不能更改程序的结构,错误的语句在//********error********的下面。#inciudeVoidmain(){//********error********charc="c";cout<标准答案:(1)charC=’C’;(2)intb=1024;(3)b+=1024;知识点解析:(1)打开modi1.cpp,调试程序,显示错误提示为第一标识下“odil.cpp(5):errorC2440:’initializing’:cannotconvertfrom’char[2]’to’char’”。变量C的类型为字符型,字符型值应该是用单引号,双引号是字符串型。所以这里修改为“charC=’c’;”。(2)根据第3个标识下的语句知道,b的值加上1024,然后判断b的值是否为2048,所以这里b的类型应该是整型,而不是字符型,所以修改为“intb=1024;”。(3)显示第3个标识下的语句“b+=1024;”的错误提示modi1.cpp(10):errorC2018:unknowncharacter’Oxa3’,因为语句中的“;”为中文输入法下的输入,并不是英文下的“;”,所以修改为“b+=1024;”。二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。请完成函数fun(char*str,charch),本函数采用二分法,在已按字母次序从小到大排序的字符数组str中,查找字符ch,若ch在数组中,函数返回字符ch在数组中的下标,否则返回-1。二分法查找的思想是:初始查找区间的下界为0,上界为len-1,查找区间的中后,k=(下界+上界)/2:若list[k]等于ch,查找成功;若list[k]>ch,则新的查找区间的下界不变,上界改为k-1;否则新的查找区间的下界改为k+1,上界不变。在新区间内继续用二分法查找。注意:请勿改动主函数main与其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。#includeintfun(char*str,charch){}voidmain(){charstr[]={’a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’,’i’,’j’,’k’,0};charch;cout<<"请输入一个字符:"<>ch;cout<<"输入数字的位置是:"<<fun(str,ch)<标准答案:intlow=0;//初始查找区间的下界inthigh;intk;for(high=0;str[high]!=0;high++)//求字符串长度while(lowch)high=k-1;elselow=k+1;}if(str[low]==ch)returnlow;return-1;知识点解析:(1)首先,初始查找区间的下界为0。(2)然后,求得字符串长度len,上界为len-1,查找区间的中后,k=(下界+上界)/2;若list[k]等于ch,查找成功。(3)若list[k]>ch,则新的查找区间的下界不变,上界改为k.1;否则新的查找区间的下界改为k+1,上界不变。三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开考生文件夹下的源程序文件modi3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。完成以下功能:(1)完成构造函数的定义,使得数据成员变量filename和contex为空,内容长度FileLength为0。请在注释//********1********后添加适当的语句。(2)完成析构函数,对contex内存的释放。请在注释//********2********后添加适当的语句。(3)完成WriteFile()函数,用来对contex内容进行设置填充内容,如果以前有内容,则删除以前的内容,重新填写。请在注释//********3********后添加适当的语句。(4)完成CopyFile()函数,完成将参数对象的contex的内容拷贝到当前的文件内容中,请在注释//********4********后添加适当的语句。注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。#includeclassMyFileClass{private:charfilename[64];char*contex;intFileLength;public:MyFileClass(){//********1********contex=NULL;FileLength=0;}~MyFileClass(){if(FileLength)//********2********}voidOpenFile(char*str,intlen){for(inti=0;i标准答案:(1)添加语句:filename[0]=0;或filename[0]=NULL;(2)添加语句:delete[]contex;(3)添加语句:deletecontex;(4)添加语句:WriteFlie(file.contex,file.FileLength);知识点解析:(1)构造函数MyFileClassO完成类成员变量的初始化,将数据成员变量filename和contex为空,内容长度FileLength为0,因此第1个标识下应添加“filename[0]=0;"或“filename[0]=NULL;”。(2)析构函数用来释放一个对象,在对象删除前,用它来做一些清理工作,WriteFlie()函数会申请内存空间,因此在对象删除的时候必须将这些内存空间释放,这个工作可以放在析构函数中来处理,第2个标识下是释放由new申请的内存空间,因此第2个标识下应添加“delete[]contex;”。(3)WriteFile()函数首先对contex内容清空,第3个标识下应添加“deletecontex;”。(4)CopyFile(MyFileClass&file)函数完成将参数file对象的contex的内容拷贝到当前的文件内容中,可直接调用WriteFlie()函数,因此第4个标识下应添加“WriteFlie(file.contex,file.FileLength);”。国家二级C++机试(操作题)模拟试卷第7套一、基本操作题(本题共1题,每题1.0分,共1分。)1、请使用VC6或使用【答题】菜单打开考生文件夹progl下的工程progl,该工程中包含程序文件main.cpp,其中有Salary(“工资”)类和主函数main的定义。程序中位于每个“//ERROR****found****”之后的一行语句行有错误,请加以改正。改正后程序的输出结果应为:应发合计:3500应扣合计:67.5实发工资:3432.5注意:只修改每个“//ERROR****found****”下的那一行,不要改动程序中的其他内容。#includeusingnamespacestd;classSalary{public:Salary(constchar*id,doublethe_base,doublethe_bonus,doublethe_tax)//ERROR********found********:thebase(base),thebonus(bonus),thetax(tax){staffid=newchar[strlen(id)+1];strcpy(staffid,id);}//ERROR********found********~Salary(){delete*staff_id;}doublegetGrosSPay()const{returnbase+bonus;}//返回应发项合计doublegetNetPay()const{returngetGrossPay()-tax;)//返回实发工资额private:char*staffid;//职工号doublebase;//基本工资doublebonus;//奖金doubletax;//代扣个人所得税};intmain(){Salarypay("888888",3000.0,500.0,67.50);tout<<"应发合计:"<标准答案:(1):base(the_base),bonus(the_bonus),tax(the_tax)(2)~Salary(){delete[]staff_id;}(3)cout<<"实发工资:"<知识点解析:(1)主要考查考生对构造函数的掌握情况,构造函数的成员初始列表要把形参放在括号内。(2)主要考查考生对析构函数的掌握情况,析构函数使用delete释放指针,delete后要跟标识符“[]”。(3)主要考查考生对成员函数调用的掌握情况,调用类的成员函数使用标识符“.”,而不是作用域符“::”。二、简单应用题(本题共1题,每题1.0分,共1分。)2、请使用VC6或使用【答题】菜单打开考生文件夹proj2下的工程proj2,其中定义了vehicle类,并派生出motorcar类和bicycle类。然后以motorcar和bicycle作为基类,再派生出motorcycle类。要求将vehicle作为虚基类,避免二义性问题。请在程序中的横线处填写适当的代码并删除横线,以实现上述类定义。此程序的正确输出结果应为:801501001注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。#includeclassvehicle{private:intMaxSpeed;intWeight;public://********found********vehicle(intmaxspeed,intweight):_________~vehicle(){);intgetMaxSpeed(){returnMaxSpeed;)intgetWeight(){returnWeight;)},//****found****classbicycle:_________publicvehicle{private:intHeight;public:bicycle(intmaxspeed,intweight,intheight):vehicle(maxspeed,weight),Height(height)f)intgetHeight(){returnHeight;);};//********found********classmotorcar:________publicvehicle{private:intSeatNum;public:motorcar(intmaxspeed,intweight,intseatnum):vehicle(maxspeed,weight),SeatNum(seatnum){}intgetSeatNum()freturnSeat-Num;);};//********found********classmotorcycle:________{public:motorcycle(intmaxspeed,intweight,intheight):vehicle(maxspeed,weight),bicycle(maxspeed,weight,height),motorcar(maxspeed,weight,1){}};voidmain(){motorcyclea(80,150,100);cout<标准答案:(1)MaxSpeed(maxspeed),Weight(weight){};(2)virtual(3)virtual(4)publicbicycle,publicmotorcar知识点解析:(1)主要考查考生对构造函数的掌握,构造函数使用初始化列表来对私有成员MaxSpeed和Weight初始化。(2)主要考查考生对派生类的掌握,题目要求将vehicle作为虚基类,避免二义性问题。因此在这里添加virtual使vehicle成为虚基类。(3)主要考查考生对派生类的掌握,题目要求以motorcar和bicycle作为基类,再派生出motorcycle类。在主函数中可以看到motorcycle类的实例a调用getHeight函数和getSeatNum函数,由此可知这两个基类都是公有继承,因此得出语句:publicbicycle,publicmotorcar。三、综合应用题(本题共1题,每题1.0分,共1分。)3、请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程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#includeusingnamespacestd;#include"prj3.h"intFriFun(FriFunClassx){//*********333*********//由于函数FriFun()是类FriFunClass的友元函数,所以它可以直接访问a和b//*********666*********}intmain(){FriFunClassn(10,20);if(FriFun(n))cout<<"Commondenominatoris"<标准答案:intmin=x.a知识点解析:主要考查考生对友元函数的掌握情况,友元函数可以访问类的私有数据成员,题目要求函数求出两个数据成员的大于1的最小公因子,从2开始往上算,因此要同时可以被两个私有成员整除,这里用取余符号完成,取余为0即为整除。国家二级C++机试(操作题)模拟试卷第8套一、基本操作题(本题共1题,每题1.0分,共1分。)1、下列给定程序中,函数fun的功能是:把形参a所指数组中的最大值放在a[0]中,接着求出a所指数组中的最小值放在a[1]中,再把a所指数组元素中的次大值放在a[2]中,把a数组元素中的次小值放在a[3]中,依此类推。例如,若a所指数组中的数据最初排列为:1、4、2、3、9,6、5、8、7,按规则移动后,数据排列为:9、1、8、2、7、3、6、4、5。形参n中存放a所指数组中数据的个数。请在程序的中括号处填入正确的内容并将中括号删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include#defineN9/*********found*********/voidfun(int【1】,intn){inti,j,max,min,px,pn,t;/*********found*********/for(i=0;ia[j]){min=a[j];pn=j;)}if(px!=i){t=a[i];a[i]=max;a[px]=t;if(pn==i)pn=px;}if(pn!=i+1){t=a[i+1];a[i+1]=min;a[pn]=t;)}}main(){2ntb[N]={1,4,2,3,9,6,5,8,7),i;printf("\nTheoriginaldata:\n");for(i=0;i标准答案:(1)a[](2)2(3)i+1知识点解析:填空1:由main中的函数调用语句确定函数定义的形式参数。填空2:for循环语句中,循环变量增值为2。填空3:确定for语句循环变量的初值。二、简单应用题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,fun函数的功能是:分别统计字符串中大写字母和小写字母的个数。例如,给字符串S输入:AAaaBBbb123CCcccd,则应输出:upper=6,lower=8。请改正程序中的错误,使它得出正确的结果。注意:部分源程序在文件MODI1.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include/*********found*********/voidfun(char*s,inta,intb){while(*s){if(*s>=’A’&&*s<=’Z’)/*********found*********/*a=a+1;if(*s>=’a’&&*s<=’Z’)/*********found*********/*b=b+1;s++;}}main()(chars[i00];intupper=0,lower=0;printf("\nPleaseastring:");gets(s);fun(s,&upper,&lower);printf("\nupper=%dlower=%d\n",upper,lower);}标准答案:(1)voidfun(char*s,int*a,int*b)(2)*a=*a+1;(3)*b=*b+1;知识点解析:(1)由主函数中调用fun函数的语句fun(s,&upper,&lower)可知,函数的后两个变量为指针的形式,所以用*a和*b。(2)*a的作用是用来记录大写字母的个数,此处的作用是对*a累加1,所以此处应改为*a=*a+1。(3)*b的作用是用来记录小写字母的个数,此处的作用是对*b累加1,所以此处应改为*b=*b+1。三、综合应用题(本题共1题,每题1.0分,共1分。)3、编写函数fun,它的功能是:求小于形参n同时能被3与7整除的所有自然数之和的平方根,并作为函数值返回。例如,若n为1000时,程序输出应为:s=153.909064。注意:部分源程序在文件PROGl.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include#includedoublefun(intn){}main()/*主函数*/{voidNONO();printf("s=%f\n",fun(1000));NONO();}voidNONO(){/*本函数用于打开文件
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中考英语一轮教材复习 八年级(上) Unit 1-1
- 高端数控机床智能制造产业基地项目可行性研究报告模板-备案拿地
- 医疗卫生机构管理信息系统建设可研报告
- 《编制投标文件》课件
- 《做个好娃娃》课件
- 曲线运动课件
- 《膨胀波与激波》课件
- 居民小区道路级配碎石铺设合同
- 《前置胎盘的护理》课件
- 建筑云计算工程合同范本
- 蔬菜配送投标书
- 手术室火灾应急预案课件
- 国家开放大学一网一平台电大《建筑测量》实验报告1-5题库
- 开放系统24801《人力资源管理》期末机考真题及答案(第103套)
- 校企携手共建产业学院合作协议书(参考范本)
- SSOP:卫生标准操作规程
- 废品回收合伙协议书
- 论语选读-04知其不可而为之教学课件
- T-TPPA 0005-2023 藿香正气方优质产品质量标准
- 城中村改造清产核资审计工作方案
- 智能检测技术与传感器PPT完整全套教学课件
评论
0/150
提交评论