C测验错误发现

时间:2016-12-03 17:26:45

标签: c

愚蠢的问题,但我的教授没有回复电子邮件,所以我在这里问。 我现在正在审查最后的决定,我正在考试我的期中考试。现在,这真的很愚蠢,因为我在2个月前得到了这个问题。但对于我的生活,现在回过头来看,我无法弄清楚为什么这是一个错误。我显然错过了一些愚蠢的东西,但我不知道它是什么。请帮忙。

考虑以下计划。该程序编译并运行时没有错误指示,但其输出不正确。它有一个错误。必须更改哪一行才能使程序生成正确的输出?

1   #include <stdio.h>
2   /* Find the minimum value in an array of doubles. */
3   double array_min (double x[], int length )
4   {
5       int i;
6       double min = 0.0;
7
8      for (i = 0; i < length; i++)
9      {
10          if (x[i] < min)
11          {
12              min = x[i];
13          }
14      }
15      return min;
16  }
17
18  int main( void )
19  {  
20      double n[] = {12.5, 17.2, 11.4, 8.1};
21      double min;
22  
23      min = array_min (n, 4);
24      printf("The minimum value is %lf\n", min );
25      return 0;
26  }

编辑:我搞砸了格式化,但现在已修复了。我保留了行号以供参考,它们是问题的一部分。

3 个答案:

答案 0 :(得分:2)

将分钟更改为 min = 1000000.0; 而不是min = 0.0; (大量的) 为了轻松获得min,ic中数组中的最小数字是2,如果min已经小于它,你将无法检测到它,但如果min更大,它可以获得比巨大数字更小的任何值。在初始化中是理想的。

答案 1 :(得分:1)

double min = n > 0? x[0] : -1; // '-1' or whatever invalid number

答案 2 :(得分:0)

本地变量min正在初始化为0:
double min = 0

n[]中的每个输入值都更大大于。

您需要更改min的初始化值才能使此功能正常工作。

您有 2 < / strong>选项见下文:

  1. 您可以将min的初始化值更改为double可以容纳的最大值(假设为64位),大约为: 1.7976931348623157×10 308
    min = 1.7976931331348623157E308;

  2. 或者您可以将min初始化为x[0]的值,如下所示:

    min = x[0];
  3. 我会更快选择选项2,因为它是比较数组中的实际值而不是使用近似值。