以下のような問題を考えます。
「forを用いて1.0から10.0までの値を0.1刻みで表示するコードを作成する。ループ制御には浮動小数点数を使い、条件式部分はキャストを用いて整数式とせよ。」
このようなコードを書いたら上手く実行できました。
#include<stdio.h> void main(){ double f; for (f = 1.0; (int)f < 10;f+=0.1){ printf("%f ",f); } getchar(); }
ここで疑問があります。for文はfor(1;2;3){4}で1→243→243→243の順に実行されますよね。
このforループは
f=1.0→(中略)→9.90表示→9.90+0.1=10.0にインクリメント→(次のループへ)→(int)f<10の判定(10<10)→10.0表示→10.0+0.1=10.1にインクリメント→(次のループへ)→(int)f<10の判定→条件に合わずループ抜ける
という流れになっていますが、9.90+0.1=10.0にインクリメントした後は(int)fは10になるはずなので(int)f<10の条件をクリアできず10.0を表示出来ないはずです。でも実際には10.0は表示されているので条件はクリアできたことになります。
何が起こっているのかを教えて貰えないでしょうか。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/03/09 15:29
2017/03/09 20:09
2017/03/10 11:43