練習 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】
a と b の最大公約数ではなく,|a| と |b| の最大公約数を返すように変更する.
(つまり,a と b が負であっても対応できるように,絶対値で考える.
ただし,絶対値を求めるのに 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 点とするので十分に注意すること.
なお,提出後に間違いに気付いた場合,〆切前であれば差し替え(上書き)は可能です.