1、国家二级 C+机试(操作题)模拟试卷 83及答案与解析 一、基本操作题 1 使用 VC6打开考生文件夹下的源程序文件 modil cpp,该程序运行时有错,请改正其中的错误,使得程序正常运行,并使程序输出的结果为: sizeoffstrl)=5 sizeof(str2)=10 sizeof(str3)=1 注意:不要改动 main函数,不能增行或删行,也不能更改程序的结构,错误的语句在 *error*的下面。 (1)不能删除 assert()语句; (2)只能修改后面的数字。 提示: assert()函数如果为假,则会产生一个中断异常。 #include #include void main(
2、) char*strl=”abc”; *error* assert(Sizeof(str1)=3); cout void fun(int n) void main() int n; coutn if(n us ing namespace std; C1ass CPIanet protected: *1* public: CPlanet(double d, int r) distance=d; revolveperiod= r; ; class CEarth: public CPlanet( double c i rcumf erence, public: *2* CEarth(double d
3、, int r) circumference=2*d*3 1416, *3* cout”distance= ”distanceendl? cout”revolution Period=“revolvePeriodendl ; cout”revolution circumference=”circumference endl; ; Void mein() CEarth earth(9300000, 365); earth display(); 国家二级 C+机试(操作题)模拟试卷 83答案与解析 一、基本操作题 1 【正确答案】 (1)assert(Sizeof(strl)=4); (2)ass
4、ert(Sizeof(str2)=10); (3)assert(Sizeof(str3)=1); 【试题解析】 本题的功能是利用 assert()函数,则会产生一个中断异常。从已定源程序的 main主函数开始入手,依次执行程序中的语句,输出题目中要求的输出值。本题在调试的时候并不会产生错误,它的错误是逻辑错误。 解题思路 (1)assert()函数如果为假,则会产生一个中断异常。所以要让它正常执行输出结果,那么 assert()函数就要为真,才不会产生中断异常。 “assen(sizeof(str1)=3); ”语句中 “sizeof(str1)=3”为假,这个会使程序产生异常,不能正常执行。
5、因为 str1的值为 abc但是 它还有一个尾符,所以它的长度应该是 4,而不是 3,所以第 1个标识下修改为 “assert(sizeof(str1)=4); ”0 (2)同 (1), str210说明, str2的空间为 10,第 2个标识下修改为“assert(sizeof(slr2=10); ”。 (3)同 (1), char str3: 23;语句说明 23是字符,占空间为 l,所以修改为“assen(sizeof(str3)=1); ”。 二、简单应用题 2 【正确答案】 int i; for(i=0; in ; i+) 外层循环, 要打印的行数 int j ; f01“(j=0
6、; jni一 1; j+) 循环打印空格 cout; f027(; jn; j+) 循环打印 coutIf“#”; coutendl: 打印每一行的回车 【试题解析】 (1)该程序功能是打印题目中要求的 #字形状。它的解题思路,在不显示 #字地方,用空格占位。 (2)从已给部分源程序的 main主函数开始入手,核心函数 void fun(int n)中的 n参数为输入的要打印的行数。 解题思路 (1)外层循环打印每一行。 (2)内层循环,分为打印空格和打印 #。打印空格由第一个位置到第 n-i-1。打印 #,是由打印完空格开始一直到行结束。 (3)最后在外循环中打印每一行的结束。 三、综合应用
7、题 3 【正确答案】 (1)添加语句: double cRstance; int revolvePeriod; (2)将 “CEarth(double d, int r)”补充完整为: CEarth(double d, int r): CPlanet(d, r) (3)添加 语句: void di splay() 【试题解析】 (1)题目 1要求 “义类 CPlanet的保护数据成员 distance和revolvePeriod,它们分别表示行星距太阳的距离和行星的公转周期。其中,distance为 double型, revolvePefiod为 int型 ”,因此第 1个标识下是添加数据成员
8、 distance和 revolvePeriod的声明,因此第 1个标识下应添加 “double distance;int revolvePeriod; ”。 (2)假定: circumference=2 d 3 1416”,第 2个标识下构造函数 CEarth(double d,int r)完成类成员变量的初始化,在函数体内部完成了 circumference的初始化,而变量 distance和 revolvePeriod并没有初始化,需调用基类的构造函数来初始化这两个变量,因此第 2个标识下应改为 “CEarth(double d, int r): CPlanet(d, r)”。 (3)第 3个标识下完成成员函数 display0的定义,函数 display0的返回值为 void,因此第 3个标识下应添加 “voiddisplay0”。