練習 [14] 構造体(5/5)

練習 5(提出プログラム名:p1405.h)※必須ではない

この練習問題は必須ではない(提出しなくてもよい)が適切に解けていれば加点の対象とする.

練習 2 で作成したプログラム(p1402.c)を p1405.c という別名のファイルにコピーしなさい.
同じく,ヘッダ(p1402.h)を p1405.h という別名のファイルにコピーしなさい.
そして,p1405.c の中では
   #include "p1402.h"

   #include "p1405.h"
に書き換えなさい.

この問題では,練習 2 で作成した n 個の有理数の合計を求めるプログラムを改良し,
負の有理数も扱えるように発展させなさい.具体的には p1405.h 内で定義されている関数をそれぞれ次のように変更しなさい:
【関数 gcd
ab の最大公約数ではなく,|a||b| の最大公約数を返すように変更する.
(つまり,ab が負であっても対応できるように,絶対値で考える.
 ただし,絶対値を求めるのに C 言語であらかじめ用意されている関数 abs を使ってはいけません.)

【関数 reduce
既に実装されている機能に加え,分母が負の場合には分子と分母の両方の符号(プラス・マイナス)を反転させる.
(例1)1/(-3) → -1/3
(例2)-2/(-5) → 2/5

以上の変更を行い,ヘッダ(p1405.h)を提出しなさい.

【ヒント】
ある変数 x の符号を反転させるには
 x = -x;
とやるか
 x *= -1;
とやるとよいです.

  • 【プログラムの実行例】(その1)赤字は実行時にキーボードから入力する内容
合計したい有理数の個数を入力してください:4
1 個目の有理数の分子と分母を入力してください:-1 2
  [入力された有理数 = -1/2]
2 個目の有理数の分子と分母を入力してください:-3 -4
  [入力された有理数 = 3/4]
3 個目の有理数の分子と分母を入力してください:5 -6
  [入力された有理数 = -5/6]
4 個目の有理数の分子と分母を入力してください:7 8
  [入力された有理数 = 7/8]

入力された有理数の合計 = 7/24
  • 【プログラムの実行例】(その2)赤字は実行時にキーボードから入力する内容
合計したい有理数の個数を入力してください:3
1 個目の有理数の分子と分母を入力してください:-1 -3
  [入力された有理数 = 1/3]
2 個目の有理数の分子と分母を入力してください:-1 3
  [入力された有理数 = -1/3]
3 個目の有理数の分子と分母を入力してください:1 -3
  [入力された有理数 = -1/3]

入力された有理数の合計 = -1/3

【過去にあったミス(減点となり,やり直しを命じられる)】
上に示した実行例を確認せずに提出してしまっている.
■ main 関数を書き換えてしまっている.(提出するのはヘッダの方なので main を書き換えても評価の対象外です)
インデントに不備がある(VSCode 上でインデントを自動で揃える作業をやっていない).


第14回(Cプログラミング;3 限目の方)の練習問題は以上の5問です.
p1401.c ~ p1404.c, p1405.h を Moodle から提出してください.
※ただし,p1405.h は必須ではないです.
くれぐれも各問題で記載されている注意事項や「過去にあったミス」を見落とさないようにしてください.
なお,コンパイルエラーや無限ループになるプログラムを 1 個でも提出した場合は総合評価を 0 点とするので十分に注意すること.
なお,提出後に間違いに気付いた場合,〆切前であれば差し替え(上書き)は可能です.