在表达式中多次调用表达式

时间:2013-02-01 04:20:42

标签: c

我是学生,是C的新手。我的作业的一个问题如下:

  

max是一个接受两个int参数并返回的函数   更大的价值。四个int变量,population1,   人口2,人口3和人口4已经存在   声明并初始化。写一个表达式(不是声明!)   其价值是人口1中最大的,人口2,   通过调用max来实现population3和population4。 (提示:你需要   要调用最多三次,您需要传递返回值   其中两个调用作为max的参数。记住:写一个   表达,而不是陈述。)

我理解它的逻辑:

使用前两个变量调用函数max,函数将返回两者中的较大者,然后获取该值(以某种方式传递它而不分配给第五个声明的变量)并将其与第三个变量的值进行比较。取第二个配对中较大的一个(再次传递它而没有新变量的好处 - 记住它是一个表达式,而不是一个声明)并将其与第四个值进行比较。但是我无法编写正确的语法。

另外,要了解这是一个100级的课程。因此,对于这个特定问题,不会接受任何更高级别的内容。没有库#include(d)。

3 个答案:

答案 0 :(得分:1)

嗯,你似乎明白该怎么做,是的,问题似乎是要求你不要将返回的值分配给新的varibles。您基本上可以将max()作为参数放入另一个max(),并且内部max()的返回将是外部max()参数的int。 由于c是严格的,除非函数的返回类型与参数相同(在这种情况下,两者都是int,所以没关系),它将无法编译。

max(2, max(3, 4)); // inner returns 4, which puts 4 into the outer max, and compares 2 to 4

答案 1 :(得分:0)

一个函数返回一些不同的东西(void)可以在表达式中自由使用。表达式是递归定义的,因为它是由子表达式构成的,直到到达终端符号(作为常量或函数调用)。

因此理解语法没什么奇怪的,对max的调用在语义上等同于数字常量。

int x = 5;
int y = max(5,10);
int z = 5 + 10;
int k = max(5,10) + 3;
int j = max(3 + 2, 8);

这些都是合法的。当然,赋值只是为了清晰,因为赋值是一个陈述,而不仅仅是表达式。

答案 2 :(得分:0)

可以嵌套函数调用。这是一个提示:

max(population1, max(...))

您能为...找到正确的代码吗?