0

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

max 是一个接受两个 int 参数并返回较大的值的函数。已经声明并初始化了四个 int 变量,population1、population2、population3 和 population4。通过调用 max 编写一个表达式(不是语句!),其值是 population1 、 population2 、 population3 和 population4 中最大的一个。(提示:您需要调用 max 三次,并且需要将其中两次调用的返回值作为参数传递给 max 。记住:编写表达式,而不是语句。)

我理解它的逻辑:

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

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

4

3 回答 3

1

好吧,您似乎了解如何做到这一点,是的,问题似乎要求您不要将返回值分配给新变量。您基本上可以将 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
于 2013-02-01T04:26:45.427 回答
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);

这些都是合法的。当然,赋值只是为了清楚起见,因为赋值是一个语句,而不仅仅是一个表达式。

于 2013-02-01T04:22:54.917 回答
0

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

max(population1, max(...))

你能想出正确的代码...吗?

于 2013-02-01T04:23:55.723 回答