使用VC6打开考生文件夹下的工程test40_1,此工程包含一个源程序文件test40_1.cpp,但该程序运行有问题,请改正函数中的错误,使该程序的输出结果为:
The first result is 5
The second result is 2
The third result is 2
The fourth result is 6
源程序文件test40_1.cpp清单如下:
#include <iostream.h>
int subtraction (int a, int b)
int r;
r=a-b;
/***************** found ************************/
return &r;
int main ()
int x=5, y=3, z;
z = subtraction (7,2);
cout << "The first result is "<< z << ’\n’;
cout << "The second result is "<< subtraction(7,subtraction (7,2)) << ’\n’;
/**************** found *************************/
cout << "The third result is "<< subtraction (&x,&y) << ’\n’;
/***************** found ************************/
z= 4 + *subtraction (x,y);
cout << "The fourth result is "<< z << ’\n’;
return 0;
参考答案:
(A) 错误;return &r;
正确:retutn r;
(B) 错误:cout<<"The third result is"<<subtraction(&x,&y)<<’\n’;
正确:cout<<"The third result is"<<subtraction(x,y)<<’\n’;
(C) 错误:z=D+*subtraction(x,y);
正确:z=D+subtraction(x,y);
解析:
(1)主要考查考生对于函数的返回值类型的理解,题目中函数的定义是int型的,所以应该返回一个该类型的参数,这里的错误就在于它返回了一个int型参数的地址,如果把函数返回值定义成int型的指针,那么这种返回方式就正确了:
(2)主要考查考生是否会使用已经定义好参数类型和个数的函数,题目中的函数subtraction()已经定义好了,是两个int型的参数,但是这里错误的调用了两个参数的地址,使得本来是传值调用变成了传址调用,所以会报错,传值调用是把参数的数值复制后传入函数中,不改变原函数中参数的值,而传址调用是把参数在内存中的地址传进函数中,函数对参数的任何作用都会改变原函数中参数的值;
(3)主要考查考生对于函数调用的掌握,函数subtraction()是一个普通函数,调用的时候直接写函数名和适当的参数就可以了。