首页 > 试题广场 >

代码运行结果是?

[单选题]
#include<iostream>
#include<string>
using namespace std;
class A
{
    friend long fun(A s)
    {
        if (s.x<3) {
            return 1;
        }
        return s.x+fun(A(s.x - 1));
    }
public:
    A(long a)
    {
        x = a--;
    }
private:
    long x;
};
int main()
{
    int sum=0;
    for( int i=0; i<5; i++) {
        sum += fun(A(i));
    }
    cout<<sum;
}
代码运行结果是?
  • 21
  • 15
  • 9
  • 36
x=a--相当于 x=a;a=a--; x>3  ,s.x+fun(A(s.x - 1))递归。所以算得结果15.

发表于 2015-10-16 19:28:57 回复(1)
这道题主要注意第16行的代码,x=a--;等价于x=a;a--;两行代码,也就是说a--并不会对结果产生影响。
        i:  0  1  2  3  4
   A(i):  0  1  2  3  4
f(A(i)):  1  1  1  4  8
  sum:  1  2  3  7  15
发表于 2016-06-26 19:51:38 回复(6)
        i:  0  1  2  3  4
f(A(i)):  1  1  1  4  8 = 15
发表于 2015-10-17 12:20:50 回复(1)
忽略了x=a--;   等价于x=a; a--; 因此a--对x的值没有影响
发表于 2019-08-26 15:40:14 回复(0)

代码的详细执行过程如下:

  1. 引入iostream和string头文件,并使用命名空间std。
  2. 定义了一个类A,包括私有成员变量x和一个构造函数A(long a)。构造函数初始化x为a减去1。
  3. 定义了一个友元函数long fun(A s),该函数接受一个A类型的参数s。
  4. 在fun(A s)函数中,首先判断s.x是否小于3,如果是,则返回1。否则,返回s.x加上递归调用fun(A(s.x - 1))的结果。
  5. 在主函数main中,定义了一个整型变量sum并初始化为0。
  6. 使用for循环,循环5次,变量i的取值范围是0到4。
  7. 在每次循环中,调用fun(A(i)),创建一个A对象并传入i作为参数。fun(A(i))的返回值被累加到sum中。
  8. 循环结束后,输出sum的值。

具体执行过程如下:

  1. 第一次循环,i为0。创建一个A对象并传入0作为参数,构造函数将x初始化为-1。调用fun(A(0)),由于0小于3,返回1。sum累加1。
  2. 第二次循环,i为1。创建一个A对象并传入1作为参数,构造函数将x初始化为0。调用fun(A(1)),由于1小于3,返回1。sum累加1。
  3. 第三次循环,i为2。创建一个A对象并传入2作为参数,构造函数将x初始化为1。调用fun(A(2)),由于2小于3,返回1。sum累加1。
  4. 第四次循环,i为3。创建一个A对象并传入3作为参数,构造函数将x初始化为2。调用fun(A(3)),此时s.x不小于3,进入递归调用fun(A(3-1)),即fun(A(2))。继续递归调用,直到s.x小于3时返回1。sum累加3 + 1 = 4。
  5. 第五次循环,i为4。创建一个A对象并传入4作为参数,构造函数将x初始化为3。调用fun(A(4)),此时s.x不小于3,进入递归调用fun(A(4-1)),即fun(A(3))。继续递归调用,直到s.x小于3时返回1。sum累加6 + 1 = 7。
  6. 循环结束后,输出sum的值为15。
发表于 2023-10-30 16:07:54 回复(0)
<p>X=--a 这个相当于x=a,a--; x=++a 相当于 a=a+1,x=a; 运算符在前面的时候,寄存器会将变量的数据先存入,在进行运算;运算符在后,寄存器会进行运算,在存入。</p><p><br></p>
发表于 2020-09-26 01:46:50 回复(0)
<p>A点</p>
发表于 2020-06-15 12:07:26 回复(0)
先赋值,再后减,减的是形参,对x不再有影响
发表于 2019-10-30 00:12:07 回复(0)

s.x是什么

发表于 2019-05-16 23:13:20 回复(1)

  这道题主要注意第16行的代码,x=a--;等价于x=a;a--;两行代码,也就是说a--并不会对结果产生影响。 

          i:  0  1  2  3  4 

     A(i):  0  1  2  3  4 

  f(A(i)):  1  1  1  4  8 

    sum:  1  2  3  7  15 

发表于 2018-12-18 00:07:35 回复(0)
发表于 2018-07-09 10:33:24 回复(0)
可以想象a--先入栈,x=a再入栈;出栈执行。
发表于 2017-09-03 11:52:28 回复(0)
 if(s.x<3) {
            return1;
        }
        returns.x+fun(A(s.x - 1));
ruturn即是函数的结束,若if(1)则执行return1;程序结束。
若if(0)则继续执行下一步returns.x+fun(A(s.x - 1));
发表于 2017-06-24 21:22:20 回复(0)
B
发表于 2015-11-27 13:32:29 回复(0)