1、国家二级 C+机试(操作题)模拟试卷 441及答案解析(总分:6.00,做题时间:90 分钟)一、基本操作题(总题数:1,分数:2.00)1.使用 VC6打开考生文件夹下的源程序文件 modilcpp,但该程序运行时有错,请改正程序中的错误,使程序输出的结果为: i=5 i=10 i=15 i=20 注意:错误的语句在*error*的下面,修改该语句即可。#includeiostreamhclass CMyClasspublic: templateclass T void func(T x,T y) *error* T i=0; if(x=i) i=i+x; else f i=i+y; cou
2、t“i=“iend1; ;void main() CMyClass t; tfunc(5,0); *error* tfunc(68,(char)1); float i=100; *error* tfunc(i,1); tfunc(5,5);(分数:2.00)_二、简单应用题(总题数:1,分数:2.00)2.使用 VC6打开考生文件夹下的源程序文件 modi2cpp。阅读下列函数说明和代码,补充空出的代码。完成函数 ToUpper(char*des,char*str),该函数实现把 str字符串中小写字符转换成大写字符,并存发在 des中。 例如:str:“aBcdrFGHijK”; 则:des
3、=“ABCDEFGHIJK”: 注意:不能修改程序的其他部分,只能补充 ToUpper()函数。 #include #define MAXLEN 1024 void ToUpper(char* des,char* str) void mein() char destMAXLEN; char *str=“aBcdrFGHijK“; ToUpper(dest,str); cout0,此时 i和 x的和为 5,故屏幕输出 i的值为 i=5;第二次调用 func()函数,传入参数为 char型数据,此时 T表示字符型(char),chari=0,680,故 i为 68,屏幕输出 ASCII码为 68的
4、字符,即 i=D;第三次调用 func()函数,传入整型数据 10和 1,此时 T表示整型(int),输出为 i=15,显然如果 i为一般的局部变量,输出应该是 i=10(100,i=10+0=10),这里 i记忆了第一次调用 func()函数后的值(i=5,105,10+5=15),故 i为静态变量,因此第 1个标识下应改为“smile T i=0:”。 (2)func()函数两个参数类型一致,从输出结果看,第二次调用 func()传入的参数均是 char型的,故第 2个标识下应改为“tfunc(char)68,(char)1);”,(char)68 和(char)1 含义是做强制类型转换,
5、将整型转换成 char型。 (3)第 3个标识下传入参数 1为整型,局部变量 i为 float型,由输出结果可知,第四次调用 func()函数也改变了静态变量 i(static int i)的值,故传入的参数均为整型,因第 3个标识下的局部变量 i(float型)也要强制类型转换,故第 3个标识下应改为“tfunc(int)i,1);”。二、简单应用题(总题数:1,分数:2.00)2.使用 VC6打开考生文件夹下的源程序文件 modi2cpp。阅读下列函数说明和代码,补充空出的代码。完成函数 ToUpper(char*des,char*str),该函数实现把 str字符串中小写字符转换成大写字
6、符,并存发在 des中。 例如:str:“aBcdrFGHijK”; 则:des=“ABCDEFGHIJK”: 注意:不能修改程序的其他部分,只能补充 ToUpper()函数。 #include #define MAXLEN 1024 void ToUpper(char* des,char* str) void mein() char destMAXLEN; char *str=“aBcdrFGHijK“; ToUpper(dest,str); cout=a&stri=z,即该字符比z小,而且比a大,如果满足该条件则在该字符基础上加上(A-a)值转换为大写字母;如果是其他字符的话,无需转换,直
7、接刚该字符放到 des数组中。三、综合应用题(总题数:1,分数:2.00)3.使用 VC6打开考生文件夹下的源程序文件 modi3cpp,其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。 (1)定义类 CPlanet的保护数据成员 distance和 revolvePeriod,它们分别表示行星距太阳的距离和行星的公转周期。其中,distance 为 double型,revolvePeriod 为 int型。请在注释*1*之后添加适当的语句。 (2)定义类 CEarth的构造函数 CEarth(double d,intr),并在其中计算地球绕太阳公转的轨道周长。假定:circum
8、ference=2*d*31416 。 请 在 注 释*2*之后添加适当的语句。 (3)定义类 Earth的成员 display(),用于显示所有信息。包括地球距太阳的距离,地球的公转周期,以及地球绕太阳公转的轨道周长。请在注释*3*之后添加适当的语句。 注意:增加代码,或者修改代码的位置已经用符号表示出来。请不要修改其他的程序代码。#includeiostreamusing namespace std;class CPlanetprotected: *1*public: CPlanet(double d,int r) distance=d; revolvePeriod=r; ; class
9、CEarth:public CPlanet double circumference; public: *2* CEarth(double d,int r) circumference=2*d*31416; ) *3* cout“distance=“distanceend1; cout“revolution Period=“revolvePeriodend1; cout“revolution circumference=“circumferenceend1 ; void main() CEarth earth(9300000,365); earthdisplay(); (分数:2.00)_正确
10、答案:(正确答案:(1)添加语句:double distance;int revolvePeriod; (2)将“CEarth(double d,int r)”补充完整为:CEarth(double d,int r):CPlanet(d,r) (3)添加语句:void display()解析:解析:(1)题目 1要求“义类 CPlanet的保护数据成员 distance和 revolvePeriod,它们分别表示行星距太阳的距离和行星的公转周期。其中,distance 为 double型,revolvePeriod 为 int型”,因此第 1个标识下是添加数据成员 distance和 revo
11、lvePeriod的声明,因此第 1个标识下应添加“double distance;intrevolvePeriod;”。 (2)假定:circumference=2*d*31416”,第 2个标识下构造函数CEarth(double( d int r)完成类成员变量的初始化,在函数体内部完成了 circumference的初始化,而变量 distance和 revolvePeriod并没有初始化,需调用基类的构造函数来初始化这两个变量,因此第 2个标识下应改为“CEarth(double d,intr):CPlanet(d,r)”。 (3)第 3个标识下完成成员函数display()的定义,函数 display()的返回值为 void,因此第 3个标识下应添加“void display()”。