web-dev-qa-db-ja.com

なぜ((i <= 9)&& square == pow(i、2)){cout << i << square; i ++;思い通りにプリントアウト?

#include <iostream>
#include <cmath>
using namespace std;
int main() {

int i = 0;
int square = 0;

// Write a while loop here:

while ((i <= 9) && square == pow(i, 2)) {
    cout << i << square;
    i++;


}
}

  //Why is this not printing out 
/* 0   0
   1   1
   2   4
   3   9
   4   16
   5   25
   6   36
   7   49
   8   64
   9   81
          */

/ このwhileループがこの数列の出力に失敗する理由について誰かが私に完全に説明できますか?.
数字のリストの代わりに00だけが出力される理由がわかりません。このwhileループが正しく機能しない理由を誰かに説明してもらえますか?
/

4
Juan

その理由は、各反復で "square"値を更新せず、常に0に等しいためです。したがって、square = 0およびpow(i、2)= 1であるため、whileループはすぐにi = 1で終了します。 square == pow(i,2)条件は、右側の値を二乗変数に割り当てないことに注意してください。比較するだけです。あなたの望ましい出力から、私はあなたがこのようなものを望むか​​もしれないことを理解しています:

i = 0;
while (i <= 9) {
    cout << i << "     " << pow(i, 2);
    i++;
}
1

次のようにしてください。

// For version
double square;

for (int i = 0 ; i <= 9 ; i++) {
    square = pow(i, 2);
    cout << i <<" "<< square <<"\n";
}
//While version
double square;
int i = 0;

while (i <= 9) {
    square = pow(i, 2);
    cout << i <<" "<< square <<"\n";
    i++;
}

powdoubleで回答を返します。

double squareと書いたのは、一部の数値では、整数変数に割り当てたときに、その平方が切り捨てられる/四捨五入される場合があるためです。 。詳細は この質問 を参照してください。

1