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

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

サンプルプログラム 2 (sample2.c)p0202.c という別の名前のファイルにコピーしなさい.そして,p0202.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 (p0203.c) ]