課題 [11] ポインタ①(7/9)

問 7(提出プログラム名:ex1107.c)

このプログラム(ex1107.c)をダウンロードし,その中の関数 sub_tax を完成させなさい
ただし,このプログラムの中ではキャストを使ってはいけません.また, double 型を登場させてもいけません

このプログラムは,入力として与えられた(商品の)税込み価格から税抜き価格を算出して出力することを目的としている.その中で関数 sub_tax は,税込み価格が格納された変数の値を税抜き価格へ書き換えるものとする.ただし,ここでの税率は 10% とし,税額に小数部分が出た場合は切り捨てとする.
なお,入力として与えられる税込み価格は 11 以上の整数と仮定してプログラムを作ってよい.

この問題では関数 main の内容は一切書き換えないこと.

【注意】
一見すると元の税込み価格を 1.1 で割るだけ(あるいは 100/110 をかけるだけ)の簡単な問題に思えるかもしれないが,話はそこまで簡単ではない
例えば,税込み価格が 100 円であった場合,1.1 で割ると 90.909… 円となるため,小数点以下を切り捨てて整数にすると 90 円が税抜き価格のように見える.しかしながら,90 円に対する消費税額は 9 円ということになるので合計すると 99 円になってしまい,元の税込み価格に矛盾する.

先に消費税額を求めておいて,それを税込み価格から引くという手順を踏む方が安全である.
(例)税込み価格が 100 円の場合,これに対する消費税額は 100 円 × 10/110 = 9.0909… 円 = 9 円となる.よって,求める税抜き価格は 100 – 9 = 91 円となる.

【注意2】
関数 sub_tax戻り値を持たないので戻り値型は void と宣言してある.
これを変更してはいけませんし,戻り値を持たせても(return を書いても)いけません.

【ヒント】
仮に x が税込み価格であった場合,x*10/110 がその中の消費税額に相当します.
(もともと小数点以下は切り捨てなのでキャストは不要であり,このプログラムの中で double 型を登場させる必要はありません.キャストを使ったり double 型を登場させたりしたら間違いと見なされます.)

  • 【プログラムの実行結果】(その1)赤字は実行時にキーボードから入力する内容
品物の税込み価格を入力してください:1100
税抜き価格は 1000 円になります.
  • 【プログラムの実行結果】(その2)赤字は実行時にキーボードから入力する内容
品物の税込み価格を入力してください:100
税抜き価格は 91 円になります.

※ 91 円の 10% は 9.1 円なので,消費税額は小数点以下切り捨てで 9 円となり,税込み価格は 91+9 = 100 円.

  • 【プログラムの実行結果】(その3)赤字は実行時にキーボードから入力する内容
品物の税込み価格を入力してください:104
税抜き価格は 95 円になります.

※ 95 円の 10% は 9.5 円なので,消費税額は小数点以下切り捨てで 9 円となり,税込み価格は 95+9 = 104 円.

【過去にあったミス(実際に減点となり,やり直しを命じられた例)】
実行の画面出力が上の例と違うきちんと確認していない).
■ 関数 sub_tax の中で 1.1 で割ったりキャストが行われていたりする.
main 関数を書き換えてしまっている.
インデントに不備がある(VSCode 上でインデントを自動で揃える作業をやっていない)


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