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

下载本文档

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

文档简介

国家二级C++机试(操作题)模拟试卷14(共9套)(共27题)国家二级C++机试(操作题)模拟试卷第1套一、基本操作题(本题共1题,每题1.0分,共1分。)1、请打开考生文件夹下的解决方案文件proj1,此工程中包含程序文件main.cpp,其中有ElectricFan(“电风扇”)类和主函数main的定义。程序中位于每个“//ERROR****found****”之后的一行语句有错误,请加以改正。改正后程序的输出结果应为:品牌:清风牌,电源:关,风速:0品牌:清风牌,电源:开,风速:3品牌:清风牌,电源:关,风速:0注意:只修改每个“//ERROR****found****”下的那一行,不要改动程序中的其他内容。#include<iostream>usingnamespacestd;classElectricFan{//“电扇”类Char*brand;intintensity;//风速:0一关机,1一弱,2一中,3一强public:ElectricFan(constchar*the_brand):intensity(0){brand=newchar[strlen(the_brand)+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<<"品牌:"<<theBrand()<<"牌"<<",电源:"<<(isOn()?"开":"关")<<",风速:"<<theIntensity()<<endl;}};intmain(){ElectricFanfan("清风");fan.show();fan.setIntensity(3);fan.show();fan.turnOff();fan.show();return0;}标准答案:(1)const.char*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、请打开考生文件夹下的解决方案文件proi2,此工程包含有一个源程序文件proj2.cpp,其中定义了Stack类和ArrayStack类。Stack是一个用于表示数据结构“栈”的类,栈中的元素是字符型数据。Stack为抽象类,它只定义了栈的用户接口,如下所示:公有成员函数功能push入栈:在栈顶位置添加一个元素pop退栈:取出并返回栈顶元素ArrayStack是Stack的派生类,它实现了Stack定义的接口。ArrayStack内部使用动态分配的字符数组作为栈元素的存储空间。数据成员maxSize表示的是栈的最大容量,top用于记录栈顶的位置。成员函数push和pop分别实现具体的入栈和退栈操作。请在程序中的横线处填写适当的代码,然后删除横线,以实现上述功能。此程序的正确输出结果应为:a,b,cc,b,a注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。//proj2.cpp#include<iostream>usingnamespacestd;classStack{public:virtualvoidpush(charc)=0;virtualcharpop()=0;};classArrayStack:publicStack{char*p;intmaxSize;inttop;public:ArrayStack(ints){top=0;maxSize=s;//********found********p=__________;}~ArrayStack(){//********found********______;}voidpush(charc){if(top==maxSize){cerr<<"Overflow!\n";return;}//********found********___________;top++;}charpop(){if(top==0){cerr<<"Underflow!\n";return’\0’;}top--;//********found********___________;}};voidf(Stack&sRef){charch[]={’a’,’b’,’c’};cout<<ch[0]<<","<<ch[1]<<","<<ch[2]<<endl;sRef.push(ch[0]);sRef.push(ch[1]);sRef.push(ch[2]);cout<<sRef.pop()<<",";cout<<sRef.pop()<<",";cout<<sRef.pop()<<endl;}intmain(){ArrayStackas(10);f(as);return0;}标准答案:(1)newchar[s](2)delete[]p(3)p[top]=c(4)retump[top]知识点解析:(1)主要考查的是ArrayStack类的构造函数,在函数中要为p申请s个char型空间,应使用语句p=newchar[s];。(2)主要考查析构函数,使用delete语句释放指针,即delete[]p;。(3)主要考查push函数,top表示栈顶元素下标,添加的数据放到栈顶,因此使用语句p[top]=c;。(4)主要考查pop函数,输出栈顶数据,top表示栈顶元素下标,因此使用语句returnp[top];。三、综合应用题(本题共1题,每题1.0分,共1分。)3、请打开考生文件夹下的解决方案文件proj3,其中声明了ValArray类,该类在内部维护一个动态分配的整型数组。ValArray类的复制构造函数应实现对象的深层复制。请编写ValArray类的复制构造函数。在main函数中给出了一组测试数据,此种情况下程序的输出应该是:ValArrayvl={1,2,3,4,5}ValArrayv2={2,2,2,2,2}要求:补充编制的内容写在“//*******333*******”与“//********666********”之间。不要修改程序的其他部分。注意:相关文件包括:main.cpp、ValArray.h。程序最后调用writeToFile函数,使用另一组不同的测试数据,将不同的运行结果输出到文件out.dat中。输出函数writeToFile已经编译为obj文件。//ValArray.h#include<iostream>usingnamespacestd;classValArray{int*v;intsize;public:ValArray(constint*p,intn):size(n){v=newint[size];for(inti=0;i<size;i++)v[i]=P[i];}ValArray(constValArray&other);~ValArray(){delete[]v;}voidsetElement(inti,intval){v[i]=val;}voidprint(ostream&out)const{out<<’{’;for(inti=0;i<size-1;i++)out<<v[i]<<",";out<<v[size-1]<<’)’;}};voidwriteToFile(constchar*);//main.cpp#include"ValArray.h"ValArray::ValArray(constValArray&other){//********333********//********666********}intmain(){constinta[]={1,2,3,4,5};ValArrayv1(a,5);ValArrayv2(v1);for(inti=0;i<5;i++)v2.setElement(i,2);cout<<"ValArrayv1=";v1.print(cout);cout<<endl;cout<<"ValArrayv2=";v2.print(cout);cout<<endl;writeToFile("");return0;}标准答案:size=other.size;//把对象数组的大小赋值给sizev=newint[other.size];//根据对象数组的大小动态分配数组Vfor(inti=0;i<size;++i)v[i]=other.v[i];//遍历整爪对霖的数组把值other.v[i]放到数组V中知识点解析:主要考查考生对复制构造函数的掌握。由函数名:ValArray::ValArray(constValArray&other),知道要复制的对象是other,对由ValArray类的成员:int*v;intsize;知道要复制的内容是动态数组v及整型变量size。动态数组要使用new语句分配内存,最后利用for循环语句来完成复制过程。国家二级C++机试(操作题)模拟试卷第2套一、基本操作题(本题共1题,每题1.0分,共1分。)1、请打开考生文件夹下的解决方案文件proj1,此工程中含有一个源程序文件proj1.cpp。其中每个注释"//ERROR****found****"之后的一行语句存在错误。请改正这些错误,使程序的输出结果为:Theperimeteris62.8Theareais314注意:只修改注释"//ERROR****found****"的下一行语句,不要改动程序中的其他内容。//proj1.cpp#include<iostream>usingnamespacestd;constdoublePI=3.14;classCircle{public://ERROR**********found**********Circle(intr){radius=r;}voidDisplay();private:constintradius;};//ERROR**********found**********voidDisplay(){cout<<"Theperimeteris"<<2*PI*radius<<endl;cout<<"Theareais"<<PI*radius*radius<<endl;}intmain(){Circlec(10);//ERROR**********found**********c::Display();return0;}标准答案:(1)Circle(intr):radius(r){}(2)voidCircle::Display()(3)c.Display);知识点解析:(1)主要考查考生对构造函数的掌握,常变量私有成员只能通过成员列表进行初始化。(2)主要考查考生对成员函数的掌握,在定义类的成员函数时要加上类名和作用域符。(3)主要考查考生对成员函数调用的掌握,调用成员函数时应使用标识符’.’。二、简单应用题(本题共1题,每题1.0分,共1分。)2、请打开考生文件夹下的解决方案文件proj2,此工程中含有一个源程序文件proj2.cpp,其中定义了Sort类和InsertSort类。Sort是一个表示排序算法的抽象类,成员函数mySort为各种排序算法定义了统一的接口,成员函数swap实现了两个整数的交换操作。InsertSort是Sort的派生类,它重新定义了基类中的成员函数mySort,具体实现了简单插入排序法。本程序的正确输出结果应为:Beforesortinga[]=5,1,7,3,1,6,9,4,2,8,6,Aftersortinga[]=1.1.2.3.4.5.6.6.7.8.9,请首先阅读程序,分析输出结果,然后根据以下要求在横线处填写适当的代码并删除横线,以实现上述功能。(1)将Sort类的成员函数swap补充完整,实现两个整数的交换操作;(2)将InsertSort类的构造函数补充完整;(3)将InsertSort类的成员函数mySort补充完整,实现简单插入排序法(在交换数据时,请使用基类的成员函数swap)。注意:只在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动"//****found****"。//proj2.cpp#include<iostream>usingnamespacestd;classSort{public:Sort(int*a0,intn0):a(a0),n(n0){}virtualvoidmySort()=0;staticvoidswap(int&x,int&y){inttmp=x;//**********found**********__________;y=tmp;}protected:int*a;intn;};classInsertSort:publicSort{public:InsertSort(int*a0,intn0)//**********found**********:__________{}virtualvoidmySort(){for(inti=1;i<n;++i)for(intj=i;j>0;--j)if(a[j]<a[j-1])//**********found**********__________;else//**********found**********__________;}};voidfun(Sort&s){s.mySort();}voidprint(int*a,intn){for(inti=0;i<n;++i)cout<<a[i]<<",";cout<<endl;}intmain(intargc,char*argv[]){inta[]={5,1,7,3,1,6,9,4,2,8,6};cout<<"Beforesortinga[]=\n";print(a,11);InsertSortbs(a,11);fun(bs);cout<<"Aftersortinga[]=\n";print(a,11);return0;}标准答案:(1)x=y(2)Sort(a0,n0)(3)swap(a[j],a[j-1])(4)break知识点解析:(1)主要考查考生对成员函数的掌握,题目要求将Sort类的成员函数swap补充完整,实现两个整数的交换操作,因此这里是一个交换操作,程序利用中间值tmp交换x和y的值。(2)主要考查考生对构造函数的掌握,派生类的构造函数使用成员列表初始化基类。(3)主要考查考生对成员函数调用的掌握,题目提示:在交换数据时,请使用基类的成员函数swap。因此这里可以直接调用swap函数交换a[j]和a[j-1]的值。(4)主要考查考生对成员函数的掌握,当条件a[j]<a[j-1]不满足时,说明顺序没问题不需要交换,使用break语句跳出本次循环。三、综合应用题(本题共1题,每题1.0分,共1分。)3、请打开考生文件夹下的解决方案文件proj3。本题创建一个小型字符串类,字符串长度不超过100。程序文件包括proj3.h、proj3.cpp、writeToFile.obj。补充完成proj3.h,重载复合赋值运算符+=。要求:补充编制的内容写在//**********333**********与//**********666**********之间,不得修改程序的基他部分。注意:程序最后将结果输出到文件out.dat中。//proj3.h#include<iostream>#include<iomanip>usingnamespacestd;classMiniString{public:friendostream&operator<<(ostream&output,constMiniString&s)//重载流插入运算符{output<<s.sPtr;returnoutput;}friendistream&operator>>(istream&input,MiniString&s)//重载流提取运算符{chartemp[100];//用于输入的临时数组temp[0]=’\0’;input>>setw(100)>>temp;intinLen=strlen(temp);//输入字符串长度if(inLen!=0){s.length=inLen;//赋长度if(s.sPtr!=0)delete[]s.sPtr;//避免内存泄漏s.sPtr=newchar[s.length+1];strcpy(s.sPtr,temp);//如果s不是空指针,则拷贝内容}elses.sPtr[0]=’\0’;//如果s是空指针,则为空字符串returninput;}MiniString(constchar*s=""):length((s!=0)?strlen(s):0){setString(s);}~MiniString(){delete[]sPtr;}//析构函数//*************333***********//+=运算符重载MiniString&operator+=(constMiniString&s){}//*************666***********private:intlength;//字符串长度char*sPtr;//指向字符串起始位置voidsetString(constchar*string2)//辅助函数{sPtr=newchar[length+1];//分配内存if(string2!=0)strcpy(sPtr,string2);//如果string2不是空指针,则拷贝内容elsesPtr[0]=’\0’;//如果string2是空指针,则为空字符串}};//proj3.cpp#include<iostream>#include<iomanip>#include<fstream>usingnamespacestd;#include"proj3.h"intmain(){MiniStringstr1("World"),str2("Hello");str2+=str1;//使用重载的+=运算符cout<<str2<<"\n";writeToFile("");return0;}标准答案:MiniString&operator+=(constMiniString&s){char*pt=newchar[length+1];strcpy(pt,sPtr);intblength=length;length+=s.length;delete[]sPtr;sPtr=newchar[length+1];strcpy(sPtr,pt);delete[]pt;for(inti=0;i<s.length;++i)sPtr[blength+i]=s.sPtr[i];sPtr[length]=’\0’;//添加字符串结束符return*this;}知识点解析:主要考查考生对运算符重载的掌握,因为有动态数组,所以要使用new语句来重新分配空间。国家二级C++机试(操作题)模拟试卷第3套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modi1.cpp,该程序运行时有错,请改正其中的错误,使程序正确运行,并且使程序输出的结果为:CMyObject,intheconstmtor~CMyObject,inthedestrutor注意:错误的语句在//******error******的下面,修改该语句即可。1#include<iostream.h>2classCMyObject3{4//******error******56//******error******7CMyObject{cout<<’’CMyObject,intheconstrutor’’<<end1;}8~CMyObject(){cout<<’’~CMyObject,inthedestrutor’’<<end1;}9};10voidmain()11{12CMyObjectobj1;13}标准答案:(1)添加语句:public:(2)CMyObject(){cout<<’’CMyObject,intheconstrutor”<<end1;}知识点解析:程序中定义了类CMyObject,含有一个构造函数和一个析构函数,在构造函数和析构函数中分别输出一段字符。(1)构造函数和析构函数均为公有函数,而在C++中默认的访问属性为私有(private),因此构造函数和析构函数必须说明为public,即第1个标识下应添加“public:”。(2)函数定义中在函数名后均有一对括号表示函数声明,因此第2个标识下应改为“CMyObjectO{cout<<’’CMyObject,intheconstrutor’’<<endl;}”。二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。阅读下列函数说明和代码,完成空出部分程序,使输入某年某月某日,可判断这一天是这一年的第几天。程序分析:以3月5日为例,应该先把前两个月的天数加起来,然后再加上5天即本年的第几天(特殊情况:闰年输入月份大于3时需考虑多加一天)。注意:只能补充函数func(intyear,intmonth,intday),请勿改动其他部分的内容。1#include<iostream.h>2intfunc(intyear,intmonth,intday)3{45}6voidmain()7{8cout<<func(2007,2,1)<<end1;9cout<<func(2007,i0,i0)<<end1;10cout<<func(2008,8,12)<<end1;11return;12}标准答案:1intsum;2intleapyear;3switch(month)/*先计算某月以前月份的总天数*/4{5case1:6sum=0;7break;8case2:9sum=31;10break;11case3:12sum=59;13break;14case4:15sum=90;16break;17case5:18sum=120;19break;20case6:21sum=151;22break;23case7:24sum=181;25break;26case8:27sum=212;28break;29case9:30sum=243;31break;32case10:33sum=273;34break;35case11:36sum=304;37break;38case12:39sum=334;40break;41default:42cout<<’’dataerror’’<<end1;43break;44}45sum=sum+day;46if(year%400==0||(year%4==0&&year%100!=0))/*判断是不是闰年*/47leapyear=1;48else49leapyear=0;50if(1eapyear==1&&month>2)51sum++;52returnsum;知识点解析:函数函数func(intyear,intmonm,intday返回某一天属于这一年的第几天,可以把该月之前的所有天数加起来再加上本月的第几天得到返回值,一种特殊情况需要注意,闰年时2月会多一天,这个时候可以先判断是否是闰年,如果是再看是不是二月以后,如果是则加在前面结果的基础上在加一天。(1)为方便起见,先统计正常年份下,每个月的前面有多少天,可以用switch方式查询,然后再加上本月的日子,很快便得到了这一天是属于这一年的第几天。(2)闰年的判断方法为:if(year%400==0||(year%4==0&&year%100!=0)),if语句为真则为闰年,二月之后的日期后需要加一天。三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开考生文件夹下的源程序文件modi3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。完成以下功能:(1)完成类MyArrayClass的构造函数,申请数组的大小,请在注释//********1********后添加适当的语句。(2)完成类MyArrayClass的析构函数,释放数组,请在注释//********2********后添加适当的语句。(3)完成重载运算符“[]”,用来获得指定下标的数据,请在注释//********3********后添加适当的语句。(4)完成函数SetElement(),用来设置指定下标的数据。如果数据没有超出范围,则设置数据,并返回1,否则返回0,请在注释//********4********后添加适当的语句。注意:除在指定的位置添加语句外,并不要更改程序中的其他语句。1#include<iostream.h>2template<classT>3classMyArrayClass4{5private:6T*data;7intlength;8public:9MyArrayClass(intlen)10{11length=len;12//********1********1314}15~MyArrayClass()16{17//********2********1819}20T&operator[](inti)21{22//********3********2324}25boolSetElement(inti,Tt)26{27//********4********28if()29{30data[i]=t;31returntrue;32}33returnfalse;34}35};36intmain()37{38MyArrayClass<int>obj(5);39obj[3]=1;40cout<<obj.SetElement(5,2)<<end1;41cout<<obj.SetElement(4,2)<<end1;42return0;43}标准答案:(1)添加语句:data=newT[len];(2)添加语句:delete[]data;(3)添加语句:returndata[i];(4)将“if()”补充完整为:if(i<length)知识点解析:程序中定义了类模板MyArrayClass,含有成员变量length和data指针,构造函数、析构函数、重载运算符“[]”和SetElement()函数。构造函数中申请内存空间给data指针,析构函数中释放内存资源,重载运算符“[]”用来获得指定下标的数据,SetElement()用来设置指定下标的数据。(1)构造函数完成成员变量的初始化,在MyArrayClass(intlen)函数中申请数组的大小的内存空间,应该用new申请动态存储空间,new返回一个指向其操作数类型变量的指针,第1个标识下即将new返回的指针赋值给data指针,因此第1个标识下应添加“data=newT[len];”。(2)析构函数完成资源的释放,删除由new申请的内存资源,因此第2个标识下应添加“delete[]data;”。(3)T&operator[](inti)函数重载运算符“[]”,返回指定下标的数据,因此第3个标识下应添加“returndata[i];”。(4)SetElement(inti,Tt)是设置指定下标的数据,数组下标不能超限,函数体中的if()用来判断下标位置是否超限,因此第4个标识下应添加“if(i<length)”。国家二级C++机试(操作题)模拟试卷第4套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modi1.cpp,该程序运行时有错误,请改正错误,使得程序正常运行。并使程序输出结果为:ABCDEFABCDEFABCDEF注意:不要改动main函数,不能增行或删行,也不能更改程序的结构,错误的语句在//******error******的下面。1#include<iostream.h>2voidmain()3{4//********error********5chars1[]=’’ABC6’’DEF’’;7//********error********9chars2[]=’’ABC9DEF’’;10//********error********11chars3[]=’’ABC’’+12’’DEF’’;13cout<<s1<<end1;14cout<<s2<<end1;15cout<<s3<<end1;16return;17}标准答案:(1)chars1[]=’’ABC’’(2)chars2[]=’’ABC\(3)chars3[]=’’ABC’’知识点解析:程序要求输出字符串数组的值。从已定源程序的main主函数开始入手,可以看出程序通过输出函数cout实现三个字符串数组值的输出。(1)字符串数组以“;”结束赋值语句,所以“ABC“DEF”应该是字符串数组s1的赋值语句,它的错误提示“modi1.cpp(5):error.C2001:newlineinconstant”,说明“DEF”被认为是新的值,根据题目要求它其实应该是与ABC是一个数组串的,所以应该在”ABC后面添加“*”,即第1个标识下修改为“chars1[]=’’ABC’’”。(2)根据题目中给出的输出结果,知道s2的输出也是ABCDEF,那么说明第2个标识下的s2值应该是ABCDEF,第一行与第二行是一个字符串。在C++中,在一个字符串中最后一个字符为“\n”,则标识它是续行符,下一行的字符是该字符串的一部分,所以在第一行的ABC后面添加“\”,即“chars2[]=’’ABC\”。(3)字符串数组s3的赋值语句,错误提示“modi1.cpp(12):errorC2110:cannotaddtwopointers”不能添加两个指针,不是用“+”来连接的,两个字符串变量之间不可以用“+”连接,所以这里删除“+”,即第3个标识下修改为“chars3[]=’’ABC”。二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。完成函数fun(inta[],intn),实现递归函数fun(inta[],intn)的返回值是数组a[]的前n个元素之和。注意:不能修改程序的其他部分,只能修改fun()函数。1#include<iostream.h>2intfun(inta[],intn)3{45}6voidmain()7{8intA[]={1,2,3,4};9cout<<fun(A,sizeof(A)/izeof(int))<<end1;10return;11}标准答案:1if(n>0)2returna[n-1]+fun(a,n-1);//递归求n项的和3return0;//项数小于等于0,返回求和值0知识点解析:(1)该程序功能是利用递归实现数组前n项的和。函数的递归是在调用一个函数的过程中出现直接或间接调用该函数本身。(2)从已给部分源程序的main主函数开始入手,核心函数intfun(inta[],intn)中调用该函数本身,利用递归调用实现计算结果,其中参数a为数组名,n为要求和的项数。(3)如果要计算的项数小于等于0,那么直接返回0。(4)否则调用递归语句“a[n-1]+fun(a,n-1)”,实现0到第n项的和。三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开考生文件夹下的源程序文件modi3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。(1)定义私有数据成员year、month、day,分别用于年、月、日,它们都是int型的数据,请在注释//********1********后添加适当的语句。(2)完成判断数据成员date2是否是闰年函数intDate::IsLeapYear()的定义,返回数据成员date2是否是闰年的值,是则返回1,否则返回0。请在注释//********2********后添加适当的语句。(3)设置SetData()的默认时间为:2004-12-1,请在注释//********3********添加适当的语句。(4)完成主函数main(),完成输出date2isaleapyear,请在注释//********4********后添加适当的语句。提示:公元纪年的年数可以被四整除,即为闰年;被100整除而不能被400整除为平年;被100整除也可被400整除的为闰年。注意:增加或修改代码的位置已经用符号表示出来。请不要修改其他的程序代码。1#include<iostream>2usingnamespacestd;3classDate4{5public:6//********3********7voidSetDate(inty,intm,intn);8intIsLeapYear();9voidPrint()10{cout<<year<<’’-’’<<month<<’’-’’<<day<<end1;}11private:12//********1********1314};15voidDate::SetDate(inty,intm,intd)16{17year=y;18month=m;19day=d;20}21intDate::IsLeapYear()22{23//********2********24return25}26intmain()27{28Datedate1,date2;29date1.SetDate();30date2.SetDate(2004,12,1);31cout<<’’date1:’’;32date1.Print();33cout<<’’date2:’’;34date2.Print();35//********4********36cout<<’’ate2is’’<<{’’’’:’’not’’)<<’’aleapyear.’’<<end1;37return0;38}标准答案:(1)intyear,month,day;(2)将“return”补充完整为:returnfyear%400==0)||(year%4==0&&year%100!=O);(3)将“voidSetDate(inty,intm,intn)”补充完整为:voidSetDate(inty=2004,intm=12,intn=1);(4)将“cout<<’’date2is’’<<(’’’’:’’not’’)<<’’aleapyear.’’<<end1;’’补充完整为:cout<<’’date2is’’<<(date2.IsLeapYear()?’’’’:’’not’’)<<’’aleapyear.’’<<end1;知识点解析:本题中程序的功能是判断2004年是否为闰年。其中成员函数SetDate设置日期,IsLeapYear函数判断是否为闰年。在VC环境下打开程序,根据题干给出的几条功能要求,对程序中给出注释下的内容逐个补全或修改。从已定源程序的main主函数开始入手,可以看出程序通过调用类Date和和其成员函数实现各种功能。(1)题目1要求“定义私有数据成员year、month、day,分别用于年、月、日,它们都是im型的数据”。在程序中的Date类中的priate区域添加数据成员year、month、day的定义即可,其中它们的类型根据题目要求定义为int型。即在第1个标识下添加“intyear,month,day;”。(2)题目2要求“完成判断数据成员date2是否是闰年函数intDate::IsLeapYear0的定义”。公元纪年的年数可以被100整除而不能被400整除为平年;被100整除也可被400整除的为闰年。用程序语言表达为“(year%400==0)||(year%4==0&&year%100!=0)”,即在第2个标识补充的返回值语句为“return(year%400==0)||[(year%4==0&&year%100!=0);”。(3)题目3要求“设置SetData()的默认时间为:2004-12-1”。程序中类Date的成员函数定义为“voidSetDate(inty,intm,intn);”,设置默认时间为:2004-12-1,就是设置SetDate函数中的变量值分别为2004,12,1。即成员函数的定义语句修改为“voidSetDate(inty=2004,intm=12,intn=1);”。(4)题目4要求“完成主函数main(),完成输出date2isaleapyear”。标识4下的语句“cout<<’’date2is’’<<(’’’’:’’not’’)<<’’aleapyear.’’<<end1;”缺少字符串“date2is”以及判断date2是否为润年的date2.IsLeapYear()函数调用,所以这条语句补全为“cout<<’’date2is’’<<(date2.IsLeapYear()?’’’’:"not’’)<<’’aleapyear.’’<<end1;”。国家二级C++机试(操作题)模拟试卷第5套一、基本操作题(本题共1题,每题1.0分,共1分。)1、请打开考生文件夹下的解决方案文件proj1,该工程中包含程序文件main.epp,其中有类Door(“门”)和主函数main的定义。程序中位于每个“//ERROR****found****”之后的一行语句有错误,请加以改正。改正后程序的输出结果应为:打开503号门...门是锁着的,打不开。打开503号门的锁...锁开了。打开503号门...门打开了。打开503号门...门是开着的,无须再开门。锁上503号门...先关门...门锁上了。注意:只修改每个“//ERROR*********found*********”下的那一行,不要改动程序中的其他内容。#include<iostream>usingnamespacestd;classDoor{intnum;//门号boolclosed;//true表示门关着boollocked;//true表示门锁着public:Door(intnum){//ERROR*******found*******num:this一>num;closed=locked=true;}boolisClosed()const{returnclosed;}//门关着时返回true,否则返回falseboolisOpened()const{return!closed;}//门开着时返回true,否则返回falseboolisLocked()const{Eeturnlocked;}//门锁着时返回true,否则返回falsebool.isUnlocked()consL{return!locked;}//门未锁时返回true,否则返回falsevoidopen(){//开门cout:<<endl<<"打开"<<rum<<"号门...";//ERROR*****found*****if(closed)cout<<"门是开着的,无须再开门。";elseif(locked)cout<<"门是锁着的,打不开。";else{closed=false;cout;<<"门打开了。";}}voidclose(){//关门cout;<<endl<<"关上"<<num<<"号门...";if(closed)cout<<"门是关着的,无须再关门。";else{closed=true;cout<<"门关上了。";}}//ERROR*******found*******voidlock()const{//锁门cout<<endl<<"锁上"<<num<<"号门...";if(locked)cout<<"门是锁着的,无须再锁门。";else{if(!closed){cout<<"先关门...";closed=true;}locked=true;cout<<"门锁上了。";}}voidunlock(){//开锁cout<<endl<<"开"<<num<<"号门的锁...";if(!loked)cout<<"门没有上锁,无须再开锁。";else{locked=false;cout<<"锁开了。";}}};intmain(){Doordoor(503);door.open();door.unlock();door.open();door.open();door.lock();return0;}标准答案:(1)this—>num=num;(2)if(!closed)(3)voidlock(){知识点解析:(1)主要考查考生对this指针的掌握,在构造函数中this指针指向的是当前类,因此要给。num赋值使用语句this一>hum=num;完成。(2)主要考查考生对if语句的掌握,先看类的私有成员中关于closed的定义::boolclosed;//trile表示门关着。再看下一条语句:cout<<"门是开着的,无须再开门。";。即满足条件时就会输出:门是开着的,无须再开门。因此if括号内应该是!closed。(3)主要考查考生对const函数的掌握,lock函数体中存在语句locked=true,即有参数发生改变,因此不能用const。二、简单应用题(本题共1题,每题1.0分,共1分。)2、请打开考生文件夹下的解决方案文件proj2,其中有矩阵基类MatrixBase、矩阵类Matrix和单位阵UnitMatrix的定义,还有main函数的定义。请在横线处填写适当的代码并删除横线,以实现上述类定义。此程序的正确输出结果应为:12345234563456710O000010000001000000100000010000001注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。#include<iostream>usingnamespacestd;//矩阵基础类,一个抽象类classMatrixBase{introws,cols;public:MatrixBase(introws,intcols):rows(rows),cols(cols){}intgetRows()const{returnrows;)//矩阵行数intgetCols()const{returncols;)//矩阵列数virtualdoublegetElement(intr,intc)const=O;//取第i个元素的值voidshow()const{//分行显示矩阵中所有元素for(inti=0;i<rows;i++){cout<<endl;for(intj=0;J<cols;j++1//**********found**********cout<<____________<<"";}}};//矩阵类classMatrix:publicMatrixBase{double*val;public://**********found**********Matrix(introws,intcols,doublem[]=NULL):_____________{//**********found**********val=___________;for(inti=0;i<rows*cols;i++)val[i]=(m=:NULL?0.0:m[i]);}~Matrix(){delete[]val;)doublegetElement(intr,intc)const{returnval[r*getCols()+c];}};//单位阵(主对角线元素都是1,其余元素都是0的方阵)类classUnitMatrix:publicMatrixBase{public:UnitMatrix(introws):MatrixBase(rows,rows){}//单位阵行数列数相同doublegetElement(intr,intc)const{//**********found**********if(_________)return1.0;return0.0;}};intmain(){MatrixBase*m;doubled[][5]={{1,2,3,4,5},{2,3,4,5,6},{3,4,5,6,7}};m=newMatrix(3,5,(double*)d);m一>show();deletem;cout<<endl;m=newUnitMatrix(6);m一>show();deletem;retumR0;}标准答案:(1)getElement(i,j)(2)MatrixBase(rows,cols)(3)Hewdouble[rows*cols](4)r==c知识点解析:(1)主要考查考生对纯虚函数的掌握,函数功能是分行显示矩阵中所有元素。因此在这里要输出行为i、列为j的元素,使用纯虚函数getElement(i,j)实现,输出语句为tout<<get.Element(i,j)<<"";。(2)主要考查考生对派生类的构造函数的掌握,派生类的构造函数使用成员列表初始化法,先对基类初始化。(3)主要考查考生对动态数组的掌握,val是double型指针,要给val赋值,就要先给它分配空间,应使用new来完成。(4)主要考查考生对成员函数的掌握,因为要输出单位矩阵,只有满足条件r==c的元素为1.0,所以填写语句if(r==c)return1.0;。三、综合应用题(本题共1题,每题1.0分,共1分。)3、请打开考生文件夹下的解决方案文件proj3,其中包含主程序文件main.cpp和用户定义的头文件Array.h,整个程序包含有类Array的定义和主函数main的定义。请把主程序文件中的Array类的成员函数Contrary()的定义补充完整,经补充后运行程序,得到的输出结果应该是:585,4,3,2,10,0,8.4,5.6,4.5,3.4,2.3,1.2注意:只允许在“//********333********”和“//********666********”之间填写内容,不允许修改其他任何地方的内容。//Array.h#include<iostream>usingnamespacestd;template<classType,intm>classArray{//数组类public:Array(Typeb[],intmm){//构造函数for(inti:0;i<m;i++)if(i<mm)a[i]=b[i];elsea[i]=0;}voidContrary();//交换数组a中前后位置对称的元素的值intLength()const{returnm;}//返回数组长度Typeoperator[](inti)const{//下标运算符重载为成员函数if(i<0}||i>=m){cout<<"下标越界!"<<end1;exit(1);}returna[i];}private:Typea[m];};voidwriteTOFile(constchar*);//不用考虑此语句的作用//main.cpp#include"Array.h"//交换数组a中前后位置对称的元素的值template<classType,intm>voidArray<Type,m>::Contrary(){//补充函数体//********333********//********666********}intmain(){ints1[5]={1,2,3,4,5);doubles2[6]={1.2,2.3,3.4,4.5,5.6,8.4);Array<int,5>d1(s1,5);Array<double,8>d2(=s2,6);inti;d1.Contrary();d2.Contrary();cout<<d1.Length()<<"<<d2Length()<<end2;for(i=0;i<4;i++)cout<<d1[i]<<",";cout<<d1[4]<<end1;for(i=0;i<7;i++)cout<<d2[i]<<",";tout<<d2[7]<<endl;writeToFile("");//不用考虑此语句的作用return0:}标准答案:1for(inti=0,j=m一1;i<j;i++,j--)2{//i从0开始自加,j从数组最一位开始自减,条件是i<j,开始遍历数组a3Typetemp=a[i];//把a[i]赋值给变量temp4a[i]=a[j];//把a[j]赋值给[j]5a[j]=temp;//把temp赋值给a[j],最终使a[i]与a[j]值的互换6}知识点解析:主要考查考生对交换算法的掌握情况,根据题目对要完成的函数Contrary的要求:交换数组a中前后位置对称的元素的值。这里取下标i=0,即为数组中的第一个元素,j=m一1,即为数组中的最后一个元素,利用中间值temp交换元素的值,然后i逐次递增的同时j逐次递减,再交换,循环到i>j时停止交换即可。国家二级C++机试(操作题)模拟试卷第6套一、基本操作题(本题共1题,每题1.0分,共1分。)1、请打开考生文件夹下的解决方案文件proj1,该工程中包含程序文件main.cpp,其中有关TVSet(“电视机”)和主函数main的定义。程序中位于每个“//ERROR********found********”之后的一行语句有错误,请加以改正。改正后程序的输出结果应该是:规格:29英寸,电源:开,频道:5,音量:18规格:29英寸,电源:关,频道:一1,音量:一1注意:只修改每个“//ERROR****found****”下的那一行,不要改动程序中的其他内容。#include<iostream>usingnamespacestd;classTVSet{//“电视机”类constintsize;intchannel;//频道intvolume;//音量boolon;//电源开关:true表示开,false表示关public://ERROR*******found*******TVSet(intsize){this一>size(size);channel=0;volume=15;on=false;}intgetsize()const(returnsize;)//返回电视机规格boolisOn()const{returnon;}//返回电源开关状态//返回当前音量,关机情况下返回一1intgetVolume()const(returnisOn()?volume:一1;}//返回当前频道,关机情况下返回一1intgetChannel()const{returnisOn()?channel:一1;}//ERROR*******found*******voidturnOnOff()const//将电源在“开”和“关”之间转换{on=!on;}voidsetChanneiTo(intchan){//设置频道(关机情况下无效)if(isOn()&&chan>=0&&chan<=99}channel=chan;}voidsetVolumeTo(intvol){//设置音量(关机情况下无效)if(isOn()&&vol>=0&&vol<=30)volume=vol;}voidshowState(){//ERROR*******found*******cout<<"规格:"<<getSize()<<"英寸"<<",电源:"<<(isOn()?"开":"关")<<",频道:"<<getChannel()<<",音量:"<<getVolume()<<endl;}};intmain(){TVSettv(29);tv.turnOnOff();tv.setChanneiTo(5);tv.setVolumeTo(18);tv.show_state();tv.turnOnOff();tv.show_state();return0;}标准答案:(1)TVSet(intsize):size(size){(2)voidtumOnOff()(3)tout<<"规格:"<<getSize()<<"英寸"知识点解析:(1)主要考查考生对构造函数的掌握,因为size是常变量,所以只能用成员初始化列表来初始size,即TVSet(intsize):size(size){。(2)主要考查考生对const函数的掌握,在turnOnOff函数中,有语句:0n=!on;,使得on的值发生改变,因此该函数不能使用const。(3)主要考查考生对输出语句的掌握,下一条语句:<<",电源:"<<(isOn()?"开":"关"),说明输出语句还没结束,因此不能用";"。二、简单应用题(本题共1题,每题1.0分,共1分。)2、请打开考生文件夹下的解决方案文件proj2,其中有整数栈类IntList、顺序栈类SeqList和链接栈类LinkList的定义。请在程序中的横线处填写适当的代码并删除横线,以实现上述类定义。此程序的正确输出结果应为:4631846318注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动//“****found****”。#include<iostream>usingnamespacestd;classIntstack{//整数栈类public:virtualvoidpush(int)=0;//入栈virtualintpop()=0;//出栈并返回出栈元素virtualinttopElement()const=0;//返回栈顶元素,但不出栈virtualboolisEmpty()const=0;//判断是否栈空};classSeqStack:publicIntStack{intdata[100];//存放栈元素的数组inttop;//栈顶元素的下标public://**********found**********SeqStack():___________{}//把top初始化为一1表示栈空voidpush(int:n){data[++top]=n;}//**********found**********intpop(){return______;}inttopElement()const{returndata[top];}boolisEmpty()const(returntop=-1;)};structNode{intdata;Node*next;};classLinkStack:publicIntStack{Node*top;public://**********found**********LinkStack():_______{)//把top初始化为NULL表示栈空voidpush(intn){Node*p=newNode;p—>data=n;//**********found**********___________;top=p;}intpop(){intd=top—>data;;top=top—>next;returyld;}inttopElement()const{returntop一>data;}boolisEmpty()const{returntop==NULL;}};voidpushData(IntStack&st){st.push(8);st.push(1);st.push(3);st.push(6);st.push(4);}voidpopData(IntStack&st){while(!st.isEmpty())cout<<st.pop()<<";}intmain(){SeqStackst1;pushData(st1);popData(st1);cout<<endl;LinkStackst2;pushData(st2);popData(st2);cout<<endl;retumR0;}标准答案:(1)top(一1)(2)data[top--](3)top(NULL)(4)p一>next=top知识点解析:(1)主要考查考生对构造函数的掌握情况,先看语句注释:把top初始化为一1表示栈空,即要把top赋值为一1即可。(2)主要考查考生对纯虚函数的掌握情况,先看纯虚函数在基类的注释:出栈并返回出栈元素。要返回栈顶元素可以通过data[top]得到,出栈同时要使得top往下移动,即top--。(3)主要考查考生对构造函数的掌握情况,先看语句注释:把top初始化为NuLL表示栈空,因此使用成员列表初始化直接把top赋值为NULL即可。(4)主要考查考生对栈的掌握,push为入栈函数,top指向栈顶元素,因此新添加的指针的next要指向top,即p一>next=top;。三、综合应用题(本题共1题,每题1.0分,共1分。)3、请打开考生文件夹下的解决方案文件proj3,其中声明了ValArray类,该类在内部维护一个动态分配的整型数组。ValArray类的复制构造函数应实现对象的深层复制。请编写ValArray类的复制构造函数。在main函数中给出了一组测试数据,此种情况下程序的输出应该是:ValArrayv1={1,2,3,4,5}ValArrayv2={1,2,3,4,5}要求:补充编制的内容写在“//********333*********”与“********666********”之间,不得修改程序的其他部分。注意:程序最后将结果输出到文件out.dat中。输出函数writeToFile已经编译为boj文件,并且在本程序中调用。//ValArray.h#include<iostream>usingnamespacestd;classValArray{int*v;intSize;public:ValArray(constint*p,intn):size(n){v=newint[size];for(inti=0;i<size;i++)v[i]=P[i];}ValArray(constValArray&other);~ValArray(){delete[]v;)voidprint(ostream&out)const{out<<’{’;for(inti=0;i<size-1;i++)out<<v[i]<<",";out<<v[size-1]<<’)’;}voidsetArray

温馨提示

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

评论

0/150

提交评论