0

如果这是非常初级的,我深表歉意,但我刚开始在学校编程,我已经到处寻找解决方案,不幸的是,没有什么能帮助我解决这个问题。我有这段代码:

   #define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int logic(int a, int b)
{
    int c = a % b;
    a++;
    b--;
    printf("==%d %d %d==\n", a, b, c);
    return b + a + c;
}

int main()
{
    int a, c;
    float d, f;
    a = 10;
    c = 5;
    f = 2;

    d = logic(a, logic(c, f));
    printf("%d %d %.2f %.2f\n", a, c, d, f);
    return 0;
}

现在的输出是:

'== 6 1 1==
==11 7 2==
10 5 20.00 2.00'

现在的问题是关于上面的逻辑函数,该行是如何'd = logic(a, logic(c, f));'编译的。我假设要获得第一个输出,逻辑函数为 c 和 f 取 5 和 2 的值,并通过 a 和 b 的函数运行它。但我完全不知道为什么下一个输出是'==11 7 2=='. return'c + b + a;'到底做了什么,当我用逗号替换 + 运算符时,只有输出中的第一个值(无论我放置变量的顺序如何,都是 11)出现,其余的都是 0。

请帮助解决这个问题,我非常难过,已经做了几个小时,但仍然一无所获。

4

1 回答 1

0

我假设要获得第一个输出,逻辑函数为 c 和 f 取 5 和 2 的值,并通过 a 和 b 的函数运行它。

那是对的。起初发生的事情相当于调用logic( 5, 2 ). 注意两件事:a)在函数内部,logic我们有一个printf将一些输出打印到屏幕的函数,b)函数logic 返回一个 type 的值int。这就是第一个表示intint logic(int a, int b)

现在让我们看看原来的调用:

d = logic(a, logic(c, f));

这告诉机器我们想要获取函数返回的值logic并存储在变量中d。但是,要调用logic我们需要两个 int 参数。第一个作为变量给出a,但是要找到第二个参数的值,需要首先执行一个函数,这恰好logic在这种情况下。

这与普通数学中的相同:要计算f(g(x)),您必须首先计算g(x)并将结果用作f. 在程序中,你也可以使用另一个变量来存储中间结果,就像int g_result = g(x); f( g_result );这完全等价的一样。

因此,要计算 的结果logic(a, logic(c, f));logic需要运行两次。每次logic执行时,它都会在屏幕上运行printf并在屏幕上产生一些输出。

这就是为什么我们得到两行输出“== ... ==”,每次运行该函数时都有一行logic

如上所述,您可以等效地编写:

int first_result = logic( c, f ); // This call produces the output of "== 6 1 1==" and returns the value 8 (= 6 + 1 + 1) which gets assigned to "first_result"

d = logic( a, first_result ); // This call produces the output of "==11 7 2==" from the function parameters "a" (=10) and "first_result" (=8).
于 2015-10-22T16:24:52.610 回答