問 2(提出プログラム名:ex0502.c)
整数 n を読み込み, n のすべての約数を小さい順(昇順)に出力し,さらにそれらの合計も出力するプログラムを作りなさい.この問題では 1 と n も約数として出力・合計しているところに注意すること.
なお,プログラムでは必ず for 文を使うこと. n は 1 以上であると仮定してプログラムを作ってよい.
提出するソースファイル(ソースプログラム)のファイル名は ex0502.c としなさい.
【注意すべき点】
サンプルプログラムをコピーして編集するのは全く問題ないのですが,その際に誤って
for (k = 1; k >= 1; k++)
と書いてしまう人がいます.
これだと k = 1 を初期値として,「k が 1 以上である限り繰り返す」のですが,一方で k++ として「k は増え続ける」ことになってしまって(条件が常に成立する)無限ループになります.
数秒ほど待っても実行が終わらないようであれば無限ループを疑ってください.
- 【プログラムの実行結果】(その1)※赤字は実行時にキーボードから入力する内容
※約数が小さい順に出力されているか,数字の左には空白が入っているか(隣とくっついていないか),それぞれ注意せよ.
n を入力してください:10 10 の約数 = 1 2 5 10⏎ 約数の合計 = 18⏎
- 【プログラムの実行結果】(その2)※赤字は実行時にキーボードから入力する内容
n を入力してください:11 11 の約数 = 1 11⏎ 約数の合計 = 12⏎
- 【プログラムの実行結果】(その3)※赤字は実行時にキーボードから入力する内容
n を入力してください:1 1 の約数 = 1⏎ 約数の合計 = 1⏎
【過去にあったミス(実際に減点となり,やり直しを命じられた例)】
■ 実行の画面出力が上の例と違う(きちんと確認していない).
(例1)約数が小さい順(昇順)に出力されてない.
(例2)「n の約数」といったかたちでアルファベット表記に固定されてしまっている.
■ 合計を求めるための変数(仮に sum とする)について,
繰り返しに先立って 0 に初期化すること(sum = 0;)を忘れている.
■ インデントに不備がある(VSCode 上でインデントを自動で揃える作業をやっていない).
← [ 問 1 (ex0501.c) ]
ミスが無いことを確認したら次の問題へ → [ 問3 (ex0503.c) ]