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

下载本文档

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

文档简介

国家二级C++机试(操作题)模拟试卷1(共9套)(共26题)国家二级C++机试(操作题)模拟试卷第1套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modil.cpp,该程序运行时有错,请改正其中的错误,使程序正确运行,并且使程序输出的结果为:30130注意:错误的语句在//********error********的下面,修改该语句即可。1#include2inta=10;3classcobj4{5public:6CObj()7{8a=b=0;9}10voiddisplay()11{12//********error********13cout<标准答案:(1)cout<a+=a;(3)a+=::a;知识点解析:程序当中定义了全局变量a和类COhj,类CObj含有成员变量a和b,类CObj的变量a和全局变量a均为整型变量,名字完全一样,使用时需要注意区分。类COhj成员函数display()打印变量a和b的值,func(inta)函数和func2()均使类成员变量a增加,但是增加方式不同。[解题思路](1)成员函数display()打印变量a和b的值,即cout输出a和b的值,cout流中的数据是用流插入运算符“<<”顺序加入的,因此“<”不正确,因此第1个标识下应改成cOut<a+=a:”。(3)func20函数虽然没有参数,但是成员变量a和全局变量a重名,第3个标识下“a+=a”也会有歧义,分不清楚是全局变量加倍还是类成员变量加倍或者其他情况,调用rune20函数后,输出“130”,说明a为13,b为0,因此是成员变量与全局变量a的和赋给成员变量a,正确的写法是“a+=::a:”,“::a”表示是全局变量a。二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。阅读下列函数说明和代码,补充空出的代码。函数convert(char*des,char*str)实现的功能是,如果字符串str里面有空格或者不可打印字符,则全部去掉,将转化后的字符串放在字符串des里,然后返回该字符串。注意:不能修改程序的其他部分,只能补充convert()函数。1#include2#include3#defineMAXLEN10244char*convert(char*deS,char*str)5{67}8voidmain()9{10chardest[MAXLEN];11char*str="AbcDeFhJK";12cout<标准答案:1intj=0;2for(inti=0;str[i]!=NULL;i++)3{4if(str[i]!=’’&&isprint(str[i]))//判断是否是可打印的而且非空格字符5{6des[j++]=str[i];//添加7}8}9des[j]=NULL;//最后一个字符为空10returndes;知识点解析:函数convert(char木des,char*str)实现的功能是:如果字符串str里面有空格或者不可打印字符,则全部删除,将转化后的字符串放在字符串des里。可用循环方式检查str中的每个字符,判断是不是空格或者不可打印字符,如果不是则放入des中,否则不放入des中。[解题思路](1)由审题分析可知,可利用循环来逐个检索str中的字符,循环变量i从0开始,直到str数组的结束,即str[i1==0为循环结束条件。(2)在循环中用if语句判断该字符是否是空格或者不可打印字符:if(str[i]!=’’&&isprint(str[i])),如果满足条件说明不是空格或者不是不可打印字符添加到des中,不满足则无须添加到des中。三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开考生文件夹下的源程序文件modi3.cpp,其中定义了类baseA、priAl和priA2,其中priAl类由baseA类公有派生,priA2类由priAl类公有派生。上述三个类的定义并不完整,请按要求完成下列操作,将程序补充完整。程序输出结果如下:1051057(1)定义类baseA的构造函数,该构造函数有一个整型的参数m,在构造函数中请将m赋值给数据成员a。请在注释“//料料料料1料料料料”之后添加适当的语句。(2)定义类priAl的构造函数,该构造函数有两个整型的参数m和n,在构造函数中请将m赋值给数据成员b,将n作为基类baseA构造函数的参数值传入。请在注释“//********2********"之后添加适当的语句。(3)定义类priA2的构造函数,该构造函数有三个整型的参数m,n和k,在构造函数中请将m赋值给数据成员c,将n和k分别赋值给基类priAl构造函数的参数m和n。请在注释“//********3********之后添加适当的语句。(4)完成类priA2的成员函数show的定义,该函数调用基类成员函数,输出基类私有成员a和b及类priA2自身的数据成员C的值,上述三个值在输出时以空格隔开。请在注释“//********4********“之后添加适当的语句。注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。1#include2classbaSeA3{4inta;5public:6//********1********78intgeta(){returna;)9};10classpriAl:publicbaseA11{12intb;13public:14//********2********1516intgetb(){returnb;)17};18classpriA2:publicpriAl19{20intC;21public:22//********3********2324voidshow()25{26//********4********2728}29};30voidmain()31{32priA2a(7,5,10);33cout<标准答案:(1)添加语句:baseA(intm){a=m;)(2)添加语句:priAl(intm,intn):baseA(n){b=m;)(3)添加语句:priA2(intm,intn,intk):priAl(n,k){c=m;)(4)添加语句:cout<知识点解析:程序当中定义了类baseA、priAl和priA2,其中priAl类由baseA类公有派生,priA2类由priAl类公有派生。构造函数是类的一种特殊的成员函数,其函数名和类名一致。构造函数可以带参数也可以不带参数,带参数的构造函数根据构造函数内部赋值语句可知其参数形式。公有派生类可以访问基类的公有成员,因此priA2类可以调用类baseA的geta()函数和priAl类的getb0函数,通过调用这两个函数得到基类私有成员a和b。[解题思路](1)根据题目l要示,构造函数函数名和类名一致,显然baseA构造函数名为baseAO,在baseAOOO通过参数m完成对成员变量a的赋值,因此构造函数名为baseA(intm),在函数内部对成员a赋值,故第1个标识下应添加“baseA(intm){a=m;)”。(2)根据题目2要示,构造函数形式为priAl(intm,int11),m赋值给priAl类成员b,将11作为基类baseA构造函数的参数值传入,故第2个标识下应添加“priAl(intm,intn):baseA(n){b=m;}”。(3)根据题目3要示,函数形式为priA2(intm,intn,intk),在构造函数中将m赋值给数据成员c,将n和k分别赋值给基类priAl构造函数的参数m和n,因此第3个标识下应添加“priA2(intm,intn,intk):priAl(n,k){c=m;)”。(4)根据题目4要示,priA2类公有派生于priA1,而priA1公有派生于baseA,因此在priA2类中可以调用基类的geta()和getb()来获得基类私有成员a和b,再输出priA2的私有成员C即满足要求,因此第4个标识下应添加“cout<国家二级C++机试(操作题)模拟试卷第2套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modi.epp,该程序运行时有错误,请改正其中的错误,使得程序正确运行。程序输出:S1:n=20s2:n=10执行s3.add(s1,s2)s3:n=30s4:n=30注意:不要改动main函数,不能增行或删行,也不能更改程序的结构,错误的语句在∥********error********的下面。#include<10Stream.h>C1assTestClass{intn;public:TestClass(){)Testelass(intm){n=m;}∥********error********TestClassadd(TestClasssl,s2){thiS一>n=s1.n+s2.n;∥********error********return(thiS);}voiddisp(){cout<<“n=”<标准答案:(1)TestClassadd(TestClasss1,TestClasss2)(2)return(*this);(3)};知识点解析:本题中的功能是设置类中的成员数值,然后利用成员函数add求和。从已定源程序的main主函数开始入手,可以看出程序首先通过类TestClass中的成员函数实现题目中的输出要求。解题思路(1)打开modil.cpp,调试程序,根据显示的错误提示,知道语句“TestClassadd(TestClasss1,s2)”中的变量“s2”没有声明类型,所以补充“s2”的类型,即“TestClassadd(TestClasss1,TestClasss2)”。(2)“this一>n=s1.n+s2.n:”语句中的this变量为指针变量,所以第2个标识下的“return(this);”返回语句中的this变量,应该返回指针型,所以修改为“retumf*this);”。(3)C++中类的定义格式应为“class类名{};”,以分号为结尾,所以第3个标识下,类结尾处补充分号“;”,即修改为“};”。二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。阅读下列函数说明和代码,完成空出部分程序。函娄factor(int*des,int&length,intn)实现的功能是:将11所有基数存放到des中,通过length引用返回因数的个数,比如fator(a,length,20)执行后,则a={1,2,4,5,10,20),length=6。注意:只能补充函数factor0,请勿改动其他部分的内容。#include#defineMAXNLEN100voidfactor(int*des,int&length,intn){}voidmain(){inta[MAXNLEN],length;intn=20;factor(a,length,n);for(inti=0;i标准答案:1length=0;2for(inti=1;i<=n;i++)3{4if(n%i==0)//判断是否n的因数5{6des[1ength]=i7iength++8}9}知识点解析:(1)找到n的每一个因数可采用循环方法,循环变量从1:开始到n,逐个取n和循环变量的余数。(2)如果余数为0说明是n的因数,添加到des中,参数length是采用的引用传递方式,形参的改变会影响实参,因此可直接将length的值加1表示des中元素个数加1。三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开考生文件夹下的源程序文件modi3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。完成以下功能:(1)完成构造函数,设置数组元素的个数为0,请在注释∥********1********之后添加语句。(2)完成函数AddMember(intn),如果参数rl包含在类的数据成员数组中,则返回0,否则把数据写入数组,然后返回1,请在注释∥********2********之后添加语句。(3)完成函数DelMember(intn),如果变量在数据中,则删除该变量,并且返回1,如果不存在则返回0,请在注释∥********3********之后添加语句。(4)完成成员函数islnclude(intn)的定义,该函数检查参数n是否在类的数据成员数组elems中,如果在返回1,否则返回0。清在注释∥********4********之后添加语句。注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。#include#defineMAXLENGTH500classCArray{public:CArray(){∥********1********}intAddMember(intn){for(inti=0;i标准答案:(1)添加语句:length=0;(2)将“if(Array[i]=n)”补充完整为:if(Array[i]=n)或if(n=Array[i])(3)将“if()”补充完整为:if(i知识点解析:(1)使length的初始化为0,因此添加语句:“length=0;”。(2)第2个标识下是检查n是否已经在数组当中存在,用if语句来判断,即if(Array[i]一n)或if(n==Array[i])。(3)DelMember(intn)函数删除指定的元素,由于元素在数组当中的位置未知,因此必须先查找该元素的位置,在该函数的实现过程当中通过for循环来完成,即第一个for循环查找n在数组中的位置。如果11存在于数组中,那么if中的break语句就会执行跳出循环,此时循环变量i的值会小于length,即通过判断i的值是否小于length值可以知道n是否存在数组中,如果存在数组中接下来进行删除操作。即第3个标识下应改为if(i国家二级C++机试(操作题)模拟试卷第3套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹projl下的工程pmjl,其中有“沙发”类Sofa和主函数main的定义。程序中位于每个,/ERROR**********found**********下的语句行有错误,请加以更正。更正后程序的输出应该是:座位数:3颜色:红色注意:只能修改每爪//ERROR**********found**********下的那一行,不要改动程序中的其他内容。#includeusingnamespacestd;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;)constcharsgetColor()const{returncolor;)};intmain(){Sofasafa(3);cout<<“座位数:”<标准答案:(1)Sofa(ints,constchar*co=“红色”):seats(s){(2)if(co==NULL)(3)intqetSeats()const{returnseats;)知识点解析:程序定义Sofa类,它包含两个数据成员:字符数组color和整型变量seats;还包含一个构造函数,两个公有成员函数,getSeats()函数返回成员seats的值,getColor()函数返回字符数组color的地址Sofa类的定义体中,有三个错误:(1)Sofa类的构造函数错误:由main()函数中定义Sofa类对象时可知:构造函数虽然有两个参数,但是可以只传人一个整型变量,所以另一个参数co需要提供一个默认值,由题意可知程序运行结果输出颜色是红色,所以co的默认字符串值为“红色”;另外程序需要输出座位数:3,所以成员seats需要使用形参s完成初始化,构造函数体中并未对seats进行赋值。(2)sofa类的构造函数中,需要根据形参co的值是否为空,完成color的赋值,此处的if判断需要使用相等关系运算符,而不是赋值运算符。(3)成员函数getSeats()返回的是seats的值,所以返回值应该是int类型,而不是constchar*类型。二、简单应用题(本题共1题,每题1.0分,共1分。)2、请使用VC6或使用【答题】菜单打开考生文件夹proj2下的工程proj2,该工程中包含一个程序文件main.cpp,其中有类AutoMobile(“汽车”)及其派生类Car(“小轿车”)、Truck(“卡车”)的定义,还有主函数main的定义。请在横线处填写适当的代码并删除横线,以实现上述类定义。此程序的正确输出结果应为:车牌号:冀ABCl234品牌:ForLand类别:卡车当前档位:0最大载重量:12车牌号:冀ABCl234品牌:ForLand类别:卡车当前档位:2最大载重量:12车牌号:沪XYZ5678品牌:QQ类别:小轿车当前档位:0座位数:5车牌号:沪XYZ5678品牌:QQ类别:小轿车当前档位:一1座位数:5注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。#include#include#includeusingnamespacestd;classAutoMobile{//“汽车”类char*brand;//汽车品牌char*number;//车牌号intspeed;//档位:1、2、3、4、5,空档:0,倒档:一1public:AutoMobile(constchar*thebrand,constchar*the_number):speed(0){brand=newchar[strlen(thebrand)+1];//**********found**********_________;//**********found**********_________;strcpy(number,thenumber);}~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<<”车牌号:”<标准答案:(1)strcpy(brand,the_brand)(2)number=newchar[strlen(the_number)+1](3)theBrand()(4)const{return”卡车”;}知识点解析:(1)主要考查考生对strcpy函数的掌握情况,在上一条语句程序给brand指针分配了空间,在这里要复制字符串the_brand,即strepy(brand,the—brand);。(2)主要考查考生对动态分配的掌握情况,参考brand指针的复制过程完成该语句,先给指针number分配空间,通过new来完成:number=newchar[strlen(the_number)+1];。(3)主要考查考生对成员函数的掌握,由程序可知这里要输出的是品牌,因此调用成员函数theBrand()来输出品牌。(4)主要考查考生对纯虚函数的掌握,根据纯虚函数的定义:virtualconstchar*category()const=0;,可知在这里要填写:const{return”卡车”;}。三、综合应用题(本题共1题,每题1.0分,共1分。)3、请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程proj3,其中声明的CDeepCopy是一个用于表示矩阵的类。请编写这个类的赋值运算符成员函数operator=,以实现深层复制。要求:补充编制的内容写在“//**********333**********”与“//**********666**********”之间。不得修改程序的其他部分。注意:程序最后将结果输出到文件out.dat中。输出函数writeToFile已经编译为obj文件,并且在本程序中调用。//CDeepCopy.h#include#includeusingnamespacestd;classCDeepCopy{public:intn;//动态数组的元素个数int*p;//动态数组首地址CDeepCopy(int);~CDeepCopy();CDeepCopy&operator=(constCDeepCopy&r);//赋值运算符函数};voidwriteToFile(char*);//main.cpp.#include”CDeepCopy.h”CDeepCopy::~CDeepCopy(){delete[]P;)CDeepCopy::CDeepCopy(intk){n=k;P=newint[n];}//构造函数实现CDeepCopy&CDeepCopy::operator=(constCDeepCopy&r)//赋值运算符函数实现{//********333********//********666********}intmain(){CDeepCopya(2),d(3);a.P[o]=1;d.P[0]=666;//对象a,d数组元素的赋值{CDeepCopyb(3);a.P[0]=88;b=a;//调用赋值运算符函数cout<标准答案:n=r.n;//把对象r字符长度赋值给ndelete[]p;//删除动态数组pp=newint[n];//给动态数组p分配空间为nfor(inti=0;i知识点解析:主要考查考生对运算符重载的掌握,由注释可知此处要实现赋值运算符函数。要重载的运算符是“=”,该类的成员是动态数组p,数组元素个数为n,因此先释放原来的动态数组,再分配空间,然后逐个复制元素即可。国家二级C++机试(操作题)模拟试卷第4套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modil.cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,即使程序在界面输出以下类似内容:0012FF6810012FF3C50012FF6C20012FF4440012FF7030012FF4C30023FF7440012FF5420012FF7850012FF5C1006AFDCC~006AFDEF数据可能因为机器的不同,程序的输出的内容会有差异。只要相差为4的连续地址即可。注意:不要改动main函数,不能增行或删行,也不能更改程序的结构,错误的语句在∥********error********的下面。#includeusingnamespacestd;intmain(){int*p,a[5]={1,2,3,4,5};double*q,b[5]={5.0,4.0,3.0,2.0,1.0),intx;P=a;q=b;∥********error********for(x=0;x<=5;x++)∥********error********cout<<p+x<<“”<<(p+x)<<”“<标准答案:(1)for(x=0;x<5;x++)(2)cout<知识点解析:本题的程序功能是输出相差为4的连续地址。从己定源程序的main主函数开始入手,依次执行程序中的语句,重点分析、调试标识下的错误语句,输出题目要求的结果。解题思路(1)根据数组a、b定义,它们都是5个元素,而第1个标识下的“for(x:0;x<=5;x++)”循环了6次,应该是5次,所以第1个标识下的将其修改为“for(x=0;x<5;x++)”(2)第2个标识下的p变量为指针型变量,p+x为指向数组中第x个元素的地址,这里要输出的是存储单元的内容,所以使用“*”指针元素符,即修改为“cout<二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。阅读下列函数说明和代码,完成空出部分程序。该程序从键盘读入整数,并按从大到小的顺序输出输入整数中互不相等的那些整数。程序一边读入整数,一边构造一个以大到小顺序链接的链表,直至输入0时结束。然后顺序输出链表上各表元的整数值。主函数每读入一个整数,就调用函数fun(),函数fun()将还未出现在链表上的整数按从大到小的顺序插入到链表中。为了插入方便,链表在表首有一个辅助表元。注意:不能修改程序的其他部分,只能修改fun()函数。#includeclassNODE{public:intdata;NODE*next;};voidfun(NODE*list,intx){}voidmain(){intX;NODE*head,*P;/*首先建立只有辅助表元的空链表*/head=newNODE;head->next=NULL;std::cout<<“Enterintegers,endwith0”<>x;if(x==0)break;fun(head,x);}for(p=head一>next;P!=NULL;p=p一>next)std::cout<data<<’’;std::cout<next;deletehead;head=P;}while(p);}标准答案:NODE*u,*v,*p;u=list;V=u一>next;while(v!=NULL,&&xdata)//寻找插入的位置{U=V;V=V一>next;}if(V==NULL-‖x>v一>data)//判断是否为新的元素{p=newNODE;p一>data=x;//生成新的元素p一>next=v;u一>next=p;//插入新的元素}知识点解析:(1)该程序功能是构造一个以大到小顺序链接的链表。它的解题思路,首先寻找插入的位置,然后判断是否为新元素,最后插入。(2)从己给部分源程序的main主函数开始入手,核心函数voidfun(NODE*list,intx)中的list参数为单链表,x为要插入的数据。【解题思路】(1)首先利用while循环寻找插入元素的位置。(2)然后判断要插入的元素是否为新元素。(3)如果为新元素,那么执行单链表的操作,插入元素。三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开考生文件夹下的源程序文件modi3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。(1)定义私有数据成员year、month、day,分别用于年、月、日,它们都是int型的数据,请在注释∥********error********后添加适当的语句。(2)完成判断数据成员date2是否是闰年函数intDate::IsLeapYear0定义,返回数据成员date2是否是闰年的值,是则返回1,否则返回0。请在注释∥********2********后添加适当的语句。(3)设置SetData0的默认时间为:2004.12.1,请在注释∥********3********后添加适当的语句。(4)完成主函数main(),完成输出date2isaleapyear,请在注释∥********4********后添加适当的语句。提示:公元纪年的年数可以被四整除,即为闰年;被100整除而不能被400整除为平年;被100整除也可被400整除的为闰年。注意:增加或修改代码的位置已经用符号表示出来。请不要修改其他的程序代码。1#include2usingnamespacestd;3C1assDate4{5public:6∥********3********7voidSetDate(inty,intm,intn);8intIsLeapYear();9VOidPrint()10{cout<标准答案:(1)intyear,month,day;(2)将“return”补充完整为:return(year%400==0)ll(year%4==0&&year%1001=0);(3)将“voidSetDate(intY,intm,intn);”补充完整为:voidSetDate(inty=2004,intm=12,intn=1);(4)将“cout<<“date2is”<<(*’:"not。’)<<”aleapyear.fI<知识点解析:本题中程序的功能是判断2004年是否为闰年。其中成员函数SetDate设置日期,IsLeapYear函数判断是否为闰年。在VC环境下打开程序,根据题干给出的几条功能要求,对程序中给出注释下的内容逐个补全或修改。从已定源程序的main主函数开始入手,可以看出程序通过调用类Date和和其成员函数实现各种功能。解题思路(1)题目1要求“定义私有数据成员year、month、day,分别用于年、月、日,它们都是int型的数据”。在程序中的Date类中的priate区域添加数据成员year、month、day的定义即可,其中它们的类型根据题目要求定义为int型。即在第1个标识下添加“intyear,month,day;”0(2)题目2要求“完成判断数据成员date2是否是闰年函数intDate::IsLeapYear0的定义”。公元纪年的年数可以被100整除而不能被400整除为平年;被100整除也可被400整除的为闰年。用程序语言表达为“(year%400~0)ll(year%4=0&&year%100!=0)”,即在第2个标识补充的返回值语句为“return(year%0400=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.”<国家二级C++机试(操作题)模拟试卷第5套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modi1.cpp,该程序运行时有错误,请改正程序中的错误,使得程序输出:number1=4.8number2=93.6number3=0.9PRODUCT=404.352注意:错误的语句在//********error********”的下面。修改该语句即可。其他的语句不能修改。#includeusingnamespacestd;intmain(){doublenumber1=4.8,number2=93.6,number3=0.9;//********error********Product=number1*number2*number3;//********error********cout<<"number1="<标准答案:(1)doubleProduCt=number1*number2*number3;(2)cout<<"numberl="<二、综合应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。完成以下功能:(1)类CBase有一个常数变量Numberl,在构造函数时对其初始化,请在注释//********1********后添加适当的语句。(2)类CPri是CBase的公共继承类,请在注释//********2********后添加适当的语句。(3)类CPri构造函数有两个形式参数,第一个是对CBase的初始化,第二个缺省为0,用来对变量Number2进行初始化。请在注释//********3********后添加适当的语句。(4)类CPri的函数display()重载于CBase的打印函数。完成对变量Number2的输出,然后调用基类的打印函数,请在注释//********4********后添加适当的语句。输出的内容如下:Number2=12Number=8注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。#inCludeClassCBaSe{private:intNumber;public://********1********CBaSe(intx){}Voiddisplay(){cout<<"Number="<标准答案:(1)将“CBase(intx)”补充完整为:CBase(intx):Number(x)(2)将“classCPri”补充完整为:classCPri:publicCBase(3)将“CPri(intx,inty=0)”补充完整为:Cpri(intx,inty=0):CBase(x)(4)添加语句:cout<<"Number2="<知识点解析:(1)构造函数完成类成员变量的初始化,第1个标识下是对Number1初始化,带参数的构造函数初始化有多种方式,可以在函数体内完成初始化,或利用参数初始化表来完成初始化,显然这里不能在函数体完成初始化,只能是在函数首部实现对数据成员的初始化,因此只能通过参数初始化表来完成,这种方法不在函数体内对数据成员初始化,而是在函数首部实现,即第1个标识下应改为“CBase(intx1:Number(x)”。(2)第2标识下是声明类CPri,且类CPri是CBase的公共继承类,定义派生类的一般格式为:class<派生类名>:<继承方式1><基类名1>,<继承方式2><基类名2>,<继承方式n><基类名n>{<派生类新定义成员>};类CPri是CBase的公共继承类,因此第2个标识下应改为“classCPri:publicCBase”。(3)CPri构造函数有两个形式参数,第一个是对CBase的初始化,第二个缺省为0,用来对变量Number2进行初始化,这里对CBase的初始化也不能在函数体内完成,因此也必须采用参数初始化表来完成,即第3个标识下应改为“CPri(intx,inty=0):CBase(x)”,调用CBase的构造函数完成对CBase的初始化。(4)函数display()重载于CBase的打印函数。完成对变量Number2的输出,然后调用基类的打印函数display(),基类的display()和派生类的display()重名,调用基类的display()应过类名来直接调用,即第4个标识下应添加“cout<<"Number2="<国家二级C++机试(操作题)模拟试卷第6套一、基本操作题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:在3×4的矩阵中找出在行上最大、在列上最小的那个元素,若没有符合条件的元素则输出相应信息。例如,有下列矩阵:12134781063597程序执行结果为:find:a[2][2]=9请在程序的中括号处填入正确的内容并把中括号删除,使程序得出正确的结果。注意:部分源程序在文件BLANKl.C中。不得增行或删行,也不得更改程序的结构!试题程序:#include#defineM3#defineN4voidfun(int(*a)[N]){inti=0,j,find=0,rmax,c,k;while((i标准答案:(1)j(2)0(3)i++知识点解析:本题是在矩阵中找出在行上最大、在列上最小的那个元素。填空0:找出行上最大的数,并将该数的列数j保存在c中,所以应填j。填空2:使用while循环语句和控制变量find,如果该数不是列中的最小数,那么把find置0,所以应填0。填空3:i是while的控制变量,所以每做一次循环,该数值要加1,所以应填i++。二、简单应用题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,函数fun的功能是:求S的值。例如,当k为10时,函数的值应为1.533852。请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件MODI1.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include#include#include#include/*********found*********/fun(intk){intn;floats,w,p,q;n=1;s=1.0;while(n<=k){w=2.0*n;P=w一1.0;q=w+1.0;s=s*w*w/p/q;n++:}/*********found*********/returns}voidmain(){system("CLS");printf("%f\n",fun(10));}标准答案:(1)doublefun(intk)(2)returns;知识点解析:(1)此处为函数定义错误,根据返回值的类型可知函数类型标识符应为double。(2)语法错误。三、综合应用题(本题共1题,每题1.0分,共1分。)3、请编写一个函数fun,它的功能是:将ss所指字符串中所有下标为奇数位置的字母转换为大写(若该位置上不是字母,则不转换)。例如,若输入"abc4Efg",则应输出"aBc4EFg"。注意:部分源程序在文件PROGl.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include#inClude#include#includevoidfun(char*ss){}voidmain(){FILE*wf;chartt[81],s[81]="abc4Efg";system("CLS");printf("\nPleaseenteranstringwithin80characters:\n");gets(tt);printf("\n\nAfterchanging,thestring\n%s”,tt);fun(tt);printf("\nbecomes\n%s\n",tt);/********************/wf=fopen("out.dat","w");fun(s);fprintf(wf,"%s",a);fclose(wf);/*********************/}标准答案:voidfun(char*ss){int1;for(i=0;ss[i]!=’\0’;i++)/*将ss所指字符串中所有下标为奇数位置的字母转换为大写水/if(i%2==1&&ss[i]>=’a’&&ss[i]<=’z’)ss[i]=ss[i]-32;}知识点解析:该题要求将给定字符串中奇数位置的字母转换为大写,需要先判断奇数位置以及是否是小写字母,如果是再通过其转换方法进行转换。从C语言的学习中知道,只要将小写字母减去32即转成大写字母,将大写字母加上32即转成小写字母。本程序用if语句实现转换功能。国家二级C++机试(操作题)模拟试卷第7套一、基本操作题(本题共1题,每题1.0分,共1分。)1、程序通过定义学生结构体变量,存储学生的学号、姓名和三门课的成绩。函数fun的功能是:将形参a中的数据进行修改,把修改后的数据作为函数值返回主函数进行输出。例如,若传给形参a的数据中学号、姓名和三门课的成绩依次是:10001、“ZhangSan”、95、80、88,修改后的数据应为:10002、“LiSi”、96、81、89。请在程序的中括号处填入正确的内容并将中括号删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include#includestructstudentflongsno;charname[10];floatscore[3];};/*********found*********/【1】fun(structstudenta){inti;a.sno=10002;/*********found*********/strcpy(【2】,”Lisi”);/*********found*********/for(i=o;i<3;i++)【3】+:1;returna;}main(){structstudents={10001,"ZhangSan",95,80,88},t;inti;printf("\n\nTheoriginaldata:\n");printf("\nNo:%1dName:%s\nscores:",s.sno,s.name);for(i=0;i<3;i++)pr2ntf("%6.2f",s.score[i]);printf("\n");t=fun(s);printf("\nThedataaftermodified:\n");printf("\nNo:%1dName:%s\nscores:”,t.sno,t.name);for(i=0;i<3;i++)printf("%6.2f",t.score[i]);printf("\n");}标准答案:(1)structstudent(2)a.Name(3)a.score[i]知识点解析:填空1:函数定义时,类型标识符指明了本函数的类型,函数的类型实际上是函数返回值的类型。本题中,用结构类型定义函数类型。填空2和填空3:此处考查结构体变量成员的表示方法,a.name和a.score[i]分别表示学生的姓名和成绩。二、简单应用题(本题共1题,每题1.0分,共1分。)2、下列给定程序的功能是:读入一个英文文本行,将其中每个单词的第一个字母改成大写,然后输出此文本行(这里”单词”是指由空格隔开的字符串)。例如,若输入”Iamastudenttotaketheexamination”,则应输出”IAmAStudentToTakeTheExamination”。请改正程序中的错误,使程序能得出正确的结果。注意:部分源程序在文件MODIl.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include#include#include#include#include#include/*********found*********/voidupfst(charP){intk=0;for(;*p;p++)if(k){if(*p==’’)k=0;)else{if(*p!=’’){k=1;*p=toupper(*p);}}}voidmain(){charchrstr[81];System("CLS");printf("\nPleaseenteranEnglishtextline:");gets(chrstr);printf("\nBoforechanging:\n%s",chrstr);upfst(chrstr);printf("\nAfterchanging:\n%s\n",chrstr);}标准答案:voidupfst(char·*p)知识点解析:主函数中fun函数的调用方式说明函数fun的参数应为指针类型。三、综合应用题(本题共1题,每题1.0分,共1分。)3、请编写函数fun,其功能是:移动字符串中的内容,移动的规则是把第1~m个字符,平移到字符串的最后,把第m+1到最后的字符移到字符串的前部。例如,字符串中原有的内容为”ABCDEFGHIJK”,m的值为3,移动后,字符串中的内容应该是”DEFGHIJKABC”。注意:部分源程序在文件PROGl.C中。请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include#include#defineN80voidfun(char*w,intm){}voidmain(){FILE*wf;chara[N]="ABCDEFGHIJK",b[N]="ABCDEFGHIJK";intm;printf("Theoriginastring:\n");puts(a);printf("\n\nEnterm:");scanf("%d",&m);fun(a,m);printf("\nThestringaftermoving:\n");puts(a);printf("\n\n");/*********found*********/wf=fopen("out.dat","w");fun(b,3);fprintf(wf,"%s",b);fclose(wf);/*********found*********/}标准答案:voidfun(char*w,intm){inti,j;chart;for(i=1;i<=m;i++)/*进行m次的循环左移木/(t=w[0];for(j=1;w[j]!=’\0’;j++)/*从第2个字符开始以后的每个字符都依次前移一个字符*/w[j一1]=w[j];w[j一1]=t;/*将第1个字符放到最后一个字符中*/}}知识点解析:本题应采用“循环左移”的算法,多层循环用于控制移动的字符的个数,即需进行多少次循环,内嵌循环的作用是将从第2个字符以后的每个字符依次前移一个位置,最后将第1个字符放到最后一个字符中。国家二级C++机试(操作题)模拟试卷第8套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modi1.cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,并使程序输出的结果为:Maxis7提示:max()函数实现找出两个数中的最大值,并作为函数值返回。注意:错误的语句在//******error******的下面,修改该语句即可。#include<iostream>usingnamespacestd;//********error********intmax(inta,intb){if(a<b){intt=a;a=b;b=t;}returnb;}intmain(){intm=-3;intn=7;//********error********max(-3,n);cout<<"Maxis"<<m<<endl;return0;}标准答案:(1)intmax(int&a,int&b)(2)max(m,n);知识点解析:(1)由审题分析可知max函数采用的是传送引用方式传递参数,因此第1个标识下应该为intmax(int&a,int&b)。(2)调用max时,传递引用时直接使用变量名即可,第2个标识下应改为“max(m,n)”。二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。阅读下列函数说明和代码,完成空出部分的程序。实现函数sort(intA[],intn),用冒泡法将数组排序。提示:所谓冒泡法,就是每次把相邻的两个数交换,较大的数交换到后面。这样下标从0到n.1的数与其后面相邻的数交换,可以把最大的数交换到数组的末端。进行n次下标从0到n-1的交换,则数组则会变成有序的,而且是由大到小的顺序。注意:不能修改程序的其他部分,并且不能删除其他的部分,也不能修改程序的结构。#include<iostream.h>#defineN10voidsort(intA[N],intn){}intmain(){intA[N]={5,7,4,6,10,13,78,-4,9,20};sort(A,10);for(inti=0;i<sizeof(A)/sizeof(int);i++){cout<<A[i]<<’’;}cout<<endl;return0;}标准答案:int=i,j,k,t;for(i=0;i<n-1;i++){for(k=i,j=i+1;j<n;j++)if(A[k]<A[j])//如果前面的比后面的小则需要交换k=j;if(k!=i)//交换{t=A[i];A[i]=A[k];A[k]=t;}}知识点解析:(1)以数组“A[]={3,8,7,6,5,0,1,2,9,4}”为例来说明具体的排序过程,第一次选择:第一步从A[0]-A[9中找最大值max及下标k,max=9,k=8;第二步交换a[0]与最大值a[8]的值;第一次结束后a[0]己存放了最大值,下一次比较就不必再经过它了,而从a[1]开始,如此循环。从例中可以看出10个元素要进行九次比较,n个元素要进行n-1次比较。设置两层循环,外层循环变量i从0到n-1,内层循环变量从i开始到n-1,在内层循环中找最大值,如果最大值的下标k和i不同,则交换,实现选择法排序。(2)在内层循环体内,如果最大值的下标k和i不同,则用一个临时变量记录第i个元素,然后将第k个元素赋值给第i个元素,临时变量值赋给第k个元素,如此完成两个元素的交换。三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开考生文件夹下的源程序文件modi3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。完成以下功能:(1)利用define定义常量TRUE为1,定义常量FALSE为0,请在注释//料料料料l料料料料后添加适当的语句。(2)在类A2前增加A1的声明,请在注释//********1********后添加适当的语句。(3)在类Cl中声明友元函数boolfunc(A2&a,A1&b),请在注释//********2********后添加适当的语句。(4)实现函数boolfunc(A2&obi1,A1&obj2)功能,检查两个类的值都为TRUE,则返回TRUE,请在注释//********3********后添加适当的语句。注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。#include<iostream.h>//********1********#defineFALSE0//********2********classA2{private:boolm_A2;friendboolfunc(A2&obj1,A1&obj2);public:A2(){m_A2=FALSE;}public:voidsetA2(booln){m_A2=n;}};classA1{private:boolm_A1;//********3********public:A1(){m_A1=TRUE;}public:voidsetA1(booln){m_A1=n;}};boolfunc(A2&obj1,A1&obj2){//********4********return}intmain(){A2obj0;A1obj1;cout<<func(obj0,obj1)<<endl;obj0.setA2(TRUE);obj1.setA1(TRUE);cout<<func(obj0,obj1)<<endl;return0;}标准答案:(1)添加语句:#defineTRUE1(2)添加语句:classA1;(3)添加语句:friendboolfunc(A2&obj1,A1&obj2);(4)将“re七urn”补充完整为:returnobj1.m_A2==TRUE&&obj2.m_A1==TRUE;知识点解析:(1)#define命令一般将一个指定的标识符(即宏名)来代表一个字符串,其定义形式一般为:#define宏名(参数表)字符串,因此第1个标识下应添加#defineTRUE1。(2)类声明格式为:“class<类名>;”,故第2个标识下应添加“classA1;”。(3)友元不是本类的成员函数,在它的函数体内部可以通过对象名来访问类的私有成员和保护成员。友元函数是在类声明中由关键字friend修饰的非成员函数,3出添加语句:“friendboolfunc(A2&obj1,A1&obi2);”。(4)函数。func返回变量m_A2和m_A1的逻辑与运算结果,因此第4标识下应改为“returnobi1_mA2==TRUE&&obj2.m_A1==TRUE;”。国家二级C++机试(操作题)模拟试卷第9套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modi1.cpp,但该程序运行有问题,请改正main函数中的错误,使程序的输出结果是:nember=1nember=10nember=100注意:不要改动main函数,不能增行或删行,也不能更改程序的结构,错误的语句在//********error********的下面。#includeClassTestClass{public:TestClass(inti){nember=i;}voidS

温馨提示

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

评论

0/150

提交评论