![](/img/trans.png)
[英]I want to make a program in C which takes an array as an input and tells which number are perfect squares
[英]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.