【问题标题】:Using for statement to find the greatest of four given integers?使用 for 语句查找四个给定整数中的最大值?
【发布时间】:2022-01-02 11:59:03
【问题描述】:
#include <stdio.h>

int max_of_four(int, int, int, int);

int main() {
    int a, b, c, d;
    printf("Enter 4 numbers -");
    scanf("%d %d %d %d", &a, &b, &c, &d);
    int ans = max_of_four(a, b, c, d);
    printf("%d", ans);
    return 0;
}

int max_of_four(int a, int b, int c, int d) {
    int greatest, i = 0;
    int num[4] = { a, b, c, d };
    greatest = num[0];
    while (i >= 3) {
        if (greatest <= num[i]) {
            greatest = num[i];
        }
        i++;
    }
    return greatest;
}

所以我尝试使用 for 循环将每个数字与变量 greatest 进行比较。 但最大整数的答案始终是第一个整数。

【问题讨论】:

  • 非常感谢。我没有看到那个错误。
  • “我没有看到那个错误”:没有立即看到错误是正常的,这是开始调试的标志。使用调试器逐步执行此操作会很快让您意识到您的循环体永远不会被执行。
  • 你的代码里连for循环都没有!?
  • i 的初始值为 0,运行 while 循环的条件是当 i 大于或等于 3 时,因此 while 不会因为条件不满足而被执行。
  • 有什么理由要使用循环吗?简单的方法就是return max(max(a, b), max(c, d))

标签: c for-loop


【解决方案1】:

max_of_four:

while (i &gt;= 3) 永远不会为真,因为您从 i 开始为 0,并且 0 不大于或等于 3。也许您的意思是 while (i &lt;= 3),但您通常会使用 for 而不是编写此循环while:

for (int i = 0; i < 4; i++)
    if (greatest <= num[i]) greatest = num[i];

【讨论】:

  • 更惯用的是for (int I = 1; I &lt; 4; i++)——它明确地使用上限(而不是上限减一),并且避免重新测试数组的元素0。您可以通过将值分配给 greatest 来进一步优化事情,然后只将其他三个值放入数组并测试较小的数组。
【解决方案2】:

问题在于while 循环条件。条件应该是while(i&lt;=3)

int max_of_four(int a,int b ,int c, int d) {

    int greatest,i = 0;
    int num[4] = {a, b, c, d};
    greatest = num[0];
    while(i <= 3) {
        if(greatest <= num[i]) {
            greatest = num[i];
        }
        i++;
    }
    return greatest;
}

【讨论】:

  • 对于您的代码,上限也更自然地表示为while (i &lt; 4),使用显式上限而不是上限减一。我在评论中概述的对当前另一个答案的相同改进也适用于此处。一般来说,当循环只是在一个区域上迭代时,使用for 循环而不是while 循环是一个好主意。
【解决方案3】:

测试while (i &gt;= 3) 不正确,您可能打算改为这样写:

while (i <= 3)

请注意,for 循环更具可读性,因为您可以将 i 的初始化、测试和增量分组在一行中:

for (i = 0; i <= 3; i++) {
    if (greatest <= num[i]) {
        greatest = num[i];
    }
}

另请注意,使用i &lt; 4 而不是i &lt;= 3 更一致,以使数组长度更明显。

此外,您不需要包含 4 个条目的数组:3 个条目就足够了,因为您已经将 greatest 初始化为第一个值。

这是修改后的版本:

int max_of_four(int a, int b, int c, int d) {
    int greatest = a;
    int num[3] = { b, c, d };
    for (int i = 0; i < 3; i++) {
        if (greatest < num[i]) {
            greatest = num[i];
        }
    }
    return greatest;
}

最后,构造一个数组来确定 4 个整数中的最大值有点矫枉过正。这是一个更简单的版本:

int max_of_four(int a, int b, int c, int d) {
    if (a < b) a = b;   // a = max(a, b)
    if (c < d) c = d;   // c = max(c, d)
    if (a < c) a = c;   // a = max(a, c)
    return a;
}

如果您必须使用 for 循环,您可以将 3 个简单的测试包装到一个虚拟的 for 语句中:

int max_of_four(int a, int b, int c, int d) {
    for (;;) {
        if (a < b) a = b;
        if (c < d) c = d;
        if (a < c) a = c;
        return a;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-16
    • 1970-01-01
    相关资源
    最近更新 更多