1年生のセミナー授業でC言語をやっています。先週はprintf関数について少し演習して、今日はscanf関数。ポインタの解説も少しやりました。
一通り説明したところでBMIを計算するプログラムを作ってもらいました。書式指定で%fの説明をしていなかったので整数で計算するようにしてもらいました。ただ、途中経過(cmをmに変換する計算)は小数つきで計算しないとBMIが0になってしまうので、そのあたりに注意して書くように指示しました。
結果、以下のようなプログラムになりました。でも。。。答えがおかしい。。。桁あふれしたようになる。。。しかたがないので整数型のbmi変数を追加して答えが出ましたが。。。
さて、どこがおかしいでしょう?
答えは下です。
いやはやお恥ずかしい話しですが、こういうことを意識するプログラムを最近書いていなかったので、気づくのが遅れました。
void main() { int a, b; scanf("%d", &a); scanf("%d", &b); printf("bmi=%d\n", b/(a/100.0*a/100.0)); }
■正解
void main() { int a, b; scanf("%d", &a); scanf("%d", &b); printf("bmi=%d\n", (int)(b/(a/100.0*a/100.0))); }
要はキャストですね。小数つきの数値を%dで表示したら。。。たしかに溢れますわね。