如果这是非常初级的,我很抱歉,但我刚刚开始在学校编程,我已经寻找了所有的解决方案,不幸的是没有什么能帮助我。我有这段代码:
#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 %.2fn", 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=='
。返回'c + b + a;'
究竟做什么,当我用逗号替换+运算符时,只有输出中的第一个值(无论我放置变量的顺序如何,都是11)出现,其余的都是0。
请帮助这个,我难以置信的难住了,已经在它几个小时,仍然没有。
我假设要得到第一个输出,逻辑函数对c和f取5和2的值,并将其运行到a和b的函数中。
正确。首先发生的事情相当于调用logic( 5, 2 )
。注意两件事:a)在函数logic
中,我们有一个printf
,它向屏幕输出一些输出,b)函数logic
返回类型为int
的值。这就是int logic(int a, int b)
中的第一个int
所表示的。
现在让我们看看原来的调用:
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).