2016-03-01 50 views
1

程序的目的是計算每個深度處的體積。輸入是半徑和長度,在這個測試案例中它們分別是2.1和5.6。我一直在爲我的音量獲得0,1,2,3和4,但這不是正確的音量,深度/高度是正確的,所以也許有人可以闡明我的方程中出現什麼問題?數學公式不輸出結果我想要

enter image description here

這是計算量的功能

int getVolume(double arrplotptr[][col], double *arr2ptr, char *nameptr) 
{ 
    double vol, h, diam, ctr, rad, len, x; 
    int i, j; 

    rad = arr2ptr[radius]; 
    len = arr2ptr[length]; 
    diam = (rad * 2); 
    ctr = diam/100; 
    h = 0; 

    for (j = 0; j < 100; j++) { 
     h = h + ctr; 
     arrplotptr[0][j] = h; 
    } 
    h = 0; 

    for (i = 0; i < 100; i++) { 
     h = h + ctr; 
     x = (rad - h)/rad; 
     vol = ((rad * rad) * acos(x) - (rad - h) * (sqrt((2 * rad * h) - (h * h)))) * len; 
     arrplotptr[1][i] = vol; 
    } 
} 
+1

爲什麼你使用'CTR =直徑/ 100;'的',而不是點擊率=弧度/ 100;'? – chqrlie

+3

我沒有看到'返回'的函數聲明返回'int'中的表達式。未定義的行爲。 – EOF

+2

你可以把你的代碼變成MWE嗎?即,打印出計算結果的主程序? –

回答

2

我看到你的代碼的幾個問題:

  • 爲什麼使用ctr = diam/100;代替ctr = rad/100;
  • 如果調用者函數依賴於返回值,則不會從getVolume返回值,而是調用未定義的行爲。
  • 您存儲每個切片的音量,但不計算總音量。你沒有發佈那樣的代碼,也許那裏也有問題。
+0

ctr = diam/100給出的圓柱體積達到100%滿。總體積將爲h = 2 * rad的體積。鑑於風格,我猜測返回值應該表示成功,而不是體積。 –

0

至於寫chqrlie,我想你應該改變

ctr = diam/100; 

ctr = rad/100; 

而且,作爲寫EOF,該功能被定義爲 「INT」,但沒有返回值;您應該將其重新定義爲「無效」或返回一個整數值。

我補充說,它似乎沒有必要雙循環:在每次迭代中,您可以計算「h」,「x」,「vol」並保存「arrplotptr」的兩個值。

我建議簡化的功能如下

void getVolume (double arrplotptr[][col], double arr2ptr[]) 
{ 
    double const rad = arr2ptr[radius]; 
    double const len = arr2ptr[length]; 
    double const ctr = rad/100; 

    int  i; 
    double h; 

    for (i = 0, h = ctr ; i < 100 ; ++i, h+=ctr) 
    { 
     arrplotptr[0][i] = h; 
     arrplotptr[1][i] = ((rad * rad) * acos((rad - h)/rad) 
       - (rad - h) * (sqrt((2 * rad * h) - (h * h)))) * len; 
    } 
}