Как разделить все элементы в массиве на одно и то же значение?

#arrays #c #function

#массивы #c #функция

Вопрос:

Вот мой код. По какой-то причине я не получаю правильный вывод, который я не могу понять. Вот результат, который я получил:

 Before:
5.500000 6.500000 7.750000 8.000000 9.600000 10.360000
After:
1.100000 0.260000 0.062000 0.012800 0.003072 0.000663
  
 #include <stdio.h>
#include <stdlib.h>

void divby5(float arr[], int size)
{
for (size = 0; size < 6; size  )
    arr[size] /= 5;
}

int main()
{
    float array[] = {5.5, 6.5, 7.75, 8, 9.6, 10.36};
    int i;
    printf("Before:n");
    for (i = 0; i < 6; i  ) {
        printf("%f ", array[i]); 
    }
    printf("n");
    printf("After:n");
    for (i = 0; i < 6; i  ) {
        divby5(array, 6);
        printf("%f ", array[i]);

    }
    return 0;
}
  

Комментарии:

1.вы, вероятно, хотите переместить divby5(array, 6); перед for

Ответ №1:

Вот ваша непосредственная проблема:

 for (i = 0; i < 6; i  ) {
    divby5(array, 6);
    printf("%f ", array[i]);
}
  

По сути, происходит то, что вы делите каждый элемент на 5, затем печатаете первый элемент, затем снова делите каждый элемент на 5, затем печатаете второй элемент, затем снова делите каждый элемент на 5 и т.д.

Вытащите divby5 вызов из цикла:

 divby5(array, 6);
for (i = 0; i < 6; i  )
  printf( "%f ", array[i] );
  

Редактировать

И это проблема:

 void divby5(float arr[], int size)
{
  for (size = 0; size < 6; size  )
     arr[size] /= 5;
}
  

size Параметр сообщает вам, сколько элементов в массиве — вы отбрасываете эту информацию и предполагаете, что когда-либо будет только 6 элементов. Вместо этого вы должны записать это как

 void divby5(float arr[], int size)
{
  for (int i = 0; i < size; i   )
    arr[i] /= 5;
}
  

Таким образом, эта функция может использоваться для массивов любого размера, а не только для 6.

Ответ №2:

Удалите divby5(array, 6); из цикла for и вставьте его перед циклом for.
В этом случае все числа делятся на n раз.