1、二级 C+机试-164 及答案解析(总分:100.00,做题时间:90 分钟)一、1改错题(总题数:1,分数:30.00)使用 VC+6.0 打开考生文件夹下的源程序文件 1.cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,即使程序在屏幕输出以下类似内容:0012FF68 1 0012FF3C 50012FF6C 2 0012FF44 40012FF70 3 0012FF4C 30023FF74 4 0012FF54 20012FF78 5 0012FF5C 106AFDCC006AFDEF 数据可能因为机器的不同,程序输出的内容会有差异。只要相差为 4 的连续地址即可。注意:不要
2、改动 main 函数,不能增加或删除行,也不能更改程序的结构,错误的语句在/*error*的下面。试题程序:#includeiostreamusing 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*coutp+x“(p+x)“q+x“(q+x)end1;return 0;(分数:30.00)填空项 1:_填空项 1:_二、2简单应用题(总题数:1,分数:40.00)1.使用 VC+6.0 打开考生文
3、件夹下的源程序文件 2.cpp。阅读下列函数说明和代码,完成空出部分程序。函数 fun(int n)的功能是实现对一个整数的加密,具体的加密方法是一个 4 位长的整数,用每位数字加上 3 然后除以 9 的余数代替该数字,再将第 1 位和第 4 位交换,第 2 位和第 3 位交换,然后返回得到的密码。程序输出结果为18642075注意:不能修改其他部分的代码。试题程序:#includeiostream.h#includecmathint fun(int n)int main()int i=1357;coutfun(i)end1;i=2468;coutfun(i)end1;return 0;(分数
4、:40.00)_三、3综合应用题(总题数:1,分数:30.00)使用 VC+6.0 打开考生文件夹下的源程序文件 3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整,使得程序的输出结果为 21。(1)增加静态私有变量 Num,类型为 int,请在注释 1 后添加适当的语句。(2)增加静态变量 Num 并初始化为 10,请在注释 2 后添加适当的语句。(3)完成静态函数 get 的定义,请在注释 3 后添加适当的语句。(4)完成对象 obj 对静态函数 get 的调用,使得输出结果为 21,请在注释 4 后添加适当的语句。注意:增加或者修改代码的位置已经用符号表示出来,请不
5、要修改其他的程序代码。试题程序:#includeiostream.hclass TC/*1*int Own;public:TC(int i)Own=i;/*2*return Num+objOwn;/*3*int main()TC obj(11);/*4*coutend1;return 0;(分数:30.00)填空项 1:_填空项 1:_填空项 1:_填空项 1:_二级 C+机试-164 答案解析(总分:100.00,做题时间:90 分钟)一、1改错题(总题数:1,分数:30.00)使用 VC+6.0 打开考生文件夹下的源程序文件 1.cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,
6、即使程序在屏幕输出以下类似内容:0012FF68 1 0012FF3C 50012FF6C 2 0012FF44 40012FF70 3 0012FF4C 30023FF74 4 0012FF54 20012FF78 5 0012FF5C 106AFDCC006AFDEF 数据可能因为机器的不同,程序输出的内容会有差异。只要相差为 4 的连续地址即可。注意:不要改动 main 函数,不能增加或删除行,也不能更改程序的结构,错误的语句在/*error*的下面。试题程序:#includeiostreamusing namespace std;int main()int *p,a5=1,2,3,4,
7、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*coutp+x“(p+x)“q+x“(q+x)end1;return 0;(分数:30.00)填空项 1:_ (正确答案:应改为“for(x=0;x5;x+)”。)解析:填空项 1:_ (正确答案:应改为“cout(p+x“*(p+x)“(q+x“*(q+x)end1;”。)解析:解析 本题中根据数组 a、b 的定义,它们都有 5 个元素,而第 1 处的“for(x=0;x=5;x+)”循环了 6 次,应该是 5 次,所以在第 1 处将
8、其修改为“for(x=0;x5;x+)”;第 2 处的 P 变量为指针型变量,p+x 为指向数组中第 x 个元素的地址,这里要输出的是存储单元的内容,所以使用“*”指针元素符,即修改为“coutp+x“*(p+x)“q+x“*(q+x)end1;”。二、2简单应用题(总题数:1,分数:40.00)1.使用 VC+6.0 打开考生文件夹下的源程序文件 2.cpp。阅读下列函数说明和代码,完成空出部分程序。函数 fun(int n)的功能是实现对一个整数的加密,具体的加密方法是一个 4 位长的整数,用每位数字加上 3 然后除以 9 的余数代替该数字,再将第 1 位和第 4 位交换,第 2 位和第
9、3 位交换,然后返回得到的密码。程序输出结果为18642075注意:不能修改其他部分的代码。试题程序:#includeiostream.h#includecmathint fun(int n)int main()int i=1357;coutfun(i)end1;i=2468;coutfun(i)end1;return 0;(分数:40.00)_正确答案:(int i,a4,t;a0=n%10; /取整型 n 的第 1 位数字a1=n%100/10; /取整型 n 的第 2 位数字a2=n%1000/100; /取整型 n 的第 3 位数字a3=n/1000; /取整型 n 的第 4 位数字f
10、or(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; /重组,返回加密数字)解析:解析 本题首先取得要加密整数的每一位数字,并存入数组。根据加密算法,利用循环实现每位数字加 3,再除以 9 取余。根据加密算法进行数字交换,最后重组,返回密码。三、3综合应用题(总题数:1,分数:30.00)使用 VC+6.0 打开考生文件夹下的源程序文件 3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整,使得程序的输出
11、结果为 21。(1)增加静态私有变量 Num,类型为 int,请在注释 1 后添加适当的语句。(2)增加静态变量 Num 并初始化为 10,请在注释 2 后添加适当的语句。(3)完成静态函数 get 的定义,请在注释 3 后添加适当的语句。(4)完成对象 obj 对静态函数 get 的调用,使得输出结果为 21,请在注释 4 后添加适当的语句。注意:增加或者修改代码的位置已经用符号表示出来,请不要修改其他的程序代码。试题程序:#includeiostream.hclass TC/*1*int Own;public:TC(int i)Own=i;/*2*return Num+objOwn;/*3
12、*int main()TC obj(11);/*4*coutend1;return 0;(分数:30.00)填空项 1:_ (正确答案:应添加“static int Num;”。)解析:填空项 1:_ (正确答案:应添加“int TC:Num=10;”。)解析:填空项 1:_ (正确答案:应添加“static int get(TC *obj)”。)解析:填空项 1:_ (正确答案:将“coutend1;”补充完整为“coutobj.get(obj)end1;”。)解析:解析 第 1 处要求“增加静态私有变量 Num,类型为 int,”。静态变量的定义格式为 static 类型变量名称,本题只要
13、在类的 private 区域定义 int 型的静态变量 Num,即在第 1 处添加“static int Num;”。第 2 处要求“增加静态变量 Num 并初始化为 10”。第 2 个标识的位置在类 TC 的外部,在 C+中,使用“:”作用域运算符声明定义的变量属于哪个类。由题干知道,Num 属于类 TC,根据 C+的作用域运算符,在第 2 处添加语句“int TC:Num=10;”。第 3 处要求“完成静态函数 get 的定义”。根据第3 个标识下的“return Num+objOwn;”语句知道,get 函数具有形参 obj 指针。obj 调用 Own 变量,说明它是 TC 类型,并且静态函数的定义只要在其前面声明 static 就可以了,即在第 3 处添加语句“static int get(TC *obj)”。第 4 处要求“完成对象 obj 对静态函数 get 进行调用,使得输出 21 到屏幕上”。程序中第 4 处的“coutend1;”语句缺少输出值,题目中要求对象对静态函数 get 进行调用,对象对成员函数的调用格式为:对象名成员函数,即“coutobj.get(&obj)end1;”。