2013-10-29 240 views
0

我想創建一個exponent函數,它似乎沒有按預期工作。對不起,如果我不明白一些基本的東西,我只是在互聯網上學習點點滴滴。功能不正常?

float x; 
float y; 
float z; 
int h; 
int j; 

float exponent (float a, float b) 
{ 
    float r; 
    while(b > 1) 
    { 
     r = a * a; 
     b = b - 1; 
    } 
    return (r); 
} 

^帶有變量的函數的片段。

cout << "EXPONENT MODE\n\n"; 
cout << "Please enter a number: ";  
cin >> x; system("CLS"); 
cout << "Please enter another number as the exponent for the first: "; 
cin >> y; 
z = exponent(x, y); 
cout << "Calculating the answer, please wait"; 
Sleep(1000); 
cout << "."; 
Sleep(1000); 
cout << "."; 
Sleep(1000); 
cout << "."; 
Sleep(1000); 
cout << "\n\nYour answer is : "; 
cout << r; 
Sleep(5000); 
system("CLS"); 
cout << "Would you like to calculate another set of numbers? (yes = 1, no = 2) : "; 
cin >> h; 
system("CLS"); 

^第I部分要在控制檯上執行。(只是代碼)

基本上,我希望用戶輸入2號,第一(X)作爲基數,所述第二(Y )是指數。程序應該輸入x作爲a和y作爲b並運行該函數。發生了什麼事:輸入1:5,輸入2:3,預期:125,收到:25.我在考慮改變while(b> 0)。如果你們能幫上忙,那就太棒了! (也不要判斷我在system("CLS")的代碼)

+1

你的指數函數將只計算正方形('a * a')。 – congusbongus

+0

...重複。 *相同*正方形。而當你修復它時,你最好在將'r'初始化爲'1.0'。當然,這不會使用分數指數,所以'b = 1.5'就會失敗。 – WhozCraig

+0

我看到了我的數學錯誤。但是如果我輸入5,3不應該輸出爲25 * 25,因爲5 * 5 = 25? –

回答

0

這很簡單,你打印錯誤的變量。

cout << "\n\nYour answer is : "; 
cout << r; 

rexponent本地成員變量。在main範圍的exponent結果實際上是存儲在一個名爲z

z = exponent(x, y); 

的修復只是改變你的答案打印代碼

cout << "\n\nYour answer is : "; 
cout << z; 

爲自己的利益,你可能變想要嘗試給你的變量賦予更多有意義的名字,並且只在實際需要的範圍內聲明它們。我沒有看到你在主要其他地方使用r,你是否試圖在exponentr這個地方訪問?

+0

+1打印錯誤的變量,但除了'b == 2',打印'z'的單個案例不會更準確,因爲函數本身已被破壞。 – WhozCraig

+0

似乎他正在修復指數函數本身,似乎只是糾纏在他自己給出的瘋狂變量名稱的乾草堆上(請參閱編輯答案;) – kfsone

+0

函數返回'r',所以'cout << z;'工作?此外,這些只是我爲var名稱放置字母的基本程序。雖然我看到了數學部分做錯了什麼。 –

-1

我不介意@kfsone在說什麼。 但在循環中r每次都設置爲* a,這不就是爲什麼你得到的是方形而不是指數?我認爲你真正想要做的是:

r=1 
while(... 
    r *= a;// note to accumulate result on r 
    b --; 
+0

'z = exponent(x,y); cout <<「計算答案,請稍候」;'後面跟着點打印,然後是'cout <<「\ n \ n您的回答是:」; cout << r;' 縮寫形式:'z = exponent(...);'...'cout << r'。相當簡單。 – kfsone