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

下载本文档

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

文档简介

国家二级C++机试(操作题)模拟试卷30(共9套)(共26题)国家二级C++机试(操作题)模拟试卷第1套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modil.cpp,但该程序运行时有错,请改正程序中的错误,使程序输出的结果为:1003732注意:错误的语句在∥********error********的下面,修改该语句即可。#include∥********error********voidmain({∥********error********intm=0142;∥********error********intn=0X27;intq=32;cout<标准答案:(1)voidmsin()(2)intm=0144;(3)intn=0×25;或intn=0×25;知识点解析:主函数main()中,定义了三个变量,分别赋初值为八进制、十六进制和十进制数,并利用cout输出。二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。请完成函数fun(char*data),此函数的功能是,找出字符串数组中最小的ASCⅡ值,如果有相同变量,则输出最后一个所在的位置;如果字符串为空,则返回一1;或者不存在时也返回一1。注意:请勿改动主函数main与其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。计算数字如果第一个字母最小,则返回0。依次增加。#includeintfun(char*data){}Voidmsin(){charstr[1024];cout<<“请输入一行英文字符串:\n”;cin.getline(str,1024);cout<<”最小的字母出现在距离头部”<标准答案:intMinPos=0;//初始化最小值位置if(data==NULL)//判断输入字符串是否为空return一1;charMinData=data[0];//设置字符串第一个字符为最小值if(MinData==0)//判断第一个字符是否存在return一1;for(inti=1;data[i]!=0;i++){if(data[i]<=MinData){MinData=data[i];//逐个判断每个字母是否小于标记字符MinPos=i;//最小值位置)}returnMinPos;知识点解析:(1)该程序功能是找出字符串数组中最小的ASCⅡ值。它的解题思路,用最小值变量标记第一个待找字符,把所有待找字符和标记字符逐个进行比较,并标记其当前最小值及其所在位置,从而找出最小值。(2)从己给部分源程序的main主函数开始入手,核心函数intfun(char*data)中的data参数为输入的字符串数组,其中MinPos为最小值位置。三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开考生文件夹下的源程序文件modi3.cpp,其中定义了用于表示人基本信息的类CHumanlnfo,但类CHumanln的定义并不完整。请按要求完成下列操作,将类CHumanInfo的定义补充完成:(1)定义私有数据成员bloodType用于表示血型,血型为char型的数据。请在注释“∥********1********之后添加适当的语句。(2)完成构造函数的定义,要求具有缺省值,缺省值为身高175,体重70,血型A。请在注释“∥********2********之后添加适当的语句。(3)完成类外CHumanlnfo成员函数Setlnfo的定义。请在注释“∥********3********”之后添加适当的语句。(4)在主函数中调用成员函数SetInfo,把对象d2的三个私有数据成员分别设定为身高170,体重64,血型为B。请在注释“∥********4********,,之后添加适当的语句。注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。#includeClassCHumanInfo{private:intheight;intweight;∥********1********public:∥********2********:height(ht),weight(wt),bloodType(bt){};CHumanlnfo(CHumanInfo&hi):height(h1.height),weight(h1.weight),bloodType(h1.bloodType){);intGetHeight(){returnheight;}intGetWeight(){returnwelght;}intGetBloodType(){returnbloodType;}voidSetInfo(intht,intwt,charbt);voidDisplay();};∥********3********{height=ht;weight=wt;bloodType=bt;}voidCHumanInfo::Display(){cout<<“HumanInfo:”;cout<标准答案:(1)添加语句:charbloodType;(2)添加语句:CHumanInfo(intht=175,intwt=70,charbt:’A’)(3)添加语句:voidCHumanInfo::SetInfo(intht,intwt,charbt)(4)添加语句:h2.SetInfo(170,64,’B’);知识点解析:类CHumanlnfo有3个成员变量:用于表示血型的bloodType、表示身高的height和表体重的weight,成员函数GetHeight()返回height值,GetWeight()返回weight值,GetBloodType()返回bllodType值,Setlnfo(intht,intwt,charbt)可改变bloodType、height和weight值,成员函数Display()在屏幕上打印三个成员变量值。国家二级C++机试(操作题)模拟试卷第2套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modi.cpp,该程序运行时有错误,请改正错误,使得程序正常运行,并且要求最后一个catch()必须抛出执行的任何异常。程序通过抛出异常输出:error0ERROR注意:不要改动main函数,不能增行或删行,也不能更改程序的结构,错误的语句在//********error********的下面。#includeintmain(){try{throw("error");}//********error********catch(chars){cout<标准答案:(1)catch(char*s)(2)catch(inti)(3)catch(…)知识点解析:(1)第1个标识前的异常抛出语句为“throw("error");”,其中的类型为字符串。所以对应的异常捕捉语句catch中应该符合这个类型,而程序中给出的语句“catch(chars)”是字符型的,所以第2个标识下的语句修改为“catch(char*s)”。(2)第2个标识前的异常抛出语句为“throw((int)0);”,其中的类型为int。所以对应的异常捕捉语句catch中应该符合这个类型,所以补充catch子句中的类型,否则找不到匹配的catch块,那么系统就会调用一个系统函数,使程序终止运行。即第1个标识下的语句修改为“catch(inti)”。(3)如果在catch子句中没有指定异常信息的类型,那么就用删节号“…”表示它可以捕捉任何类型的异常信息,即修改为“catch(…)”。二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。请完成以下函数:intfactorial(intn):求出n的阶乘,必须使用递归调用。如果n小于1则返回0。注意:不能修改函数的其他部分。#include#includeintfactorial(intn){}voidmain(){cout<标准答案:if(n<1){return0;}elseif(n==1){return1;}else{returnn*factorial(n-1);}知识点解析:(1)先考虑最简单的情况,n为1(或小于1)时返回值应该为1,即factorial(1)=1,这是递归结束条件,如果n大于1则递归调用自己。(2)n>1时,此时递归函数调用自己,即factorial(n)=n*factorial(n-1),此时的函数的返回值是n*factorial(n-1),如此来实现递归调用。三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开考生文件夹下的源程序文件modi3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。完成以下功能:(1)完成构造函数,设置数组元素的个数为0,请在注释//********1********之后添加语句。(2)完成函数AddMember(intn),如果参数n包含在类的数据成员数组中,则返回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(A盯ay[i]==n)或if(n==Atray[i])。(3)DelMember(intn)函数删除指定的元素,由于元素在数组当中的位置未知,因此必须先查找该元素的位置,在该函数的实现过程当中通过for循环来完成,即第一个for循环查找n在数组中的位置。如果n存在于数组中,那么if中的break语句就会执行跳出循环,此时循环变量i的值会小于length,即通过判断i的值是否小于length值可以知道n是否存在数组中,如果存在数组中接下来进行删除操作。即第3个标识下应改为if(i国家二级C++机试(操作题)模拟试卷第3套一、简单应用题(本题共1题,每题1.0分,共1分。)1、请使用菜单命令或:直接用VC6打开考生文件夹下的工程proj2,实现一个自定义的字符串类MyString,重载取下标操作符([]),使类的对象能够通过下标取字符串的某位元素。如果下标越界,则返回第一个元素的值。请在程序中//**********found**********之下一行的横线处填写适当的代码,并删除横线,使程序完整、正确。输出结果为:st1#include2#include3usingnamespacestd;4classMyString5{6private:7char*str;8public:9MyString(char*s)10{11//**********found**********12str=new______;13strcpy(str,s);14}15~MyString()16{17//**********found**********18______;19}20char&operator[](inti);21};22char&MyString::operator[](inti)23{24//**********found**********25if(_____)26returnstr[i];27//**********found**********28return______;29}30intmain()31{32MyStringtest("teststring");33cout<标准答案:(1)char[strlen(s)+1](2)delete[]str(3)i知识点解析:(1)主要考查构造函数中成员变量的赋值、动态内存的分配和字符串长度函数的使用,成员变量str是字符串指针,赋值时使用new[]分配内存空间,为了存放字符串尾部的空字符,需要分配的容量为字符串str长度+1,另外使用strlen获取str的长度。(2)主要考查考生对析构函数定义的掌握和动态内存的释放,MyString类的成员str是在构造函数中使用new[]分配的,所以在析构函数中需要使用delete[]释放。(3)主要考查考生对字符串库函数调用的掌握,使用strlen获取str的长度,判断下标i是否越界。(4)如果下标i越界,根据题意返回第一个元素str[0]。二、综合应用题(本题共1题,每题1.0分,共1分。)2、请使用菜单命令或直接用VC6打开考生文件夹下的工程proj3,其中声明了Date类,它是一个用于表示日期的类。成员函数isLessThan用以比较两个日期的大小:当第一个日期早于第二个日期时,返回true,否则返回false。请补充完整函数isLessThan。在main函数中给出了一组测试数据,此情况下程序的输出应该是:2007-06-21<2007-07-032007-06-21>=2007-06-192007-06-21<2010-01-01注意:只需在函数isLessThan的//********333********和//********666********之间填入若干语句,不要改动程序中的其他内容。1#include"Date.h"2intmain(){3Datedatel(2007,6,21),date2(2007,7,3),date3(2007,6,19),date4(2010,1,1);4datel.show();5datel.isLessThan(date2)?cout<<"<¨:cout<<">=";6date2.show();cout<=";9date3.show();cout<=";12date4.show();cout<3#include4usingnamespacestd;5classDate{6intyear;7intmonth;8intday;9public:10Date(inty,intm,int.d):year11(y),month(m),day(d){}intgetYear()const{returnyear;}12intgetMonth()const{returnmonth;}13intgetDay()const{returnday;}14voidshow(ostream&os:cout);15booloperator=:(Datedate)const{16returnyear==date.year&&month17==date.month&&day==date.day;}18boolisLessThan(Datedate)const;19};20voidwriteToFile(constchar*path);标准答案:1boolless=false:2if(year知识点解析:主要考查考生对成员函数、关系运算符和逻辑运算符的掌握,成员函数isLessThan是将该对象本身与参数date进行比较,返回是否小于的布尔值。为了比较isLessThan的调用对象与date的大小,需要依次比较year、month、day三个整数,由于date的year、month、day都是私有成员,所以不能在islessThan中直接使用date的私有成员,而是应该使用date的共有成员函数来返回这些值,再将本身的成员与返回值比较,同时,为了比较时间大小,应该首先将year进行比较,接着是month,最后是day,并将比较结果暂存布尔变量less中,最后返回。国家二级C++机试(操作题)模拟试卷第4套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modi1.cpp,但该程序运行时有错,请改正程序中的错误,使程序输出的结果为:m=-10n=-10p=0q=-10z=A注意:错误的语句在//******error******的下面,修改该语句即可。#include<iostream.h>voidmain(){doublem=10;floatn=10;boolp=1;intq=10;charz=’a’;m=-m;//******error******n=~n;//******error******p=-p;//******error******q=~q;z=z-32;cout<<"m="<<m<<endl;cout<<"n="<<n<<endl;cout<<"p="<<p<<endl;cout<<"q="<<q<<endl;cout<<"z="<<z<<endl;return;}标准答案:(1)n=-n;(2)p=!p;(3)q=-q;知识点解析:(1)程序中定义了多个变量,并做了一些基本的运算处理。(2)由题目要求的运行结果可知,第1个标识下和第3个标识下是对变量n和q取反,求。个正数的相反数可以通过算数运算符“-”得到,第1个标识下和第3个标识下应分别改为“n=-n;”和“q=-q;”,即只需要通过负号运算就可以实现。(3)从题目要求输出的结果来分析,第2标识下是对逻辑变量p取反,对一个逻辑变量求反应该用取反运算符“!”,第2个标识下应改为“p=!p”。二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。阅读下列函数说明和代码,补充空出的代码。程序的功能是寻找1~500以内的亲和数并显示出来,函数amicableNum(intm,intn)判定两个数是否是亲和数。亲和数的定义为:两个数m和n,如果n的所有因子之和(因子除掉自身)等于m,且m的所有因子等于n,则m、n是互为亲和数。注意:不能修改程序的其他部分,只能补充amicableNum(intm,intn)函数。#include<iostream.h>intamicableNum(intn){intsum=0;for(inti=1;i<n;i++){if(n%i==0){sum+=i;}}returnsum;}boolamicableNum(intm,intn){}voidmain(){cout<<"1~500以内的亲和数有:"<<endl;for(inti=1;i<500;i++){for(intj=i+1;j<500;j++){if(i!=j){if(amicableNum(i,j)==1){cout<<i<<’’<<j<<endl;}}}}return;}标准答案:if(amicableNUm(m)==n&&amicableNum(n)==m)return1;return0;知识点解析:(1)程序中定义了两个amicableNum()函数,由于参数个数不同重载了amicableNum()函数,函数amicableNum(intn)返回n的因子和,而函数amicableNum(intm,intn)则是判断m和n是不是亲和数,两个函数功能并不相同。(2)在amicableNum(intm,intn)函数中,可调用amicableNum(intn)函数求m和n的因子和,然后比较两个因子和,如果两个因子和相同则返回真,否则返回假。三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开考生文件夹下的源程序文件modi3.cpp,其中定义了用于表示矩形的CRect类,但类CRect的定义并不完整。请按要求完成下列操作,将类CRect的定义补充完成。(1)定义私有数据成员lefiPoint、topPoint、rightPoint、bottomPoint,分别用于表示矩形左上角及右下角的点的坐标,它们都是double型的数据。请在注释//********1********之后添加适当的语句。(2)完成默认构造函数CRect的定义,指定缺省实参为0,都是double型的数据。请在注释//********2********之后添加适当的语句。(3)定义函数体为空的析构函数。请在注释//********3********之后添加适当的语句。(4)在main()函数中定义CRect类的实例rect2,并把rectl的值赋给rect2。请在注释//********4********之后添加适当的语句。注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。#include<iostream.h>classCRect{private://********1********public://********2********//********3********voidSetPoints(double,double,double,double);voidSetLeftPoint(doublem){leftPoint=m;}voidSetRightpoint(doublem){rightPoint=m;}voidSetToppoint(doublem){topPoint=m;}voidSetBottomPoint(doublem){bottomPoint=m;}voidDisplay();};CRect::CRect(double1,doublet,doubler,doubleb){leftPoint=1;topPoint=t;rightPoint=r;bottomPoint=b;}voidCRect::SetPoints(double1,doublet,doubler,doubleb){leftPoint=1;topPoint=t;rightPoint=r;bottomPoint=b;}voidCRect::Display(){cout<<"left-toppointis("<<leftPoint<<","<<topPoint<<")"<<’\n’;cout<<"right-bottompointis("<<rightPoint<<","<<bottomPoint(<")"<<’\n’;}voidmain(){CRectrect0;rect0.Display();rect0.SetPoints(20,20.6,30,40);rect0.Display();CRectrectl(0,0,150,150);rectl.SetTopPoint(10.5);rectl.SetLeftPoint(10.5);//********4********rect2.Display();}标准答案:(1)添加语句:doubleleftPoint,topPoint,rightpoint,bottomPoint;(2)添加语句:CRect(doubleleftPoint=0,doubletopPoint=0,doublerightPoint=0,doublebottomPoint=0);(3)添加语句:~CRect(){};(4)添加语句:CRectrect2(rect1);知识点解析:(1)第1个标识下完成私有数据成员lefiPoint、topPoint、rightPoint、bottomPoint的定义,均为double型的变量,故第1个标识下应添加“doubleleftPoint,topPoint,rightPoint,bottomPoint;”。(2)构造函数完成成员变量的初始化,类CRect的默认构造函数并初始化double型私有数据成员leftPoint、topPoint、rightPoint、bottomPoint为0,故第2个标识下应添加“CRect(doublelettPoint=0,doubletopPoint=0,doublerightPoint=0,doublebottomPoint=0);”。(3)析构函数名和类名一致,并在前面加“~”以和构造函数区别,该析构函数体为空,故第3个标识下应添加“~CRect(){};”,虽然该函数体为空,但是“{}”必须保留。(4)主函数中类CRect的对象rect2是通过复制构造函数将rect1的值赋值给它实现初始化的,而rect1的初始化直接调用自定义构造函数,第4个标识下应添加“CRectrect2(rect1);”。国家二级C++机试(操作题)模拟试卷第5套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modi1.cpp,该程序运行时有错,请改正其中的错误,使得程序正常运行,并使程序输出的结果为:sizeof(str1)=5sizeof(str2)=10sizeoffstr3)=1注意:不要改动main函数,不能增行或删行,也不能更改程序的结构,错误的语句在//********error********的下面。(1)不能删除assert()语句;(2)只能修改后面的数字。提示:assert()函数如果为假,则会产生一个中断异常。#include#includeVoidmain(){char*str1="abc";//********error********assert(sizeof(str1)==3);cout<<"sizeof(str1)=5"<标准答案:(1)assert(sizeof(str1)==4);(2)assert(Sizeof(str2)==10);(3)assert(Sizeof(str3)==1);知识点解析:(1)assert()函数如果为假,则会产生一个中断异常。所以要让它正常执行输出结果,那么assert()函数就要为真,才不会产生中断异常。“assen(sizeof(str1)==3);”语句中“sizeof(str1)==3”为假,这个会使程序产生异常,不能正常执行。因为str1的值为abc但是它还有一个尾符,所以它的长度应该是4,而不是3,所以第1个标识下修改为“assert(sizeof(str1)==4);”。(2)同(1),str2[10]说明,str2的空间为10,第2个标识下修改为“assert(sizeof(str2)==10);”。(3)同(1),charstr3=23;语句说明23是字符,占空间为1,所以修改为“assert(sizeof(str3)==1);”。二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。阅读下列函数说明和代码,补充空出的代码。函数IsPalindromes(cha*string)实现的功能是判定给定的字符串是否构成回文字符串,如果是则返回1,否则返回0。如:1234554321或者1234321都认为是回文字符串。如果串为空或一个字母时,均认为是回文字符串。注意:不能修改程序的其他部分,只能补充IsPalindromes()函数。#include#defimeMAXLEN1024boolIsPalindromes(char*string){}Voidmain(){charstr[MAXLEN];cout<<"请输入一行文字"<标准答案:intlen=0:for(;string[len]!=NULL;len++)//获取字符串的长度;len--;//下标从0开始到len-1for(inti=0;i知识点解析:(1)由于字符串的长度是未知的,先利用循环求出字符串的长度,循环变量从0开始,直到数组的结束,string[len]==NUL为循环结束条件,如此便得到了数组的长度len。(2)知道长度后就可以判断对称位置的元素是否相同,比如第一个元素和最后一个元素,第二个元素和倒数第二个元素,如此比较下去直到到了最中间的元素为止。(3)可以利用循环来比较是否对称,设置另一个循环变量i,i从0开始表示从数组的头开始读数,len从数组的尾部开始读数,如果string[i]!=string[len],则跳出循环返回0,如果循环结束还没发现不同则返回1。三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开考生文件夹下的源程序文件modi3.cpp,其中定义了用于表示雇员的Employee类,但类Employee的定义并不完整。请按要求完成下列操作,将类CEmployee的定义补充完成。(1)定义私有数据成员name、street、city、zipcode和age分别用于表示姓名、街道、城市、邮编、年龄,除年龄是整型外其余都是char型的数据。请在注释//********1********之后添加适当的语句。(2)完成默认构造函数CEmployee的定义,使其把参数传递给私有数据成员name、street、city、zipcode和age。请在注释//********2********之后添加适当的语句。(3)完成成员函数alterName(char*newName)的定义。请在注释//********3********之后添加适当的语句。(4)完成成员函数IsEqual(char*ename)的定义,实现当name相等时返回真,否则为假的功能,请在注释//********4********之后添加适当的语句。注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。#include#include#defiReMAXLEN20classCEmployee{private://********1********intage;public:CEmployee(char*newName,char*newstreet,char*newCt,char*newZp,intnewAge);voidalterName(char*newName);Voiddisplay();boolIsEqual(char*ename);};CEmployee::CEmployee(char*newName,char*newstreet,char*newCt,char*newZp,intnewAge){//********2********age=newAge;}voidCEmployee::alterName(char*newName){//********3********}boolCEmployee::IsEqual(char*ename){//********4********}voidCEmployee::display(){cout<<name<<""<<street<<"";cout<<city<<""<<zipcode<<""<标准答案:(1)添加语句:charname[MAXLEN],street[MAXLEN],city[MAXLEN],Zipcode[MAXLEN];(2)添加语句:strcpy(name,newName);strcpy(street,newstreet);strcpy(city,newCt);strcpy(zipcode,newZp);(3)添加语句:strcpy(name,newName);(4)添加语句:returnstrcmp(name,ename)==0;知识点解析:(1)第1个标识下要求补充类CEmployee的私有数据成员name、street、city、zipcode和age的定义,分别用于表示姓名、街道、城市、邮编、年龄,除年龄是整型外其余都是char型的数据,由主函数内的对象数组可知,name、street、city、zipcode均为字符数组,故第1个标识下应添加“charname[MAXLEN],street[MAXLEN],city[MAXLEN],zipcode[MAXLEN];”。(2)构造函数完成成员变量的初始化,这里需要给name、street、city、zipcode赋初值,可利用字符串拷贝函数将参数字符串拷贝到成员变量中,第2个标识下应添加“strcpy(name,newName);strcpy(street,newstreet);strcpy(city,newCt);strcpy(zipcode,newZp);”。(3)函数alterName(char*newName)是改变成员变量name的值,即将参数拷贝给name,可利用字符串拷贝函数strcpy()完成拷贝任务,故第3个标识下应添加“strcpy(name,newName);”。(4)IsEqual(char*ename)~数是比较name成员变量和参数newName是否相同,可使用字符串比较函数strcmp0,第4个标识下应添加“returnstrcmp(name,ename)==0;”。国家二级C++机试(操作题)模拟试卷第6套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modil.cpp,该程序运行时有错误,请改正程序中的错误,使得程序输出:number1=4.8number2=93.6number3=0.9PRODUCT=404.352注意:错误的语句在//******error******的下面。修改该语句即可。其他的语句不能修改。#includeusingnamespacestd;intmain(){doublenumber1=4.8,number2=93.6,number3=0.9;//******error******Droduct=number1*number2*number3;//******error******cout<<"number1="<标准答案:(1)doubleproduct=number1*number2*number3;(2)cout<<"number1:"<二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。阅读下列函数说明和代码,完成空出部分的程序。函数func(intA[NUM],intn)实现的功能是将数组的内容进行一次重新排序。排序的方法是:给定11,则下标为i的数字与下标为n-i的数字交换。从0开始,交换N/2次,则最后的内容为排序后的结果。如果:A[8]={1,2,3,4,5,6,7,8},n=6,则结果:A[8]={7,6,5,4,3,2,1,8}。注意:不能修改其他代码。#include#defineNUM8voidfunc(intA[NUM],intn){}intmain(){intA[NUM]={1,2,3,4,5,6,7,8);func(A,6);for(inti=0;i标准答案:for(inti=0;i知识点解析:(1)用循环来实现该过程,题目要求从0开始,交换N/2次,因此循环变量i的范围从0变化到N/2。(2)下标为0的元素与下标为n的元素交换,下标为1的元素与下标为n-1的元素交换,依此类推,在循环体内,用一个临时变量记录第一个元素,然后将第二个元素赋值给第一个元素,临时变量值赋给第二个元素,如此完成两个元素的交换。三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开考生文件夹下的源程序文件modi3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。完成以下功能:(1)声明类objA1,请在注释//********1********后添加适当的语句。(2)为类objA0增加友元函数func(),请在注释//********2********后添加适当的语句。(3)为类objA1增加友元函数func(),请在注释//********3********后添加适当的语句。(4)函数func()返回objA1对象中的变量和objA0的静态变量的乘积,请在注释//********4********后添加适当的语句。注意:增加代码,或者修改代码的位置已经用符号表示出来。请不要修改其他的程序代码。#include//********1********classobjA0{private:staticintm_A0;//********2********};intobjA0::m_A0=10;classobjA1{private:intm_A1;//********3********public:objA1(inti){m_A1=i;}};intfunc(objA1&obj){//********4********}intmain(){objA1obj0(10);cout<标准答案:(1)添加语句:classobjA1;(2)添加语句:friendintfunc(objA1&obj);(3)添加语句:friendintfunc(objA1&obj);(4)添加语句:returnobj.m_A1*objA0::m__A0;知识点解析:(1)类的声明格式为:“class<类名>;”,因此第1个标识下应添加“classobjA1;”。(2)按照友元的定义格式,友元函数是在类声明中由关键字friend修饰的非成员函数,func函数在类外部给出了具体的实现形式,即“intfunc(objA1&obj)”,因此第2个标识下应添加“friendintfunc(objA1&obj);”,这里参数是obiA1类对象obj。(3)第3个标识下和题目2要求一样,均是声明友元函数,因此第2标识下应添加“friendintfunc(objA1&obj);”。(4)通过参数obj对象可以直接访问obj.m_A1,objA0的静态变量m_A0是所有对象的共享成员,其访问形式为:objA0::m_A0,因此第4个标识下应添加“returnobj.m_A1*objA0::m_A0;”。国家二级C++机试(操作题)模拟试卷第7套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modi1.cpp,但该程序运行时有错,请改正程序中的错误,使程序输出的结果为:Number=8注意:错误的语句在//********error********的下面,修改该语句即可。#includeclassCMyClass{public://********error********void&Get(){return&Number;}VoidSet(intm){Number=m;}voiddisplay(){cout<<"Number="<标准答案:(1)void*Get()(2)添加语句:CMyClasst;(3)P=(int*)t.Get();知识点解析:(1)Get()的返回的是“return&Number;”,即返回Number的地址,主函数中P为整型指针,但是“P=t.Get();”有错误,因为Get()函数返回的不是整型指针,而应该是空指针(void),空指针可强制类型转换成其他类型的指针,第1个标识下应改为“void*Get()”。(2)由于Get()函数返回空指针(void),要使P指向Get()函数的返回值,必须做强制类型转化,即第3个标识下应改为“P=(int*)t.Get():”。(3)变量t可以使用Get()函数,说明t为CMyClass类对象。即第2个标识下应添加对象定义,故第2个标识下添加“CMyclasst;”。二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生牛文件夹下的源程序文件modi2.cpp。阅读下列函数说明和代码。函数num(char*str)实现返回字符串中非数字的个数。例如:abc123abc45返回输出:6将函数num()%b充完整。注意:请勿改动主函数。#includeintnum(char*str){}intmain(){charstr[1024];cout<<"pleaseinputastring:"<标准答案:intnlamber=0:for(inti=0;str[i]!=0;i++)if(str[i]>’9’||str[i]<’0’)//非数字字符number++;returnnumber;知识点解析:(1)利用循环搜索数组str中的元素,循环变量从0开始,直到str[i]=0(到了字符数组的尾),不断地读取str中读取元素。(2)每读到一个元素判断是否是非数字字符,即满足条件“str[i]>’9’‖str[i]<’0’”的字符为非数字字符,非数字字符个数加1,循环结束就得到了非数字字符的个数。三、综合应用题(本题共1题,每题1.0分,共1分。)3、用VC6打开考生文件夹下的源程序文件modi3.cpp,这个程序完成输出到屏幕一些特定的信息,但工程有错误或者不完整,请完成以下功能:(1)初始化mNurn2的值为i,请在注释//********1********后添加适当的语句。(2)补充全局函数fun()使之能够调用类TestClass的成员变量,请在注释//********2********后添加适当的语句。(3)初始化静态变量,请在注释//********3********后添加适当的语句。(4)修改注释//********4********后的语句。使得程序输出以下内容:m_Num1=1m_Num2=2m_Num3=1m_Num1=4m_Num2=2m_Num3=7注意:仅在函数指定位置添加语句,请勿改动主函数main与其他函数中的任何内容。#includeClassTestClass{public://********1********TestClass(inti,intj){mNum1=i;mNum3+=i;}voidPrint(){cout<<"mNum1="<标准答案:(1)添加语句:TestClass(inti,intj):mNum2(j)(2)添加语句:friendvoidfun();(3)添加语句:intTestClass::mNum3=0;(4)将“Num.Add();”补充完整为:Num.Add(5);知识点解析:(1)根据“constintmNum2;”语句知道mNum2为类TestClass中的私有数据,另外,C++定义构造函数的初始化数据成员的方法中可以在原有函数末尾加一个冒号,然后列出参数的初始化表实现,即“TestClass(inti,intj):rnNum2(j)”。(2)在C++中,如果在本类以外的其他地方定义了一个函数,在类体中是用friend对该函数进行声明的,此函数称为本类的友元函数,并且能够调用本类中的成员变量。程序中fun()在类TestClass以外的地方定义的,为了实现其对类TestClass中成员变量的调用,在类TestClass中补全“friendvoidfun();”,即声明fun()为类TestClass的友元函数。(3)在C++中,初始化类中数据成员的格式可以是“<类型>类名class::参数=”,其中<类型>为要初始化参数的类型,“::”为作用域符号,说明参数是class中的参数,所以这里补全“intTestClass::mNum3=0;”。(4)函数fun()中“Num.Add();”语句应该是调用类“TestClass”中的成员函数“voidAdd(inti)”。其定义中存在参数inti,所以注释下修改的语句缺少参数。主函数首先调用“Num.Print();”,即实现题目中输出的前三条语句,而“funn();”语句实现后面三条语句的输出,即“mNum3=7”才是调用Num.Add的输出结果,即“mNum3+=i:”的计算结果。“TestClassNum(1,2);”中将i的值初始化为1,“mNum3”的值在上一次“Num.Print();”调用中为1,如果计算结果为7,那么Add(inti)中i的初始化值为5,即“Num.Add(5);”。国家二级C++机试(操作题)模拟试卷第8套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modi.cpp,该程序运行时有错,请改正其中错误,使得程序正常运行,并使程序输出的结果为:CTest注意:不要改动main函数,不能增行或删行,也不能更改程序的结构,错误的语句在//********error********的下面。1#include2voidmain()3{4//********error********5charc="c";6cout<标准答案:(1)charc=’c’;(2)intb=1024;(3)b+=1024;知识点解析:本题的功能是输出字符c和字符串Test。因为本题程序中不存在复杂的结构,解题思路,从已定源程序的main主函数依次处理错误提示下的语句即可。[解题思路](1)打开modil.cpp,调试程序,显示错误提示为第一标识下“odi1.cpp(5):errorC2440:’initializing’:cannotconvertfrom’char[2]’tto’char’”。变量c的类型为字符型,字符型值应该是用单引号,双引号是字符串型。所以这里修改为“charc=’c’;”。(2)根据第3个标识下的语句知道,b的值加上1024,然后判断b的值是否为2048,所以这里b的类型应该是整型,而不是字符型,所以修改为““int=1024;”。(3)显示第3个标识下的语句“b+=1024;”的错误提示。modil.cpp(10):errorC2018:unknowncharacter’0xa3’,因为语句中的“;”为中文输入法下的输入,并不是英文下的“:”,所以修改为“b+=1024;”。二、简单应用题(本题共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::binary|ios_base::app。注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。1#include2#include3#include4USingnamespacestd;5voidWriteFile(char*S)6{78}9voidfun(char*S)10{1112}13VoidClearFile()14{15ofstreamoutl;16outl.open("modi2.txt");17outl.Close();18}19intmein()20{21ClearFile();22chars[1024];23cout<<"pleaseinputastring:"<标准答案:(1)voidWriteFile(char*S)中的命令语句:1ofStreamoutl;2outl.open("modi2.txt",ios_base::binaryIios—base::app);//打开文件modi23outl<=’A’&&s[i]<=’Z’)//如果是大写字符,转换为小写字符4{5S[i]=s[i]-’A’+’a’;//-s[i]-’A’+’a’等于字符s[i]+32’6}7Elseif(s[i]>=’a’&&s[i]<=’z’)//如果是小写字符,转换为大写字符8{9S[i]=S[i]-’a’+’A’;//S[i]-’a’+’A’’等于字符S[i]-3210}11}12WriteFile(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打开考生文件夹下的源程序文件modi3.cpp。学校教务处要为任课老师开发一个学生管理系统,需求如下:(1)学生的信息是要受到严密保护和限制的,包括姓名、五个英文字符的学号,以及精确到小数点后一位的一科成绩,只有任课老师可以修改,如果学生升学了,比如由本科升到研究生,原来的信息还有效,而只需添加研究生的必要信息,不过现在不必马上实现,但应当有所考虑。(2)学生的所有信息可以查看,但也只有学生自己才有这个权利。(3)学生的信息可以从文件中读取来构造信息库,需要把信息输出到屏幕以便核实,但这需要任课老师来完成。(4)老师能提供所教学生的完整信息列表,同时可按成绩高低排序。(5)为了便于学校评定奖学金,需要单独查找成绩最高的同学(一般不采用把成绩单全部排列后来选取,可能这比较耗费时间,虽然要求不太合理,但要按用户的需求操作,同时需要指出的是,如果成绩最高者有数名,需要一一列出)。(6)由于学校的机器比较老,内存严重不足,每个老师带的学生数不一样,但也不会超过50人。以上功能的程序框架已经形成,考生需要按照需求来逐个实现。(1)请在注释//********1********之后添加适当的语句,以便实现功能需求(1)。(2)请在注释//********2********处添加适当的语句,成绩单排序功能。(3)请在注释//********3********处实现查找成绩最高学生名单。无需修改main()主函数,当得到下面的结果,该系统可能被采用。输入的学生信息:姓名学号成绩周华000178.5李强000298刘星000389贺兰000478周红000576.5赵邦000685高俊000798排序后的学生信息:姓名学号成绩李强000298高俊000798刘星000389赵邦000685周华000178.5贺兰000478周红000576.5查询成绩最高的学生信息:高俊000798李强000298注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。1#include2#5nc]11de3#include4#defineNMAX505C1assTeacher;6C1assStudent7{8public:9Student(char*name="未知",char*number="00000",doublemark=0.0)10{.11intlen=strlen(name);12mname=newchar[1en+1];13strcpy(m—name,name);14strcpy(m_number,number);15mmark=mark;16}17~Student()18{19delete[]mname;20}21voidDisplayMsg()22{23cout<>name;63in>>number;64in>>mark;65m_count++;66m_pstu[i]=newStudent(name,number,mark);67cout<m-mark>m_pstu[index]->m_mark)79index=j;80}81//********2********82if()83{84Student*ps=m_pStu[i];85m_pStu[i]=m_pstu[index];86m_pstu[index]=ps;87}88}89}90voidTeacher::Display()91{92cout<<"姓名\t"<<"学号\t"<<"成绩\t"<DisplayMsg();96}97}98intTeacher::BestScore(Student*pS[])99{100intindex=0;101intcount=1;102//********3********103104for(intJ=1;Jm_mark>m_pStu[index]->m_mark)107{108count=1;109index=j;110ps[count++]=m_pstu[index];111}112elseif(m_pStu[j卜>m_mark==mpStu[index]->mmark)113{114index=j;115pS[count++]=m_pstu[index];116}117}118returncount;119}120voidmain()121{122TeacherTeacher;123Student*pStudent[NMAX];124cout<<"输入的学生信息."<DisplayMsg();134}135}标准答案:(1)添加语句:friendclassrreacher;(2)将“if()”补充完整为:if(index!=j)(3)添加语句:pS[0]=mpStu[0];知识点解析:类Student含有三个成员变量:姓名、五个英文字符的学号和精确到小数点后一位的一科成绩,类Teacher含有Student对象数组的指针Student*m_pStu[NMAX]、m_average和m_count三个成员变量,类Teacher有多个成员函数,完成学生数据输入、排序、查找最好成绩和打印等功能。[解题思路](1)学生的信息受到严密保护和限制,任课老师可以修改学生数据,比如本科升到研究需要修改学号等信息,因此老师类(Teacher)可以访问学生类(Student),故老师类是学生类友元类,故第1个标识下应添加“friendclassTeacher;”。(2)SortScore()成员函数是实现按成绩高低的排序,函数结构是二重循环,采用的是选择法排序,每次在内层循环中寻找成绩最高的元素的下标,如果找到的最高成绩的元素的下标和现在的位置(外层循环变量i+l的值)不同则两者交换,故第2个标识下的判断条件为“if(index!=j)”。(3)BestScore(Student*pS[])实现查找成绩最高学生名单,即利用循环查找数组中的每个元素的成绩值,先假设第一个元素的成绩最高,然后再循环中逐个比较,如果有成绩更高的,那么将更高的成绩保存下来,搜索整个数组就能找到成绩最高的学生,即第3标识下应添加“pS[0]=mpStu[0];”。国家二级C++机试(操作题)模拟试卷第9套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modi.cpp,该程序运行时有错,请改正其中错误,使得程序正常运行,并使程序输出的结果为:cTest注意:不要改动main函数,不能增行或删行,也不能更改程序的结构,错误的语句在∥********error********的下面。#includevoidmain(){∥********error********charC=“C”;cout<标准答案:(1)charc=‘c’;(2)intb=1024;(3)b+=1024;知识点解析:本题的功能是输出字符c和字符串。Test。因为本题程序中不存在复杂的结构,解题思路,从已定源程序的main主函数依次处理错误提示下的语句即可。解题思路(1)打开modil.cpp,调试程序,显示错误提示为第一标识下“odi1.cpp(5):errorC2440:‘initializing’:cannotconveafrom’char[2]‘to’char”。变量c的类型为字符型,字符型值应该是用单引号,双引号是字符串型。所以这里修改为“charc=‘c’:”。(2)根据第3个标识下的语句知道,b的值加上1024,然后判断b的值是否为2048,所以这里b的类型应该是整型,而不是字符型,所以修改为“intb=1024;”。(3)显示第3个标识下的语句“b+=1024;”的错误提示modil.cpp(10):errorC2018:unknowncharacter’0xaY,因为语句中的“;”为中文输入法下的输入,并不是英文下的“;”,所以修改为“b+=1024;”。二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。完成函数fun(char*str,char*s)空出部分。函数fun(char*str,char*s)的功能是:将在字符串str中下标为偶数位置上的字符,紧随其后重复出现一次,放在一个新串S中,S中字

温馨提示

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

评论

0/150

提交评论