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

下载本文档

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

文档简介

国家二级C++机试(操作题)模拟试卷45(共9套)(共25题)国家二级C++机试(操作题)模拟试卷第1套一、基本操作题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:计算形参x所指数组中N个数的平均值(规定所有数均为正数),作为函数值返回,并将大于平均值的数放在形参y所指数组中,在主函数中输出。例如,有10个正数:46、30、32、40、6、17、45、15、48、26,其平均值为30.500000。主函数中输出:4632404548。请在程序的中括号处填入正确的内容并把中括号删除,使程序得出正确的结果。注意:部分源程序在文件BLANKl.C中。不得增行或删行,也不得更改程序的结构!试题程序:#1nclude#include#defineN10doublefun(doublex[],double*y){inti,j;doubleav;/*********found*********/av=【1】;/*********found*********/for(i=0;iav)y【3】=x[i];y[j]=一1;returnav;}main(){inti;doublex[N],y[N];for(i=0;i=0;i++)printf("%5.1f",y[i]);printf("\n");}标准答案:(1)0.0(2)x[i]/N(3)j++知识点解析:填空1:通过上面的程序可以看出此空考的是给变量赋初值,av代表的是平均值,因此av的初值应该是0.0。填空2:通过for循环可知,此空代表求平均值,因此应该填写x[i]/N。填空3:先把大于平均值的数放在形参y所指数组中,然后使下标值加1,因此此空应该填j++。二、简单应用题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,函数fun的功能是:求出如下分数列的前n项之和。和值通过函数值返回main函数。例如,若n=5,则应输出8.391667。请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件MODI1.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include#include#include/*********found*********/fun(intn){inta,b,c,k;doubles;s=0.0;a=2;b=1;for(k=1;k<=n;k++){/*********found*********/s=s+(Double)a/b;c=a;a=a+b;b=c;}returns;}main(){intn=5;system("CLS");printf("\nThevalueoffunctionis:%lf\n",fun(n));}标准答案:(1)doublefun(intn)(2)s=s+(double)a/b;知识点解析:(1)由于返回值s是double型的,所以函数要定义为double型。(2)C语言规定所有关键字都必须用小写英文字母表示,所以s=s+(I)ouble)a/b;应改为s=s+(double)a/b:。国家二级C++机试(操作题)模拟试卷第2套一、基本操作题(本题共1题,每题1.0分,共1分。)1、下列给定程序中,函数fun的功能是:将形参n所指变量中,各位上为偶数的数去掉,剩余的数按原来从高位到低位的顺序组成一个新数,并通过形参指针n传回所指变量。例如,若输入一个数27638496,则新数为739。请在程序的中括号处填入正确的内容并将中括号删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#includevoidfun(unsignedlong*n){unsignedlongx=0,i;intt;i=1;while(*n)/*********found*********/{t=*n%【1】;/*********found*********/if(t%2!=【2】){x=x+t*i;i=i*10;}*n=*n/10;}/*********found*********/*n=【3】;}main(){unsignedlongn=一1;while(n>99999999||n<0){printf("Pleaseinput(0<n<100000000):");scanf("%1d",&n);)fun(&n);printf("\nThesultis:%ld\n",n);}标准答案:(1)10(2)0(3)x知识点解析:填空1:通过t对10求余,取出该数值的各个位。填空2:通过if条件语句实现奇偶数的判定。如果条件表达式对2求余为0即为偶数,反之则为奇数。填空3:最后将剩余的数赋给n所指向的元素。二、简单应用题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,函数fun的功能是:将十进制正整数m转换成k(2≤k≤9)进制数,并按位输出。例如,若输入8和2,则应输出1000(即十进制数8转换成二进制表示是1000)。请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件MODI1.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include#include/*********found*********/voidfun(intm,intk);{intaa[20],i;for(i=0;m;i++){/*********found*********/aa[i]=m/k;m/=k;}for(;i;i--)/*********found*********/printf("%d",aa[i]);}main(){intb,n;printf("\nPleaseenteranumbetandahase:\n");scanf("%d%d",&n,&b);fun(n,b);printf("\n");}标准答案:(1)voidfun(intm,intk)(2)aa[i]=m%k;(3)printf("%d",aa[i—1]);知识点解析:(1)函数定义的格式错误,不应带有”;”。(2)将十进制正整数转换为任意进制的数与十进制正整数转换成二进制的数的方法是一样的。从整数n泽出它的各位k进制数值,需采用除k取余的方法,即求n除k的余数,得到它的k进制的个位数,接着将n除以k。在n不等于0的状况下循环,能顺序求出n的k进制的各个位上的数。(3)在进行for(i=0;m;i++)循环结束时,i已经多加了一个1,所以这里要减去1。三、综合应用题(本题共1题,每题1.0分,共1分。)3、函数fun的功能是:将s所指字符串中下标为偶数同时ASCII值为奇数的字符删除,s所指串中剩余的字符形成的新串放在t所指的数组中。例如,若s所指字符串中的内容为”ABCDEFGl2345”,其中字符C的ASCII码值为奇数,在数组中的下标为偶数,因此必须删除;而字符1的ASCII码值为奇数,在数组中的下标为奇数,因此不应当删除,其他依此类推。最后t所指的数组中的内容应是”BDF12345”。注意:部分源程序在文件PROG1.C中。请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include#includevoidfun(char*s,chart[]){}main(){chars[100],t[100];voidNONO();printf("knPleaseenterstringS:");scanf("%S",S);fun(s,t);printf("\nTheresultis:%s\n",t);NONO(),}voidNONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/chars[100],t[100];FILE*rf,*wf;inti;rf=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(rf,"%s",s);fun(s,t);fprintf(wf,"%s\n",t);}fclose(rf),fclose(wf);}标准答案:voidfun(char*s,chart[]){inti,j=0;for(i=0,i知识点解析:本题是从一个字符串按要求生成另一个新的字符串。我们使用for循环语句来解决这个问题。在赋值新的字符串之前,先对数组元素的下标和ASCII码的值进行判断,将满足要求的元素赋给新的字符串。国家二级C++机试(操作题)模拟试卷第3套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modi1.cpp,但该程序运行时有错,请改正程序中的错误,使程序输出的结果为:10注意:错误的语句在//******error******的下面,修改该语句即可。#include<iostream.h>structstruct{union{inta;charc[4];};intb;//******error******}voidmain(){Structm://******error******m.c[0]=0;m.c[1]=0;m.c[2]=0;//******error******m.c[3]=1;m.b=m.c[3];cout<<m.a<<endl<<m.b<<endl;}标准答案:(1)};(2)m.c[0]=1;(3)m.c[3]=0;知识点解析:(1)第1表示在结构体定义内,结构体定义的一般形式为:struct<结构体名>{<成员列表>}<变量名列表>;这里定义的结构体并没有变量名列表,但是结构体定义一定是以“;”结束的,因此第1个标识下应改为“}”。(2)根据题目要求程序输出结果分别为“1”和“0”,即结构体变量m的成员变量a的值为1,b的值为0,又a和字符数组c[4]存放在同一段内存单元.中,因此a的值可由数组c[4]决定(两者使用同一地址单元),故c[0]表示a的低8位,c[1]为a的第二个8位,c[2]为a的第三个8位,c[3]为a的最高8位,a=0,所以c[0]=1,c[1]=c[21=c[3]=0,故第2个标识下应改为“m.c[0]=1;”。(3)由(2)分析可知第3个标识下应改为“m.c[3]=0;”。二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。阅读下列函数说明和代码,补充空出的代码。函数convert(char*des,char*str,charc,char*str2)的功能是:如果str中包含字符“!”,则替换成’a’;如果str中包含字符“&”,则替换成’b’;如果str中包含字符“*”,则替换成str2。并用函数返回目标转换后的指针。注意:只能补充函数convert(char*des*char*str,char*str2).#include<iostream.h>#include<cstring>#defineMAXLEN1024voidconvert(char*des,char*Str,char*str2){}voidmain(){chardest[MAXLEN];char*str="!&cefghi*!&";char*str2="jklm";convert(dest,str,str2);cout<<dest<<endl;return;}标准答案:des[0]=0;chartemp[2]={0,0};for(inti=0;str[i]!=NULL;i++){if(str[i]==’!’){temp[0]=’a’;//替换成’a’strcat(des,temp);}elseif(str[i]==’&’){temp[0]=’b’;strcat(des,temp);//替换成’b’}elseif(str[i]==’*’){strcat(des,str2);//替换成str2}else{temp[0]=str[i];strcat(des,temp);//其他情况则添加在后面}}知识点解析:(1)由审题分析可知,利用循环中不断检索str字符串每一个字符,循环变量i从0开始,直到到了str字符结束,即srt[i]==NULL为循环判断结束条件。(2)在循环体内,用ifelse语句判断是不是“!”、“&”或“*”这些特定的字符,如果是这些特定的字符则进行相应的替换,如果不是则将该字符直接加在des后面。(3)字符串的连接可以使用字符串连接函数strcat(),将新字符连接在des后面,即strcat(des.temp)。三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开考生文件夹下的源程序文件modi3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。完成以下功能:(1)定义私有常量PI,请在注释//********1********后添加适当的语句。(2)完成类的私有常量PI的赋值,以及完成对半径radius的赋值。请在注释//********2********后添加适当的语句。(3)完成计算圆面积的函数GetArea()。请在注释//********3********后添加适当的语句。(4)完成计算圆周长的函数GetGinh()。请在注释//********4********后添加适当的语句。注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。#include<iostream.h>#defineCONST_PI3.141592classCCircle{private:doubleradius;//********1********public://********2********CCircle(intradius)(this->radius=radius;}doubleGetArea(){//********3********}doubleGetGirth(){//********4********}voidSetRadius(intm){radius=m;}};intmain(){CCirclecircle(5);cout<<circle.GetArea()<<endl;cout<<circle.GetGirth()<<endl;circle.SetRadius(10);cout<<Circle.GetArea()<<endl;cout<<circle.GetGirth()<<endl;return0;}标准答案:(1)添加语句:constdoublePI;(2)将“CCircle(intradius)”补充完整为:CCircle(intradius):PI(CONSTPI)(3)添加语句:returnradius*radius*PI;(4)添加语句:return2*radius*PI;知识点解析:(1)第1个标识下定义私有常量PI,常数据成员是使用const说明的数据成员,因此第1个标识下应添加“constdoublePI;”。(2)常数据成员的初始化只能通过构造函数的成员初始化列表进行,构造函数CCircle(intradius)应对常数据成员PI进行初始化,第2个标识下应改为“CCircle(intradius):PI(CONST_PI)”。(3)第3个标识下返回圆面积值,圆面积为半径平方与PI的乘积值,即第3标识下应添加“returnradius*radius*PI;”。(4)第4个标识下返回周长,即第4表示下应添加“return2*radius*PI:”。国家二级C++机试(操作题)模拟试卷第4套一、基本操作题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:将形参s所指字符串中的数字字符转换成对应的数值,计算出这些数值的累加和作为函数值返回。例如,形参S所指的字符串为abs5defl26jkm8,程序执行后的输出结果为22。请在程序的中括号处填入正确的内容并把中括号删除,使程序得出正确的结果。注意:部分源程序在文件BLANKl.C中。不得增行或删行,也不得更改程序的结构!试题程序:#include#include#includeintfun(char*s){intsum=0;while(*s){/*********found*********/if(isdigit(*s))sum+=*s—【1】;/*********found*********/【2】;}/*********found*********/return【3】;}main(){chars[81];intn;printf("\nEnterastring:\n\n");gets(s);n=fun(s);printf("\nTheresultis:%d\n\n",n);}标准答案:(1)48或’0’(2)s++(3)sum知识点解析:本题是把字符串中是数字字符转换成对应的数值并进行累加。填空1:’0’字符对应的ASCII码值是48,因此数字字符转换成对应数值时只要减去48,即是该数字字符对应的数值,所以应填48或者’0’。填空2:判断完一个字符之后,将字符串指针移到下一个位置,所以应填s++。填空3:返回累加和sum,所以应填sum。二、简单应用题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.c中,函数fun()的功能是统计S所指一维数组中0的个数(存在变量zero中)和l的个数(存在变量orle中),并输出结果。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#includevoidfun(int*s,intn){/*********found*********/inti,one=0,zero;for(i=0;i标准答案:(1)inti,one=0,zero=0;(2)switch(s[i])(3)case0:zero++;break;知识点解析:(1)变量zero用来统计数字0的个数,应将其初始化为0。(2)语法错误,switch语句后不加分号。(3)当数字为0时,变量zero加1,此时应使用break语句跳出switch语句,进行下一次循环,否则会继续执行case1语句,使程序不能得出正确结果。三、综合应用题(本题共1题,每题1.0分,共1分。)3、编写函数fun,其功能是:将两个两位数的正整数a、b合并成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的个位和百位上,b数的十位和个位数依次放在c数的千位和十位上。例如,当a=45,b=12时,调用该函数后,c=1524。注意:部分源程序给出如下。数据文件IN.DAT中的数据不得修改。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include#includevoidfun(inta,intb,long*c){}main(){inta,b;longc;printf("Inputa,b:");scanf("%d%d",&a,&b);fun(a,b,&C);printf("Theresultis:%1d\n",c);}标准答案:voidfun(inta,intb,long*c){/*b%10获取b的个位,a/10获取a的十位,a%10获取a的个位,b/10获取b的十位*/*c=a/10+(b%10)*10+(a%10)*100+(b/10)*1000;}知识点解析:本题主要的问题是如何取出a和b的个位数和十位数,取出后如何表示成c中相应的位数。由于a和b都是只有两位的整数,所以分别对它们除以10可得到它们的十位数,分别用10对它们求余可得到它们的个位数。得到后对应乘以1000、100、10、1即可得到c的千位数、百位数、十位数和个位数。注意使用c时要进行指针运算。国家二级C++机试(操作题)模拟试卷第5套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modil.cpp,但该程序运行时有错,请改正程序中的错误,使程序输出的结果为:i=5i=10i=15i=20注意:错误的∥********error********语句在的下面,修改该语句即可。#includeclassCMyClass{public:templatevoidfunc(Tx,Ty){∥********error********Ti=0;if(x>=i){i=i+x;}else{i=i+y;}cout<<”i=”<标准答案:(1)staticTi=0;(2)t.func((char)68,(char)1);(3)t.func((int)i,1);知识点解析:(I)在主函数内定义了类CMyClass对象t,第一次调用ftmc0函数传入整型参数5和0,此时T表示整型(int),5>0,此时i和X的和为5,故屏幕输出i的值为i=5;第二次调用func()函数,传入参数为char型数据,此时T表示字符型(char),chari=0,68>0,故i为68,屏幕输出ASCII码为68的字符,即i=D;第三次调用func()函数,传入整型数据10和1,此时T表示整型(int),输出为i=15,显然如果i为一般的局部变量,输出应该是i=10(10>0,i=10+0=10),这里i记忆了第一次调用func0函数后的值0=5,10>5,10+5=15),故i为静态变量,因此第1个标识下应改为“staticTi=0:”。(2)func0函数两个参数类型一致,从输出结果看,第二次调用func0传入的参数均是char型的,故第2个标识下应改为“t.func((char)68,(char)1);”,(char)68和(char)1含义是做强制类型转换,将整型转换成char型。(3)第3个标识下传入参数1为整型,局部变量i为float型,由输出结果可知,第四次调用func0函数也改变了静态变量i(staticinti)的值,故传入的参数均为整型,因第3个标识下的局部变量i(float型)也要强制类型转换,故第3个标识下应改为“t.func((int)i,1);”。二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。请完成函数fun(char*s),该函数完成以下功能:(1)把S中的大写字母转换成小写字母,把其中的小写字母转换成大写字母。并且在函数中调用写函数WriteFile()将结果输出到modi2.txt文件中。例如:s=”helloTEST”,则结果为:s=”HELLOtest”(2)完成函数WriteFile(char*s),把字符串输入文件中。提示:打开文件使用的第二参数为ios_base::binarylios—base::app。注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。#include<10Stream>#include#includeusingnamespacestdvoidWriteFile(char*s){}voidfun(char*S){}voidClearFile(){ofstreamoutl;outl.open(”modi2.txt”)outl.Close()j}intmain(){ClearFile()charS[1024]cout<<”pleaseinputastring:<标准答案:(1)voidWriteFile(char*s)中的命令语句:ofStreamoutl;outl.open(”modi2.txt”,iosbase::binaryIlos—base::app);//打开文件modi2outl<=‘A’&&s[i]<=‘Z’)//2果是大写字符,转换为小写字符{S[i]=s[i]一‘A’+‘a’;//‘s[i]一’A’+’a’等于字符s[i]+32-}Elseif(s[i]>=‘a’&&s[i]<=’z’)//如果是小写字符,转换为大写字符{s[i]=s[i]一’a’+’A’;//’s[i]一’a’+’A’-等于字符s[i]-32}}writeFile(s);知识点解析:(1)本题要求实现两个函数的功能,其中WriteFile(char*s)实现把字符串输入到文件中;fun(char*s)函数实现大写字母转换成小写字母,把其中的小写字母转换成大写字母。其中大小写字母之间的ASCII码差为32。(2)从已给部分源程序的main主函数开始入手,首先实现WriteFile函数,然后再实现fun函数,并在其中调用WriteFile函数。解题思路(1)在WriteFile(char*s)函数中,利用标准流ofstream实现字符串写入文件modi2.txt。(2)在fun函数中,利用for循环逐个判断字符是大写还是小写。(3)如果是大写,那么加上32实现大写转换为小写。否则,就减去32,实现小写到大写的转换。最后调用前面实现的WriteFile函数,将字符串写入文件。三、综合应用题(本题共1题,每题1.0分,共1分。)3、用VC6打开考生文件夹下的源程序文件modi.3.cpp。其中定义的类并不完整,按照要求完成下列操作,将类的定义补充完整。在屏幕和程序modi3.txt文件中输出以下结果:HelloTest出现异常情况其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整:(1)以追加的方式打开文件modi3.txt,请在注释∥********1********后添加适当的语句。(2)定义一个类对象S,请在注释∥********2********后添加适当的语句。注意:仅在函数指定位置添加语句,请勿改动主函数main与其他函数中的任何内容。#include<~ostream.h>#includeusingrlamespacestd;voidWr:i.t:eP~le(char*x){ofstreamout:1;∥********1********out:1.open(“modi3.txt”,);out:1<国家二级C++机试(操作题)模拟试卷第6套一、基本操作题(本题共1题,每题1.0分,共1分。)1、请打开考生文件夹下的解决方案文件proj1,此工程中含有一个源程序文件proj1.cpp。其中位于每个注释“//ERROR****found****”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为:Thisobjectisno.1注意:只修改注释“//ERROR****found****”的下一行语句,不要改动程序中的其他内容。//proj1.cpp#include<iostream>usingnamespacestd;classMyClasS{public:MyClass():count(0){cout<<"Thisobjectis";}//ERROR*******found*******voidInc()const{cout<<"no."<<++count<<endl;}private://ERROR*******found*******intcount=0;};intmain(){NyClass*obj=newNyClass;//ERROR*******found********obj.Inc();return0;}标准答案:(1)voidInc()(2)intcount;(3)obj->Inc();知识点解析:(1)考查考生对const,的掌握,在Inc函数的函数体{cout<<"no."<<++count<<endl;}中,有语句++count,将使私有成员count的值发生改变,因此该函数不能使用const修饰。(2)考查私有成员,在定义类时,私有成员只能声明不能初始化。(3)主要考查考生对类的指针的掌握,指针调用类的成员函数时要使用标识符“->”,而不能使用“.”。二、简单应用题(本题共1题,每题1.0分,共1分。)2、请打开考生文件夹下的解决方案文件proj2,其中有类Point(“点”)、Rectangle(“矩形”)和Circle(“圆”)的定义。在程序所使用的平面坐标系统中,x轴的正方向是水平向右的,Y轴的正方向是竖直向下的。请在横线处填写适当的代码并删除横线,以实现上述类定义。此程序的正确输出结果应该是:--圆形----------圆心=(3,2)半径=1面积=3.14159--外切矩形------左上角=(2,1)右下角=(4,3)面积=4注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。#include<ioStream>#include<cmath>usingnamespacestd;//平面坐标中的点//本题坐标系统中,x轴的正方向水平向右,y轴的正方向竖直向下。classPoint{public:Point(doublex=0.0,doubley=0.0):x_(x),y_(y){}doublegetX()const{returnx;}doublegetY()const{returny;}voidsetX(doublex){x_=x;}voidsetY(doubley){y_=y;)private:doublex_;//x坐标doubley_;//y坐标};classRectanqle(public:Rectangle(Pointp,intW,inth):point(P),width(W),height(h){}doubleaEea()const//矩形面积{returnwidth*height;}PointtopLeft()const//左上角顶点{returnpoint;)PointbottomRight()const//右下角顶点(注:y轴正方向竖直向下){//*******found*******returnPoint(_______);}private:Pointpoint;//左上角顶点doublewidth;//水平边长度doubleheight;//垂直边长度};//圆形classCirole{public:Circle(Pointp,doubler):center(p),radius(r){}RectangleboundingBox()conSt;//外切矩形doublearea()const//圆形面积{//*******found*******returnPI*_______;}public:staticconstdoublePI;//圆周率private:Pointcenter;//圆心doubleradius;//半径};constdoubleCircle::PI=3.14159;RectangleCircle::boundingBOx()const{//*******found*******Pointpt(_______);intw,h;//*******found*******w=h=_______;returnRectangle(pt,w,h);)intmain(){Pointp(3,2);Circlec(p,1);cout<<"--圆形--------\n";cout<<"圆心=("<<P.getX()<<’,’<<p.getY()<<")\n";cout<<"半径="<<1<<endl;cout<<"面积="<<c.area()<<endl<<endl;Rectanglebb=c.boundingBox();Pointt1=bb.topLeft();Pointbr=bb.bottomRight();cout<<"--外切矩形---------\n";cout<<"左上角=("<<t1.getX()<<’,’<<t1.getY()<<")\n";cout<<"右下角=("<<br.getX()<<’,’<<br.getY()<<")\n";cout<<"面积="<<bb.area()<<endl;return0;}标准答案:(1)point.getX()+width,point.getY()+height(2)radius*radius(3)center.getX()-radius,center.getY()-radius(4)2*radius知识点解析:(1)主要考查考生对成员函数的掌握,程序要求返回右下角顶点,该点的x坐标为左上角顶点的x坐标加上width,该点的y坐标为左上角顶点Y坐标加上height,即returnPoint(point.getX()+width,point.getY()+height);。(2)主要考查考生对成员函数的掌握,程序要求计算圆形面积,也就是返回圆面积,即returnPI*radius*radius;。(3)主要考查考生对成员函数的掌握,首先看函数声明:RectangleCircle::boundingBox()const,可知该函数要返回的是一个Rectangle类型,即要返回的是圆的外切矩形。再看Rectangle类的构造函数Rectangle(Pointp,intw,inth),由此可知,空格处要定义的点pt为左上角点,即Pointpt(center.getX()-radius,center.getY()-radius);。(4)由函数声明和Rectangle类的构造函数可知,w和h应该为直径,即w=h=2*radius;。三、综合应用题(本题共1题,每题1.0分,共1分。)3、请打开考生文件夹下的解决方案文件proj3,此工程包含一个源程序文件proj3.cpp,其中定义了用于表示二维向量的类MyVector;程序应当显示(6,8)。但程序中有缺失部分,请按照以下提示,把缺失部分补充完整:(1)在“//**1******found****”的下方是构造函数的定义,它用参数提供的坐标对x和y进行初始化。(2)在“//**2******found****”的下方是减法运算符函数定义中的一条语句。两个二维向量相减生成另一个二维向量:其X坐标等于两向量X坐标之差,其Y坐标等于两向量Y坐标之差。(3)在“//**3******found****”的下方,语句的功能是使变量v3获得新值,它等于向量v1与向量v2之和。注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“****found****”。//proj3.cpp#include<iostream>usingstd::ostream;usingstd::cout;usingstd::endl;classMyVector{//表示二维向量的类doublex;//X坐标值doubley;//Y坐标值public:MyVector(doublei=0.0,doublej=0.0);//构造函数MyVectoroperator+(MyVectorj);//重载运算符+friendMyVectoroperator-(MyVectori,MyVectorj);//童载运算符-friendostream&operator<<(ostream&os,MyVectorv);//重载运算符<<};//**1*********found*******_______(doublei,doublej);x(i),y(j){}MyvectorMyvector::operator+(MyVectorj){returnMyVector(x+j.x,y+j.y);}MyVectoroperator-(MyVectori,MyVectorj){//**2*********found*******returnMyVector(_______);}ostream&operator<<(ostream&os,MyVectorv){os<<’(’<<v.x<<’,’<<v.y<<’)’;//输出向量v的坐标returnos;}intmain(){MyVectorv1(2,3),v2(4,5),v3;//**3*********found*******v3=_______;cout<<v3<<endl;return0;}标准答案:(1)MyVector::MyVector(2)i.x-j.x,i.y-j.y(3)v1+v2知识点解析:(1)主要考查的是构造函数,在类外定义构造函数时要使用类名和作用域,即MyVector::MyVector。(2)主要考查重载运算符“-”的返回语句,返回值应为向量i和j的差,即MyVector(i.xj.x,i.y-j.y);。(3)主要考查重载运算符“+”的使用,由题目可知v3是v1和v2的和,前面我们已经重新定义了运算符“+”,所以在这里直接使用语句v3=v1+v2;即可。国家二级C++机试(操作题)模拟试卷第7套一、基本操作题(本题共1题,每题1.0分,共1分。)1、请使用VC6或使用【答题】菜单打开考生文件夹pmjl下的工程pmjl,该工程中包含程序文件main.cpp,其中有类Foo和主函数main的定义。程序中位于每个“//ERROR木****found****”之后的一行语句有错误,请加以改正。改正后程序的输出结果应该是:X=aY=42注意:只修改每个“//ERROR*********found**********”下的那一行,不要改动程序中的其他内容。#includeusingnamespacestd;classFoo{public:Foo(charx){x=x;)chargetX()consL{returnx一;)public:stat;iCintV;private:charx;};//ERROR**********found**********intFoo.Y一=42;intmain(intargo,char*argv[]){//ERROR**********found***********Foof;//ERROR**********found***********couL<<“X=”<标准答案:(1)intFoo::y一=42;(2)F00f(‘a’);(3)cout<<“X=”<知识点解析:本题考查的是Foo类,其中涉及构造函数、const函数和静态成员。给类的静态成员赋值时要加上类名和作用域符号,与类的成员函数一样,类的私有成员不能被类外函数调用。【解题思路】(1)主要考查考生对静态成员的掌握,因为静态整型变量y一是Foo类的公有成员,所以给y一赋值时要加上“Foo::”,即intFoo::y一=42;。(2)主要考查考生对构造函数的掌握,题目要求程序输出:X=aY=42可以知道,在给Foo类的f声明时要同时初始化为字符a,即语句Foof(‘a’);。(3)主要考查考生对成员函数的掌握,因为x是类Foo的私有成员,所以不能在main函数中直接调用,要通过公有成员函数getX()调用。【解题宝典】类的静态成员和类的成员函数一样,赋值时要加上类名和作用域符号,要注意通过观察题目对程序输出结果的要求,来给类赋初始值。二、简单应用题(本题共1题,每题1.0分,共1分。)2、请使用VCAi或使用【答题】菜单打开考生文件夹proj2下的工程proj2。其中有类Point(“点”)、lleetangle(“矩形”)和Circle(“圆”)的定义。在程序所使用的平面坐标系统中,x轴的正方向是水平向右的,y轴的正方向是竖直向下的。请在横线处填写适当的代码并删除横线,以实现上述类定义。此程序的正确输出结果应该是:一一圆形…………圆心=(3,2)半径=1面积=3.14159一一外切矩形一一左上角=(2,1)右下角=(4,3)面积=4注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“//**********found**********”。#include#includeusingrlal’tlespacest:d;//平面坐标中的点//本题坐标系统中,x轴的正方向水平向右,y轴的正方向竖直向下。ClaSsPoint:{public:Point:(doublex=0.0,doubley=0.0):X一(x),y一(y){}doublegetX()const{returnxj}doublegeY()const{returny一;)voidset;X(doubleX){x=x;)voidsetY(doubley){y一。y;)private:doublex;//x坐标doubley;//y坐标};//矩形classRectangle{public:Rectangle(PointP,intW,inth):point(p),width(w),height(h){}dopblearea()const.//矩形面积{returnwidth*height;}PointtopLeft()const//左上角顶点{returnpoint;}PointbottomRight()const//右下角颂点(注:y轴正方向竖直向下),{//**********found**********returnPoint(_________);}private:Pointpoint;//左上角顶点doublewidth;//水平边长度doubleheight;//垂直边长度};//圆形classCircle{public:Circle(PointP,doubler):center(p),radius(r){}RectangleboundingB0x()const,//外切矩形doublearea()const//圆形面积{//**********found***********returnPI*__________;}public:staticconstdoublePI;//圆周率private:Pointcenter;//圆心doubleradius;//半径};constdoubleCircle::PI=3.14159;RectangleCircle::boundingBox()const{//**********found***********Pointpt(_________);intW,h;//**********found**********W=h=__________;returnRectangle(pt,W,h);}}intmain(){PointP(3,2);CircleC(p,1);cout<<“--圆形一一\n”;cout<<--圆心=(“<标准答案:(1)l~oint.getX()+width,point.getY()+height(2)radius*:radius(3一)center.getX()一radius,center.getY。()一radius(4)2*radius知识点解析:本题考查Point类、Rectangle类和Circle类,其中涉及构造函数、const函数和静态成员。【解题思路】(1)主要考查考生对成员函数的掌握,程序要求返回右下角顶点,该点的x坐标为左上角顶点的x坐标加上width,该点的y坐标为左上角顶点y坐标加上height,即retumPoint(point.getX()+width,point.getY()+height);。(2)主要考查考生对成员函数的掌握,程序要求计算圆形面积,也就是返回圆面积,即returnP1*radius*radius;。(3)主要考查考生对成员函数的掌握,首先看函数声明:RectangleCircle::boundingBox()const,可知该函数要返回的是一个Rectangle类型,即要返回的是圆的外切矩形。再看Rectangle类的构造函数Rectangle(Pointp,intw,inth),由此可知,空格处要定义的点pt为左上角点,即Pointpt(cen-ter.getX()一radius,center.getY()一radius);。(4)由函数声明和Rectangle类的构造函数可知,w和h应该为直径,即w=h=2*radius;。三、综合应用题(本题共1题,每题1.0分,共1分。)3、请使用VC6或使用【答题】菜单打开考生文件夹pmj3下的工程proj3,其中定义了MyString类,一个用于表示字符串的类。成员函数reverse的功能是将字符串进行“反转”。例如,将字符串ABCDEF“反转”后,得到字符串FEDCBA;将字符串ABCDEFG“反转”后,得到字符串GFEDCBA。请编写成员函数reverse。在main函数中给出了一组测试数据,此时程序运行中应显示:读取输入文件…一反转前一STR1=ABCDEFSTR2=ABCDEFG一反转后一STRl=FEDCBASTR2=GFEDCBA要求:补充编制的内容写在“//**********333**********”与“//**********666**********”之间,不得修改程序的其他部分。注意:程序最后将结果输出到文件out.dat中,输出函数WriteToFile已经编译为obj文件,并且在本程序中调用。//mgsering.h#include#includeusingnamespacestd;classMyStrincj{public:MyString(constchar*S){sir=newchar[strlen(S)+1];strcpy(str,s);}一NyString(){clelete,[]st:r;}voidEeveEse();friendostream&operator<<(ostream&os,constNyStr~ng&mystr){OS<voidNyString::Eeverse(){//**********333**********//**********666**********}intmain(){charinname[128],pathname[80];strcpy(pathname,“”);sprintf(inname,“in.dat”,pathname);cout<<"读取输入文件…\n\n”;ifstreaminfile(inname);if(infile.fail()){ceEr<<“打开输入文件失败!”;exit(1);}charbur[4096];infile.getline(buf,4096);NyStringstrl(“ABCDEF”),str2(“ABCDEFG”),str3(bur);cout<<“________反转前…\n”;tout<<“STR1=”<标准答案:Int⊥ength=str⊥en(str);//把字符串str的长度赋值给lenthfor(inti=0,j=length一1;i知识点解析:主要考查MyString类,其中涉及动态数组、构造函数、析构函数、成员函数和友元函数。本题要把动态数组中的字符串反转过来,用两个变量i和j来代表要调换的元素的下标,再通过中间变量temp进行交换即可。【解题思路】主要考查考生对动态数组的掌握,先看题目要求:成员函数reverse的功能是将字符串进行“反转”。再由类的定义可知,字符串存放在动态数组str中,由strlen函数得出字符串的长度,最后一个字符的下标为length一1,第一个字符的下标为0,将这两个字符交换,然后j依次减1同时i依次加1,继续交换,直到i大于j时停止循环即可。国家二级C++机试(操作题)模拟试卷第8套一、基本操作题(本题共1题,每题1.0分,共1分。)1、请使用VC6或使用【答题】菜单打开考生文件夹proj1下的工程proj1,其中在编辑窗口内显示的主程序文件中定义有类AAA和主函数main。程序文本中位于每行“//ERROR****found****”下面的一行有错误,请加以改正。改正后程序的输出结果应该是:****found****”下面的一行有错误,请加以改正。改正后程序的输出结果应该是:sum=60注意:只修改每个“//ERROR****found****”下面的一行,不要改动程序中的其他任何内容。#include<iostream>usingnamespacestd;classAAA{inta[10];intn;//ERROR*******found*******private:AAA(intaa[],intnn):n(nn){//ERROR*******found*******for(inti=0,i<n,i++)aa[i]=a[i];}intGeta(inti){returna[i];}};intmain(){inta[6]={2,5,8,10,15,20};AAAx(a,6};intsum=0;//ERROR*******found*******for(inti=0;i<6;i++)sum+=x.a[i];cout<<"sum="<<sum<<end1;return0;}标准答案:(1)public:(2)for(inti=0;i<n;i++)a[i]=aa[i];(3)for(inti=0;i<6;i++)sum+=x.Geta(i);知识点解析:暂无解析二、简单应用题(本题共1题,每题1.0分,共1分。)2、请使用VC6或使用【答题】菜单打开考生文件夹proj2下的工程proj2,该工程中含有一个源程序文件proj2.cpp。其中定义了类Set和用于测试该类的主函数main。类Set是一个用于描述字符集合的类,在该字符集合中,元素不能重复(将“a”和“A”视为不同元素),元素最大个数为100。为该类实现一个构造函数Set(char*s),它用一个字符串来构造一个集合对象,当字符串中出现重复字符时,只放入一个字符。此外,还要为该类实现另一个成员函数InSet(charc),用于测试一个字符c是否在一个集合中,若在,则返回true;否则返回false。构造函数Set和成员函数InSet的部分实现代码已在文件proj2.cpp中给出,请在标有注释“//TODO:”的行中添加适当的代码,将这两个函数补充完整,以实现其功能。提示:在实现构造函数时,可以调用InSet函数来判断一个字符是否已经在集合中。注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”//proj2.cpp#include<iostram>usingnamespacestd;constintMAXNUM=100;classset{private:intnum;//元素个数charsetdata[NAXNUN];//字符数组,用于存储集合元素public:Set(char*s);//构造函数,用字符串s构造一个集合对象boolInSet(charc);//判断一个字符c是否在集合中,若在,返回true,否则返回falsevoidPrint()const;//输出集合中所有元素},Set∷Set(char*s){num=0;while(*s){//**********found**********if(_______)//TODO:添加代码,测试元素在集合中不存在//**********found**********_______;//TODO:添加一条语句,加入元素至集合中s++;}}boolSet∷InSet(charc){for(inti=0;i<num;i++)//*********found*********if(_______)//TODO:添加代码,测试元素C是否与集合中某元素相同//**********found**********_______;//TODO:添加一条语句,进行相应处理returnfalse;}voidSet∷Print()const{cout<<"Setelements:"<<end1;for(inti=0;i<num;i++)cout<<setdata[i]<<";cout<<end1;}intmain(){chars[MAXNUM];cin.getline(s,MAXNUM-1);//从标准输入中读入一行Setsetobj(s);//构造对象setobjsetobj.Print();//显示对象setobj中内容return0;}标准答案:(1)!InSet(*s)(2)setdata[num++]=*s(3)e==setdata[i](4)returntrue知识点解析:(1)主要考查考生对成员函数的掌握,题目要求:添加代码,测试元素在集合中不存在,由类的定义可知函数boolInSet(charC)可以测试字符c是否在集合中,因此这里直接调用函数boolInSet(charc)即可。(2)题目要求:添加一条语句,加入元素至集合中,集合用数组setdata表示,直接把元素添加到数组中即可。(3)主要考查考生对if语句的掌握,题目要求:测试元素c是否与集合中某元素相同。前一条语句是个for循环,利用下标i遍历整个集合,通过if语句中的判断条件判断c是否在集合中,用“==”判断。(4)主要考查考生对成员函数的掌握,先看函数的注释:判断一个字符C是否在集合中,若在,返回true,否则返回false。if语句成立时,说明字符c存在于集合中,因此应该返回true。三、综合应用题(本题共1题,每题1.0分,共1分。)3、请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程proj3,其中声明了MiniComplex是一个用于表示复数的类。请编写这个operator+运算符函数,以实现复数的求和运算。两个复数的和是指这样一个复数:其实部等于两个复数的实部之和,其虚部等于两个复数的虚部之和。例如,(23+34i)+(56+35i)等于(79+69i)。要求:补充编制的内容写在“//********333********”与“//********666********”之间,不得修改程序的其他部分。注意:程序最后将结果输出到文件out.dat中。输出函数writeToFile已经编译为obj文件,并且在本程序中调用。//Minicomplex.h#include<iostream>usingnamespacestd;classMiniComplex//复数类{public://重载流插入和提取运算符friendostream&operator<<(ostream&osObject,constMiniComplex&complex){osObject<<"("<<complex.realPart<<"+"<<complex.imagPart<<"i"<<")";returnosObject;}friendistream&operator>>(istream&isObject,MiniComplex&complex){charch;isObject>>complex.realPart>>ch>>complex.imagPart>>ch;returnisObject;}MiniComplex(doublereal=0,doubleimag=0);//构造函数MiniComplexoperator+(constMiniComplex&otherComplex)const;//重载运算符+private:doublerealPart;//存储实部变量doubleimagPart;//存储虚部变量};voidwriteToFile(char*);//main.cpp#include"MiniComplex.h"MiniComplex∷MiniComplex(doublereal,doubleimag){realPart=real;imagPart=imag;}MiniComplexMiniComplex∷operator+(constMiniComplex&otherComplex)const}//********333********//********666********}intmain(){voidwriteToFile(char*);MiniComplexnuml(23,34),num2(56,35);cout<<"InitialValueofNuml="<<num1<<"\nInitialValueofNum2="<<num2<<end1;cout<<num1<<"+"<<num2<<"="<<num1+num2<<end1;//使用重栽的加号运算符writeToFile("");return0;}标准答案:MiniComplexsum;//定义复数对象sumsum.imagPart=this->imagPart+otherComplex.imagPart;//把this中的虚部(this->imagPart)和othercomplex虚部相加赋值给Sum虚部sum.realPart=this->realPart+otherComplex.realPart;//把this中的实部(this->reapart)加上othercomplex实部赋值给Sum实部returnsum;//返回对象Sum知识点解析:主要考查考生对运算符重载的掌握,题目要求编写operater+运算符函数,以实现复数的求和与运算。复数的和的实部等于两个复数的实部之和,虚部等于两个复数的虚部之和。函数要返回的类型是MiniComplex,因此要先定义一个MiniComplex类型变量sum,然后对它们的实部和虚部各自求和,返回sum即可。国家二级C++机试(操作题)模拟试卷第9套一、基本操作题(本题共1题,每题1.0分,共1分。)1、请打开考生文件夹下的解决方案文件proj1,其中有线段类Line的定义。程序中位于每个“//ERROR****found****”之后的一行语句有错误,请加以改正。改正后程序的输出结果应该是:Endpoint1=(1,8),Endpoint2=(5,2),length=7.2111。注意:只修改每个“//ERROR****found****”下的那一行,不要改动程序中的其他内容。#include<iostream>#include<cmath>usingnamespacestd;classLine;doublelength(Line);classLine(//线段类doub2ex1,y1;//线段端点1doublex2,y2;//线段端点2public://ERROR*******found*******Line(doublex1,doubley1,doublex2,doubley2)const{this->x1=x1;this->y1=y1;this->x2=x2;this->y2=y2:}doublegetX1()const{returnx1;}doublegetY1()const{returny1;}doublegetX2()const{returnx2;}doublegetY2()const{returny2;}VOidshow()const{cout<<"Endpoint1=("<<x1<<","<<y1;cout<<"),Endpoint2=("<<x2<<","<<y2;//ERROR*******found*******cout<<"),length="<<length(this)<<"。"<<endl;}};doublelength(Line1){//ERROR*******found*******returnsqrt((1.x1-1.x2)*(1.x1-1.x2)+(1.y1-1.y2)*(1.y1-1.y2));}intmain(){Liner1(1.0,8.0,5.0,2.0);r1.show();return0;}标准答案:(1)Line(doublex1,doubley1,doublex2,doubley2){(2)cout<<"),length="<<length(*this)<<"。"<<endl;(3)returnsqrt((1.getX1()-1.getX2())*(1.getX1()-1.getX2())+(1.getY1()-1.getY2())*(1.getY1()-1.getY2()));知识点解析:(1)主要考查考生对构造函数的掌握,构造函数要给私有成员赋初始值,因此不能使用const来限制。(2)主要考查考生对this指针的掌握,由函数length的声明doublelength(Line);可知,length函数的形参是Line类,在voidshow()const函数里,this指针指向的是当前Line类,因此可以用*this表示当前Line类。(3)主要考查考生对成员函数的掌握,length函数是类外函数,不能直接调用类的私有成员,因此要通过成员函数取得对应的值。二、简单应用题(本题共1题,每题1.0分,共1分。)2、请打开考生文件夹下的解决方案文件proj2,该工程中包含一个程序文件main.cpp,其中有类AutoMobile(“汽车”)及其派生类Car(“小轿车”)、Truck(“卡车”)的定义,还有主函数main的定义。请在横线处填

温馨提示

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

评论

0/150

提交评论