練習 [8] 関数(3/5)

練習 3(提出プログラム名:p0803a.c)
※講義資料(その2)で説明している内容です

まず,このプログラム(p0803a.c)をダウンロードしなさい.
p0803a.c では以下の例のように
「3 つの整数の中で絶対値が最大の整数」を出力しようとしているが未完成となっている.
以下の指示に従ってこれを完成させない.
ただし,入力として与えられる 3 つの整数の絶対値はいずれも異なるものと仮定してよい.

【追加・修正すべき内容:以下の 2 つの関数を完成させなさい】
 ① 関数 get_abs を完成させなさい
  この関数では引数で与えられた整数 n に対し,その絶対値を返すこと.
  例えば,get_abs(-3) を呼出したとすると,その戻り値は 3 となるのが正解である.
  ※要注意:n が負の場合とそうでない場合に分けてそれぞれ適切な値を return で返せばよいだけではあるが,その際に負の場合しか return 文を書いていないというミスが例年見られるので注意せよ.

 ② 関数 get_abs_larger を完成させなさい
  現時点では関数 get_abs_larger は絶対値を考慮せずに
  「xy の大きい方を返すようになっている.
  これを編集しxy のうち,その絶対値が大きい方を返すように仕上げなさい.
  例えば,get_abs_larger(2, -4) を呼出したとすると,その戻り値は -4 となるのが正解である.
  なお,この関数の中では以下のヒントに書いているように get_abs を呼出すこと

【注意】
この問題では関数 main の内容を編集してはいけません
また,C 言語では整数の絶対値を求めるために abs という関数があらかじめ用意されているが(※ネットで検索すれば出てくるが)それを使ってはいけません

【ヒント】
関数 get_abs_larger の中では x と y それぞれの絶対値を求める必要があります.
そこで,別の関数 get_abs を使って x と y の絶対値を求めてあげるとよいです.
具体的には,|x| > |y| かどうかを判定したいならば
  if ( get_abs(x) > get_abs(y) ){
と書けばよいです.

このように,絶対値を求める部分を別の関数に小分けにして作っていくようにすると
プログラムが複雑になるのを避けることができます.
その方が間違いは減りますし,他人からも分かりやすいプログラムに仕上げることができます.
うまく関数を設計できるようになることが C 言語でのプログラミング上達のポイントです.

  • 【プログラムの実行例】(その1)赤字は実行時にキーボードから入力する内容
3 つの整数を入力してください:-16 2 5
絶対値が最大の整数 = -16
  • 【プログラムの実行例】(その2)赤字は実行時にキーボードから入力する内容
3 つの整数を入力してください:0 1 -3
絶対値が最大の整数 = -3
  • 【プログラムの実行例】(その3)赤字は実行時にキーボードから入力する内容
3 つの整数を入力してください:2 -3 4
絶対値が最大の整数 = 4

【過去にあったミス(減点となり,やり直しを命じられる)】
3 種類の実行例を確認せずに提出してしまっている.
 特に,出力される整数が常に絶対値になってしまっている.
 (実行例1や2が負の数になっていない
■ 関数 get_abs_larger の中で get_abs を呼出していない
■ 関数 main の内容を書き換えてしまっている.
インデントに不備がある(VSCode 上でインデントを自動で揃える作業をやっていない).


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