簡體   English   中英

試圖制作一個將所有值平方的函數。 在最后一個值上獲取奇數

[英]Trying to make a function which squares all values in an array. Getting strange number on the last value

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窗口我試圖將數組大小減小為5(所以最后一個值為4),但是這也會打印不正確的數字。 我對C很陌生,不明白為什么最后一個值失敗了。

我知道我可以在沒有單獨功能的情況下執行此操作,但是我很想了解為什么它不起作用。

任何幫助將非常感激。 謝謝,丹。

您的代碼中有2個錯誤。 首先是您無法訪問數組。 記憶規則是,對於n元素,索引必須小於n ,因此< 5而不是<= 5 如果要計數到5,則必須聲明

int array[6];

另一個問題是您的代碼將pow(5, 2) 5,2 pow(5, 2)計算為24.99999999,它被截斷為24。數字24在array覆蓋i之后立即移到內存位置; 然后導致array[i]評估為全為零的array[24]

使用array[i] * array[i]而不是pow來確保使用整數完成計算。

編碼

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

超出數組范圍並引入未定義的行為。 請注意, 0..5實際上是6個值,而不是5個值。如果您看到一些“有意義的”輸出,那么好運或好運-這只是未定義行為的結果,它可以是所有東西(包括有時有意義的值)。

您的數組不足以容納所有值。

大小為5的數組的索引范圍為0-4。因此array[5]位於數組的末尾。 讀取或寫入數組末尾會引發未定義的行為

將數組的大小增加到6以適合所需的值。

int array[6];

其他答案顯示了已發布代碼中的缺陷。 如果您的目標是對數組的每個元素求平方,則可以編寫一個對值求平方的函數

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}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM