課題 [8] 関数①(6/9)

問 6(提出プログラム名:ex0806.c)

このプログラム(ex0806.c)をダウンロードし,その中の関数 print_relative_diff を完成させなさい
関数 print_relative_diff では,引数として与えられた 2 つの実数 x, y について,|x-y|/|x| を実行例のように出力するものとする(小数点以下は第 3 位までを出力).この問題では,x は 0 でないと仮定してプログラムを作ってよい.
ただし,関数 main の内容は一切書き換えないこと.

【注意】C 言語では実数の絶対値を求めてくれる fabs という関数があらかじめ用意されている(ネットを検索すれば出てくる)が,それを使ってはいけません.

【ヒント】
まず,求めたい |x-y|/|x| という値は次式のように書き換えることができます:
    
したがって,いったん絶対値を考えずに a = (x-y)/x を求めておいて,最後に |a| を出力すればよいことになります.※この場合,x, y とも double 型なのでキャストは不要です.

なお,|a| を出力する方法は説明するまでもないとは思いますが,
a < 0 ならば -aさもなくば元の a をそのまま出力すればよいです.

  • 【プログラムの実行結果】(その1)赤字は実行時にキーボードから入力する内容
x を入力してください:-10.2
y を入力してください:-5.5
|x-y|/|x| = 0.461
  • 【プログラムの実行結果】(その2)赤字は実行時にキーボードから入力する内容
x を入力してください:1
y を入力してください:2
|x-y|/|x| = 1.000
  • 【プログラムの実行結果】(その3)赤字は実行時にキーボードから入力する内容
x を入力してください:3.14
y を入力してください:0
|x-y|/|x| = 1.000

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


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