練習 [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】
a と b の最大公約数ではなく,|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 点とするので十分に注意すること.
なお,提出後に間違いに気付いた場合,〆切前であれば差し替え(上書き)は可能です.