問 9(提出プログラム名:ex0209a.c)
※上級クラスは必須(中級クラスはできる人だけでよい)
(いずれも加点対象)
この問題は while 文または for 文による繰り返し構造を使った練習問題になっています
2 つの整数 x, y を読み込み,以下のアルゴリズムに従って x/y の値を小数点以下第 30 位まで正確に計算して出力するプログラムを作りなさい.ただし,提出するファイル名は ex0209a.c とすること.
ここでは x, y は常に 1 以上であると仮定してプログラムを作ってよい.
ただし,変数は int 型のものしか使ってはいけません.
【実装すべきアルゴリズム】
① x と y の値を「x/y = 」のかたちで出力する(改行はしない).
例えば,x = 2, y = 13 ならば「2/13 = 」と出力する.
② x を y で割った商を出力する(改行はしない).
例えば,x = 2, y = 13 ならば「0」と出力する.
③小数点(ピリオド)を 出力する(改行はしない).
④以下の⑤~⑥を 30 回繰り返す:
⑤ x を y で割った余りを 10 倍し,それを改めて x とする.
⑥ x を y で割った商を出力する(改行はしない).
⑦上の繰り返しが終了したら,改行(\n)を出力する.
【補足】
上に示したアルゴリズムは,小学校で習う割り算の手順をそのまま表している.
こうすることで計算機環境に依存することなく,任意の桁数の精度で割り算を計算できる.
一方,double 型等を使うと精度には限界があるため,正しく求まらない.
- 【プログラムの実行結果】(その1)※赤字は実行時にキーボードから入力する内容
2 つの整数を入力してください:2 13 2/13 = 0.153846153846153846153846153846⏎
- 【プログラムの実行結果】(その2)※赤字は実行時にキーボードから入力する内容
2 つの整数を入力してください:111 2047 111/2047 = 0.054225696140693698094772838299⏎
- 【プログラムの実行結果】(その3)※赤字は実行時にキーボードから入力する内容
2 つの整数を入力してください:1 7 1/7 = 0.142857142857142857142857142857⏎
【過去にあったミス(実際に減点となり,やり直しを命じられた例)】
■ 上の実行例と出力が違っていることを見落としている.
■ 「2/13」の部分が x/y になってしまっている(実行例1の場合).
■ 小数点(ピリオド)や最後の改行を出力し忘れている.
■ インデントに不備がある(VSCode 上でインデントを自動で揃える作業をやっていない).
問 4 ~問 9 は 4/23(火)12:00 までに提出を済ませてください.※23:59 ではないので注意!
(ex0204a.c ~ ex0209a.c を Moodle から提出してください.)
くれぐれも各問題で記載されている注意事項や「過去にあったミス」を見落とさないようにしてください.
なお,提出後に間違いに気付いた場合,〆切前であれば差し替え(上書き)は可能です.
← [ 問 7 (ex0207a.c) ]
← [ 問 8 (ex0208a.c) ]