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

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

この問題は中級クラスの受講生は必須ではない(提出しなくてもよい)が,
上級クラスの受講生は必須とする.
なお,どちらのクラスであっても適切に正解すれば加点対象として扱う.

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

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

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

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

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

  • 【プログラムの実行例】(その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 上でインデントを自動で揃える作業をやっていない).


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