0

我必须编写一个程序来查找参数列表中五个整数中最小的一个。这是我的代码:

int min5(int a, int b, int c, int d, int e)
{
   int answer;

   if (a < b && a < c && a < d && a < e)
   {
      answer = a;
   }
   else if (b < a && b < c && b < d && b < e)
   {
      answer = b;
   }
   else if (c < a && c < b && c < d && c < e)
   {
      answer = c;
   }
   else if (d < a && d < b && d < c && d < e)
   {
      answer = d;
   }
   else if (e < a && e < b && e < c && e < d)
   {
      answer = e;
   }
   return answer;
}

这是我的测试用例:

void min5_tests(void)
{
   int a, b, c, d, e, result;

   a = 1;
   b = 4;
   c = 2;
   d = 7;

   result = min5(a, b, c, d, e);
   checkit_int(result, 1);
}

int main()
{
   min5_tests();

   return 0;
}

当我运行测试时,它说该值应该是 0 而不是我预期的值 1。我认为我的代码是正确的,但我猜不是。:( 我不确定这是为什么。

4

3 回答 3

1

好吧,你还没有初始化e,所以它将被设置为一个不确定的值,可能为零。

这也相当......我们应该说,不是用于找到最小值的优雅代码(无意冒犯),除了如果所有输入值都相等(所有if语句都不是真的)将返回的统一值之外。您可以通过使用<=而不是解决这个问题,<但使用以下内容会更易读:

int min5 (int a, int b, int c, int d, int e) {
    int answer = a;
    if (b < answer) answer = b;
    if (c < answer) answer = c;
    if (d < answer) answer = d;
    if (e < answer) answer = e;
    return answer;
}
于 2013-05-30T04:02:14.170 回答
1

你不给 ea 价值。尝试设置 e = 10;

于 2013-05-30T04:02:25.977 回答
0

e 未初始化,这也是一个相当不健康的代码。此外,如果最小值由两个或多个变量共享,您的代码可能会出现问题。尝试初始化一个变量的答案,然后将答案的值与其他所有变量进行比较。换句话说,这里没有 else 语句,因为它必须将 answer 与所有 4 个其他变量进行比较,一次一个。

于 2013-05-30T05:45:25.630 回答