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