2013-10-18 62 views
0

我在函數中遇到了一些麻煩,當我回顧我的代碼時,我記得我不太確定我是否正確地翻譯了這個數學公式。這是將此數學公式轉換爲c函數的正確方法嗎?

注意:如果參數x和y不在區間[1,20]中,則該函數應返回-1。

enter image description here

這是我該函數代碼:

double irrigationExposure(int x, int y) { 
    double denominator, fraction, waterexp, wexp; 

    if (x >= 1 && x <= 20 && y >= 1 && y <= 20) { 
     denominator = (1 + (abs(x - y)))* (1.0); 
     fraction = ((IRRIEXPONUM)/(denominator)); 

     waterexp = (fraction) + (2); 

     if (waterexp <= 10) { 
     wexp = waterexp; 
     } 

     else { 
     wexp = 2.0; 
     } 
    } 

    else { 
     wexp = -1.0; 
    } 

    return wexp; 
} 
+0

許多事情有點奇怪(例如,爲什麼在分母中乘以1?爲什麼這麼多括號?)但是一個特殊問題 - IRRIEXPONUM從哪裏來? – Steve314

+0

IRRIEXPONUM將是我在此之前聲明的一個常量,因此在這種情況下它將爲10。我在分母中乘以1,因爲整數除以整數將給我一個整數值BUT,如果你看看函數聲明,我想要一個double作爲返回值。所以這就是爲什麼我在分母中乘以1.0,使它變成雙重值的原因。 – Karen

+0

是的,我在評論之前就明白了,但那不是重點。如果我看不到它,我不知道你的代碼是否正確,僅僅因爲你乘以1.0的原因並不意味着你以一種清晰可讀的方式實現了你的目標。乘以一表明你打算乘以1,而演員表明你打算演員。 – Steve314

回答

3

考慮到你想要的最大值爲10,然後

if (waterexp <= 10) { 
    wexp = waterexp; 
    } 

    else { 
    wexp = 2.0; 
    } 
} 

應該

if (waterexp <= 10) { 
    wexp = waterexp; 
    } 

    else { 
    wexp = 10.0; 
    } 
} 

否則,如果waterexp > 10你的答案是2,而不是10.

+0

其實我完全不會這麼做。如果曝光值不能高於10,那麼這是對該功能的誤用。我不希望應用程序只是靜靜地將我認爲提供的值替換爲可用於計算的值。更好的失敗與某種錯誤。 –

+0

因此,當waterexp大於10時,我必須在第一個if語句後加上另一個if語句嗎?我認爲當waterexp大於10時,其他語句是爲了?在這種情況下,Lasse V. Karlsen將如何編寫滿足上述公式的函數? – Karen

+0

@Karen不,你不需要另一個'if'語句,你已經覆蓋的'else'覆蓋了'waterexp> 10'的情況,它只是返回在你寫的函數中設置了錯誤的值。 – imp25

相關問題