確認問題1 ― 代入の順番を追う
以下のプログラムを実行すると、どのような結果が得られるか予測してから答えを選びましょう。
#include<stdio.h>
int main(void){
int a, b;
a = 10;
b = 30;
b = a;
a = 5;
printf("a は %d, b は%d \n", a, b);
return 0;
}
出力結果は?
a は 10, b は 30
a は 5, b は 10
a は 5, b は 30
a は 10, b は 10
解説: 代入を順番に追うと...
① a=10 → a:10
② b=30 → b:30
③ b=a → bにaの値(10)を代入 → b:10(30は上書きされて消える)
④ a=5 → aを5に上書き → a:5
∴ a は 5, b は 10
確認問題2 ― int型に%fを使うとどうなる?
確認問題1と同じプログラムですが、printfの%dを%fに変えています。
int a, b;
a = 10; b = 30; b = a; a = 5;
printf("a は %f, b は%f \n", a, b); // %fに変更!
出力結果は?
a は 5.000000, b は 10.000000
a は 0.000000, b は 0.000000
コンパイルエラー
解説: int型の変数に%f(実数用)を使うと、正しい値は表示されません。
環境によって表示は異なりますが、0.000000や意味不明な数値になります。
int型には%d、double型には%fを使いましょう!
確認問題3 ― double型に%dを使うとどうなる?
double a, b;
a = 3.1; b = 2.6; b = 2.12; a = 4.52;
printf("a は %f, b は%d \n", a, b); // bだけ%d!
出力結果は?
a は 4.520000, b は 2.120000
a は 4.520000, b は 2
a は 4.520000, b は(意味不明な数値)
解説: aは%fで正しく表示(4.520000)されますが、bはdouble型なのに%d(整数用)を指定しているため、正しく表示されません。
環境によっては -488420520 のような意味不明な値が表示されます。
double型の表示には必ず%fを使いましょう。