練習 [1] 演算とデータ型(2/5)

練習 2(提出プログラム名:p0102a.c)

以下の例のように実行できるプログラムを作りなさい.提出ファイル名は p0102a.c としなさい.
このプログラムでは 1 つの整数 x を読み込み,
(1)x をそのまま表示させる.
(2)x の 108%に該当する実数(double型)を y として表示させる(ただし,表示する桁数の指定は行わない).
(3)x の 99%に該当する整数(int 型,小数点以下切り捨て)を z として表示させる.

【ヒント】
変数 x と z を int 型,y を double 型で用意することになります.
y は 1.08 をかけるだけで簡単に求まります(double 型へのキャストは不要)が,z については注意が必要です.
z = x * 0.99;z =(int)(x * 0.99); で計算させると x*0.99 の部分が double 型扱いになって誤差が生じる可能性があります.そのため「0.99 をかける」のではなく「99 をかけて 100 で割る」方が安全です

  • 【プログラムの実行例】(その1)赤字は実行時にキーボードから入力する内容
1 つの整数を入力してください:10000
x = 10000
y = 10800.000000
z = 9900
  • 【プログラムの実行例】(その2)赤字は実行時にキーボードから入力する内容
1 つの整数を入力してください:12345
x = 12345
y = 13332.600000
z = 12221

【過去にあったミス(実際に減点となり,やり直しを命じられた例)】
上のヒントを見落としている.
 (例1)y を求めるのにわざわざ「y = (double)x * 1.08;」と計算している.
    1.08 という数が double 型なので自動的に x * 1.08 も double 型になり,キャストは不要である.
 (例2)「 z = x * 0.99; 」や「 z = (int)(x * 0.99); 」と計算している.
     Windows 環境の場合,この誤りを犯すと実行例1の結果が z = 9899 になってしまう
■ キャストに際して不要なカッコを書いてしまい,z = 0 になっている.
インデントに不備がある(VSCode 上でインデントを自動で揃える作業をやっていない).


ミスが無いことを確認したら次の問題へ → [ 練習3 (p0103a.c) ]