- ベストアンサー
C言語について
int a, b; b=3; for (a=4; a>=1; a- -){ b=b+a; printf(“a=%d b=%d¥n”,a,b); } return 0; } すみません最初は省いてしまったのですがこのプログラムの a=3 の時の b をどう出すのか教えていただきたいです(~_~;)
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ループを使わない形に変えてみましょう。 int a, b; b=3; a=4; b=b+a; printf(“a=%d b=%d¥n”,a,b); a--; //aは3になる b=b+a; //この計算を行った後のbの値は? printf(“a=%d b=%d¥n”,a,b); a--; //aは2になる b=b+a; printf(“a=%d b=%d¥n”,a,b); a--; //aは1になる b=b+a; printf(“a=%d b=%d¥n”,a,b); a--; return 0; } ここから、aとbに関わる部分だけ抜き出しましょう。 int a, b; b=3; a=4; b=b+a; //bは3+4で7になる a--; //aは3になる b=b+a; //bは7+3で10になる と、このように「分解して処理される順に並べ直し」して「実行順に値の変化を追いかける」と、それぞれの時点で、各変数がどういう値になっているか出す事ができます。
その他の回答 (2)
- redslove10
- ベストアンサー率41% (397/968)
質問の意図がよく分かりませんが、このプログラムがmain()関数の中身だとして、コンパイルして実行すると a=4 b=7 a=3 b=10 と出力されませんか?
- asciiz
- ベストアンサー率70% (6803/9674)
このプログラムが動いていないとすれば、それは for文 3番目パラメータの「a- -」が原因だと思います。 単項デクリメント演算子は「--」です。2つのマイナスの間に空白を入れてはいけません。 今書かれている「a- -」を言語側から解釈してみると、空白が入っていることにより「a 引く マイナス(0)」という意味になってしまい、aが変化していないことでしょう。 その結果、aが4のまま無限ループしてしまっていると思います。 3番目パラメータを「a--」にするか、「a=a-1」と書くと、きちんとaが1まで減ってループ終了できるでしょう。 その途中で、a=3の時の表示も出るでしょう。