我很抱歉,如果这是非常基本的,但我刚开始在学校编程,我已经全神贯注地寻找解决方案,不幸的是没有任何帮助我。 我有这段代码:
#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=='
。返回'c + b + a;'
完全做什么,当我用逗号替换+运算符时,只输出输出中的第一个值(无论我放置变量的顺序是11),其余的都是0。
请帮忙解决这个问题,我感到难以置信的困难,已经好几个小时了,但仍然没有。
答案 0 :(得分:0)
我假设得到第一个输出,逻辑函数取c和f的值为5和2,并通过a和b的函数运行它。
这是正确的。首先发生的事情相当于调用logic( 5, 2 )
。注意两件事:a)在函数logic
内部,我们有一个printf
将一些输出打印到屏幕上,b)函数logic
返回一个值类型为int
。
这就是int
中第一个int 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).