代碼片段:移動平均無故障靜態存儲
#include <stdio.h>
int getAverage(int i, int array[]);
int main(void)
{
int array [] = {45, 42, 41, 40, 43, 45, 46, 47, 49, 45}; //not working
static int array [] = {45, 42, 41, 40, 43, 45, 46, 47, 49, 45}; //works fine
int i, average = 0;
for (i = 0; i < sizeof(array)/sizeof(int); i++)
average = getAverage(i, array);
printf("Promedio: %d\n", average);
return 0;
}
int getAverage(int i, int array[])
{
int c = (array[i]+array[i+1])/2;
return c;
}
我的問題是,因爲它給瞭如果我刪除陣列的靜態我的結果不正確。爲什麼會發生?
更新
int main(void)
{
int array [] = {45, 42, 41, 40, 43, 45, 46, 47, 49, 45};
int i, average = 0;
for (i = 0; i < sizeof(array)/sizeof(int) - 1; i++)
average = (1 * array[i]) + (1.0 - 1) * average;
printf("Promedio: %d\n", average);
return 0;
}
我這樣做是與你的陣列上給函數的最後一次通話的界限的訪問出的維基百科
關於您的更新:1)'1'是乘法的標識元素,因此是多餘的。 2)你認爲'(1.0 - 1)會產生什麼? (提示:'int'值'1'被轉換爲'double',即與'1.0'相同的類型)。請在發佈/進一步編輯之前正確測試數學並測試您的代碼。如果你真的迷失了,請看看數學網站;他們可能會幫助你,請事先閱讀tieir FAQ。 – Olaf