#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
раз.