1、二级 C+分类模拟 111 及答案解析(总分:100.00,做题时间:90 分钟)一、程序改错题(总题数:1,分数:30.00)1.使用 VC6 打开 下的源程序文件 modi1.cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,即使程序在界面输出以下类似内容: 0012FF68 1 0012FF3C 5 0012FF6C 2 0012FF44 4 0012FF70 3 0012FF4C 3 0023FF74 4 0012FF54 2 0012FF78 5 0012FF5C 1 006AFDCC006AFDEF 数据可能因为机器的不同,程序的输出的内容会有差异。只要相差为 4 的连续
2、地址即可。 注意:不要改动 main 函数,不能增行或删行,也不能更改程序的结构,错误的语句在/*error*的下面。 #includeiostream using namespace std; int main() int *p,a5=1,2,3,4,5; double *q,b5=5.0,4.0,3.0,2.0,1.0; int x; p = a; q = b; /*error* for(x=0;x=5;x+) /*error* cout p+x “ “ (p+x) “ “ q+x “ “ (q+x) (分数:30.00)_二、程序填空题(总题数:1,分数:30.00)2.使用 VC6 打
3、开 下的源程序文件 modi2.cpp。阅读下列函数说明和代码,完成空出部分程序。函数fun(intn)的功能是实现对一个整数的加密,具体的加密方法是:一个四位长的整数,每位数字加上 3 然后除以 9 的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换,然后返回得到的密码。 程序输出: 7654 2108 注意不能修改其他部分的代码。 #include iostream.h #include cmath int fun(int n) int main () int i=1234; cout fun(i) endl; i=5678; cout fun(i) (分数:30.00)_三、程
4、序设计题(总题数:1,分数:40.00)3.使用 VC6 打开 下的源程序文件 modi3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整,使得程序输出 21 到屏幕。完成以下功能: (1)增加静态私有变量 m_Number,类型为 int,请在注释/*1*后添加适当的语句。 (2)增加静态变量 m_Number 并初始化为 10,请在注释/*2*后添加适当的语句。 (3)完成静态函数 get 的定义,请在注释/*3*后添加适当的语句。 (4)完成对象 obj 对静态函数 get 的调用,使得输出 21 到屏幕上,请在注释/*4*后添加适当的语句。 注意:增加代码,或者修
5、改代码的位置已经用符号表示出来。请不要修改其他的程序代码。 #includeiostream.h class TestClass /*1* int m_other; public: TestClass(int i) m_Other = i; /*3* return m_Number+ obj-m_Other; ; /*2* int main (), TestClass obj(11); /*4* cout (分数:40.00)_二级 C+分类模拟 111 答案解析(总分:100.00,做题时间:90 分钟)一、程序改错题(总题数:1,分数:30.00)1.使用 VC6 打开 下的源程序文件 m
6、odi1.cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,即使程序在界面输出以下类似内容: 0012FF68 1 0012FF3C 5 0012FF6C 2 0012FF44 4 0012FF70 3 0012FF4C 3 0023FF74 4 0012FF54 2 0012FF78 5 0012FF5C 1 006AFDCC006AFDEF 数据可能因为机器的不同,程序的输出的内容会有差异。只要相差为 4 的连续地址即可。 注意:不要改动 main 函数,不能增行或删行,也不能更改程序的结构,错误的语句在/*error*的下面。 #includeiostream using na
7、mespace std; int main() int *p,a5=1,2,3,4,5; double *q,b5=5.0,4.0,3.0,2.0,1.0; int x; p = a; q = b; /*error* for(x=0;x=5;x+) /*error* cout p+x “ “ (p+x) “ “ q+x “ “ (q+x) (分数:30.00)_正确答案:()解析:(1)for(x=0;x5;x+) (2)cout p+x “ “ *(p+x) ” “ q+x “ “ *(q+x) endl; 答案考生文件夹 解析 本题的程序功能是输出相差为 4 的连续地址。从已定源程序的 m
8、ain 主函数开始入手,依次执行程序中的语句,重点分析、调试标识下的错误语句,输出题目要求的结果。 (1)根据数组 a、b 定义,它们都是 5 个元素,而第 1 个标识下的“for(x=0;x=5;x+)”循环了 6 次,应该是 5 次,所以第 1 个标识下的将其修改为“for(x=0;x5;x+)” (2)第 2 个标识下的 p 变量为指针型变量,p+x 为指向数组中第 x 个元素的地址,这里要输出的是存储单元的内容,所以使用“*”指针元素符,即修改为“cout p+x “ *(p+x) “ q+x “ *(q+x) 二、程序填空题(总题数:1,分数:30.00)2.使用 VC6 打开 下的
9、源程序文件 modi2.cpp。阅读下列函数说明和代码,完成空出部分程序。函数fun(intn)的功能是实现对一个整数的加密,具体的加密方法是:一个四位长的整数,每位数字加上 3 然后除以 9 的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换,然后返回得到的密码。 程序输出: 7654 2108 注意不能修改其他部分的代码。 #include iostream.h #include cmath int fun(int n) int main () int i=1234; cout fun(i) endl; i=5678; cout fun(i) (分数:30.00)_正确答案:()
10、解析:int i,a4,t; a0=n%10;/取整型 n 的第一位数字 a1=n%100/10;/取整型 n 的第 2 位数字 a2=n%1000/100;/取整型 n 的第 3 位数字 a3=n/1000;/取整型 n 的第 4 位数字 for(i=0; i=3; i+)/每位数字加 3,取余 ai+=3; ai%=9; t=a0;/根据加密算法交换 a0=a3; a3=t; t=a1; a1=a2; a2=t; return a3*1000+a2*100+a1* 10+a0; /重组,返回加密数字 答案考生文件夹 解析 (1)该程序功能是实现对一个整数的加密,具体的加密方法是:一个四位长
11、的整数,每位数字加上 3 然后除以 9 的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换,然后返回得到的。 (2)从已给部分源程序的 main 主函数开始入手,核心函数 int fun(int n)中的 n 参数为输入要加密的整数。 (1)首先取得要加密整数的每一位数字,并存入数组。 (2)根据加密算法,首先利用循环实现每位数字加 3,除以 9 取余。 (3)然后根据加密算法进行数字交换,最后重组,返回密码。三、程序设计题(总题数:1,分数:40.00)3.使用 VC6 打开 下的源程序文件 modi3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整,使得程序
12、输出 21 到屏幕。完成以下功能: (1)增加静态私有变量 m_Number,类型为 int,请在注释/*1*后添加适当的语句。 (2)增加静态变量 m_Number 并初始化为 10,请在注释/*2*后添加适当的语句。 (3)完成静态函数 get 的定义,请在注释/*3*后添加适当的语句。 (4)完成对象 obj 对静态函数 get 的调用,使得输出 21 到屏幕上,请在注释/*4*后添加适当的语句。 注意:增加代码,或者修改代码的位置已经用符号表示出来。请不要修改其他的程序代码。 #includeiostream.h class TestClass /*1* int m_other; pu
13、blic: TestClass(int i) m_Other = i; /*3* return m_Number+ obj-m_Other; ; /*2* int main (), TestClass obj(11); /*4* cout (分数:40.00)_正确答案:()解析:(1)添加语句:static int m_Number; (2)添加语句:int Testclass:m_Number=10; (3)添加语句:static int get(Testclass*obj) (4)将“cout endl ;”补充完整为:cout obj.get( 答案考生文件夹 解析 本题中程序的功能是
14、利用 get 函数计算对象成员数值的和。在 VC 环境下打开程序,根据题干给出的几条功能要求,对程序中给出注释下的内容逐个补全或修改。从已定源程序的 main主函数开始入手,可以看出程序通过调用类 TestClass 和 get()成员函数实现各种输出操作。 (1)题目 1 要求“增加静态私有变量 m_Number,类型为 int,”。静态变量的定义格式为:static 类型变量名称,本题只要在类的 private 区域定义 int 型的静态变量 m_Number,即第 1 个标识下添加“static int m_Number;”。 (2)题目 2 要求“增加静态变量 m_Number 并初始
15、化为 10”。第 2 个标识的位置在类 TestClass 的外部,在 C+中,使用“:”作用域运算符声明定义的变量属于哪个类。由题干知道,m_Number 属于类TestClass,根据 C+的作用域运算符,在第 2 个标识下添加“int TestClass:m_Number=10;”。 (3)题目 3 要求“完成静态函数 get 的定义”。根据第三个标识下的“return m_Number+obj-m_Other;”语句知道,get 函数具有形参 obj 指针。obj 调用 m_Other 变量,说明它是 TestClass 类型,并且静态函数的定义只要在其前面声明 static 就可以了,即第 3 个标识下添加“static int get(TestClass*obj)”。 (4)题目 4 要求“完成对象 obj 对静态函数 get 的调用,使得输出 21 到屏幕上”。程序中第 4 个标识下的“cout endl;”语句缺少输出值,题目中要求对象对静态函数 get 的调用,对象对成员函数的调用格式为:对象名.成员函数,即“cout obj.get(&obj)