使用VC6打开考生文件夹下的工程test40_1,此工程包含一个源程序文件test40_1.cpp,但该程序运行有问题,请改正函数中的错误,使该程序的输出结果为: The first result is 5 The second result

admin2010-02-08  28

问题 使用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;
       }

选项

答案(1) 错误;return &r; 正确:retutn r; (2) 错误:cout<<"The third result is"<<subtraction(&x,&y)<<’\n’; 正确:cout<<"The third result is"<<subtraction(x,y)<<’\n’; (3) 错误:z=4+*subtraction(x,y); 正确:z=4+subtraction(x,y);

解析 (1)主要考查考生对于函数的返回值类型的理解,题目中函数的定义是int型的,所以应该返回一个该类型的参数,这里的错误就在于它返回了一个int型参数的地址,如果把函数返回值定义成int型的指针,那么这种返回方式就正确了:
(2)主要考查考生是否会使用已经定义好参数类型和个数的函数,题目中的函数subtraction()已经定义好了,是两个int型的参数,但是这里错误的调用了两个参数的地址,使得本来是传值调用变成了传址调用,所以会报错,传值调用是把参数的数值复制后传入函数中,不改变原函数中参数的值,而传址调用是把参数在内存中的地址传进函数中,函数对参数的任何作用都会改变原函数中参数的值;
(3)主要考查考生对于函数调用的掌握,函数subtraction()是一个普通函数,调用的时候直接写函数名和适当的参数就可以了。
转载请注明原文地址:https://kaotiyun.com/show/C7ID777K
0

最新回复(0)