2016-12-03 4 views
-1

глупый вопрос, но мой профессор не отвечает на электронные письма, поэтому я прошу здесь. Сейчас я просматриваю окончательный вариант, и я проходил экзамен по среднему экзамену, чтобы учиться. Теперь это действительно глупо, потому что я получил этот вопрос правильно 2 месяца назад. Но для жизни меня, оглядываясь назад, я не могу понять, почему это ошибка. Мне явно не хватает чего-то глупого, но я не знаю, что это. Пожалуйста помоги.C quiz Error Spotting

Рассмотрите следующую программу. Эта программа компилируется и запускается без указания ошибки, но ее вывод неверен. У него есть ошибка. Какую строку необходимо изменить для того, чтобы программа выдала правильный результат?

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 } 

Редактировать: Я испортил форматирование, но теперь он исправлен. Я сохранил номера строк для ссылки, они были частью вопроса.

+1

'double min = 0.0;' -> 'double min = x [0];' – BLUEPIXY

+0

Поскольку вы хотите, чтобы значение 'min' при инициализации было перезаписано, установите максимальное значение float. Кроме того, установите его в первый элемент 'x'. – limits

ответ

2

Изменение мин до min = 1000000.0; Вместо min = 0,0; (большое количество) Чтобы получить минимальное количество минут, ic наименьшее число в массиве равно 2, вы не сможете его обнаружить, если ths min уже меньше его, но если мин больше, он может takd любое значение dmaller, чем огромное количество в инициализации, которое является желательным.

+0

О, я понимаю !!!!!!!! Derp. Я искал какую-то синтаксическую ошибку, и это была просто клерикальная ошибка. Я чувствую себя глупо. –

+0

Ничего страшного, никто не может упасть в эти крошечные ошибки, не забудьте проголосовать за ответ, если это было бы полезно. –

+1

Инициализация min с большим количеством (Double.MAX_VALUE) в java, например, гарантирует, что любое число по сравнению с этим огромным числом будет меньше, код будет работать нормально без ошибок, и ему не нужно будет запускать итерацию с 1 даже. –

0

Локальная переменная min инициализируется в 0:
double min = 0

Каждое входное значение в n[] является больше чем 0.

Вам нужно будет изменить значение инициализации min для того, чтобы этой функции работать.

Вы опции смотрите ниже:

  1. Вы можете изменить значение инициализации мин, чтобы быть максимальное значение двойной может содержать (в предположении, 64 бит), который является приблизительно: 1,7976931348623157 × 10

    min = 1.7976931331348623157E308;

  2. Или вы можете инициализировать min быть значение x[0] следующим образом:

    min = x[0];

Я бы скорее выбрать вариант 2, поскольку он сравнивает фактические значения из массива и не использует аппроксимацию.

+0

Размер 'double' составляет 80 бит вместо 64 бит. –