Попытка создать функцию, которая возводит в квадрат все значения в массиве.Получение странного числа на последнем значении - PullRequest
0 голосов
/ 23 октября 2018
int squaring_function (int *array, int i);

int main()
{
    int array[5];
    int i;
    for(i=0; (i <= 5) ; i++)
    {
        array[i] = i;
        printf("\nArray value %d is %d",i,array[i]);
    }

    for(i=0; (i <= 5) ; i++)
    {
        array[i] = (squaring_function(array, i));
        printf("\nSquared array value %d is %d",i,array[i]);
    }

    return 0;
}

int squaring_function (int *array, int i)
{
    return pow((array[i]),2);
}

Я пытаюсь использовать функцию squaring_function для возведения в квадрат каждого значения по очереди в моем массиве (содержащем целые числа от 0 до 5).Кажется, это работает, однако последнее значение (которое должно быть 5) ^ 2 не подходит как 25. cmd window Я попытался уменьшить размер массива до 5 (поэтому последнее значение равно 4), однако этопечатает неправильный номер также.Я совершенно новичок в C и не понимаю, почему это последнее значение терпит неудачу.

Я знаю, что мог бы сделать это без отдельной функции, однако я бы очень хотел узнать, почему это не работает.

Любая помощь будет высоко ценится.Спасибо, Дэн.

Ответы [ 4 ]

0 голосов
/ 23 октября 2018

Другие ответы показывают недостатки в размещенном коде.Если ваша цель состоит в том, чтобы возвести в квадрат каждый элемент массива, вы можете либо написать функцию, которая возводит в квадрат значение

void square(int *x)
{
    *x *= *x;
}

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

void square_array(int size, int arr[size])
{
    for (int i = 0; i < size; ++i)
    {
        arr[i] *= arr[i];
    }
}
// ... where given an array like
int nums[5] = {1, 2, 3, 4, 5};
// you can call it like this
square_array(5, nums); // -> {1, 4, 9, 16, 25}
0 голосов
/ 23 октября 2018

Ваш массив недостаточно большой, чтобы вместить все значения.

Массив размера 5 имеет индексы от 0 до 4. Так что array[5] находится вне конца массива.Чтение или запись после конца массива вызывает неопределенное поведение .

Увеличьте размер массива до 6, чтобы соответствовать нужным значениям.

int array[6];
0 голосов
/ 23 октября 2018

В вашем коде есть 2 ошибок.Во-первых, вы получаете доступ к массиву за пределами.Правило памяти состоит в том, что для n элементов индексы должны быть меньше n , следовательно, < 5, а не <= 5.И если вы хотите сосчитать до 5, вы должны объявить

int array[6];

Проблема other в том, что ваш код вычисляет pow(5, 2) как 24.99999999, который усекается до 24Число 24 отправилось в ячейку памяти сразу после array перезаписи i;что затем приводит к array[i], в результате чего получается array[24], который оказался равным нулю.

Используйте array[i] * array[i] вместо pow, чтобы обеспечить выполнение вычисления с целыми числами.

0 голосов
/ 23 октября 2018

Код

int array[5];
for(int i=0; (i <= 5) ; i++)

превышает границы массива и вводит неопределенное поведение.Обратите внимание, что 0..5 - это на самом деле 6 значений, а не 5. Если вы видите какой-либо «значимый» вывод, хорошо - удача или неудача - это просто результат неопределенного поведения, которым может быть все (включая иногда значимые значения).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...