0

指数関数を作成しようとしていますが、期待どおりに動作しないようです。基本的なことを理解していない場合は申し訳ありません。インターネットから少しずつ学んでいるだけです。

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");

^コンソールで実行したい部分(コードだけ)

基本的に、ユーザーに 2 つの数値を入力してもらいます。最初の (x) は基数、2 番目の (y) は指数です。プログラムは x を a として、y を b として入力し、関数を実行する必要があります。何が起こったか: 入力 1: 5、入力 2: 3、予期: 125、受信: 25。while を (b > 0) に変更することを考えています。あなたたちがそれを助けることができれば、それは素晴らしいことです!. system("CLS")(また、コードで私を判断しないでください)

4

2 に答える 2

0

かなり単純です。間違った変数を出力しています。

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

rのローカルメンバー変数ですexponent。のスコープではmain、 の結果exponentは実際には という変数に格納されていましたz

z = exponent(x, y); 

修正は、回答印刷コードを次のように変更するだけです

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

自分の利益のために、変数にもっと意味のある名前を付けて、実際に必要なスコープでのみ変数を宣言することをお勧めします。main の他の場所で使用しているとは思いませんが、そこでもアクセスできるようにrするためにグローバルにしましたか?rexponent

于 2013-10-29T05:40:04.843 に答える
-1

@kfsoneが何について話しているのか理解できません。しかし、ループでは r は毎回 a*a として設定されています。これが指数ではなく二乗を取得している理由ではありませんか? あなたが本当にやりたいことはこれだと思います:

 r=1
 while( ...
    r *= a;// note to accumulate result on r
    b --;
于 2013-10-29T05:50:30.467 に答える