課題 [13] ファイル処理(2/9)

問 2(提出プログラム名:ex1302.c)

このプログラム(ex1302.c)をダウンロードし,その中の関数 write_divisors を完成させなさい

関数 write_divisors は,指定されたファイルへ x 以上 y 以下の整数をすべて書き込むものとする.
ただし,その中で z の約数にあたるものだけは [ ] で囲んで書き込むものとする.
なお,この関数の引数は次の 4 つである:
  fp:書き込み対象のファイルを参照しているファイルポインタ
  x:書き込む整数の最小値
  y:書き込む整数の最大値
  z : 約数判定の対象となる整数

この問題では,x, y, z はいずれも 1 以上の整数であり,なおかつ x < y であって y < z であると仮定してプログラムを作ってよい.

【注意】
関数 main の内容は一切書き換えないこと.

【ヒント】
ひとまずファイルへの書き込みは後回しにしておいて
まずは通常の printf を使って整数を画面に出力するかたちのプログラムを作り,動作確認するとよいです.
その後,printf(...);fprintf(fp, ...); に書き換えればよいでしょう.

  • 【プログラムの実行結果】(その1)赤字は実行時にキーボードから入力する内容
出力先のファイルの名前を入力してください:data.txt
3 つの整数を入力してください:10 20 60
10 以上 20 以下の整数を data.txt に書き込みました.
ただし,60 の約数だけは [ ] で囲んであります.
【実行例1でdata.txtに書き込まれる内容】
[10]
11
[12]
13
14
[15]
16
17
18
19
[20]
  • 【プログラムの実行結果】(その2)赤字は実行時にキーボードから入力する内容
    ※[ ] で囲まれる値が 44 の約数になっているか確認せよ(実行例 1 とは異なる)
出力先のファイルの名前を入力してください:data.txt
3 つの整数を入力してください:20 25 44
20 以上 25 以下の整数を data.txt に書き込みました.
ただし,44 の約数だけは [ ] で囲んであります.
【実行例2でdata.txtに書き込まれる内容】
20
21
[22]
23
24
25
  • 【プログラムの実行結果】(その3)赤字は実行時にキーボードから入力する内容
    ※[ ] で囲まれる値が 20 の約数になっているか確認せよ(実行例 1 とは異なる)
出力先のファイルの名前を入力してください:data.txt
3 つの整数を入力してください:10 11 20
10 以上 11 以下の整数を data.txt に書き込みました.
ただし,20 の約数だけは [ ] で囲んであります.
【実行例3でdata.txtに書き込まれる内容】
[10]
11

【過去にあったミス(実際に減点となり,やり直しを命じられた例)】
書き込まれるファイルの内容が上の例と違うきちんと確認していない).
■ 約数が [ ] で囲まれていない.
注意書きを見落としていて main 関数の中身を書き換えてしまっている.
インデントに不備がある(VSCode 上でインデントを自動で揃える作業をやっていない).


ミスが無いことを確認したら次の問題へ → [ 問3 (ex1303.c) ]