課題 [5] for 文(8/9)

問 8(提出プログラム名:ex0508.c)

整数 n を読み込み,以下の手順に従って n が素数かどうかを判定するプログラムを作りなさい.
以下の手順に従っていない場合は正しく動作していても不正解と見なされるので注意せよ.
なお,n は 2 以上の整数であると仮定してプログラムを作ってよい.
提出するソースファイル(ソースプログラム)のファイル名は ex0508.c としなさい.

【手順】必ずこの手順に従ったプログラムにすること
① int 型の変数 flag を用意し,flag = 1 としておく.
② for 文を使って k を「2 以上 n 未満」の範囲で変化(初期値を 2 とし,k < n を繰り返し条件とする)させながら次の ③ を繰り返す:
  ③ nk で割り切れるかどうか調べ,
   割り切れる場合のみflag = 0 とし, break 文を使って繰り返しから脱出する.
④ (上の for 文による繰り返しが終わった後で)
  flag の値が 1 のままであれば n は素数であるといえる.
  さもなくば, n は素数ではないといえる.

【補足説明】上の手順でやっていることは次の通りです.
変数 flag は,これが 1 ならば「素数である」,0 ならば「素数ではない」を表すものと見なします.

②,③では n より小さい値で n が割り切れるかどうかを調べています.
そして,もしも割り切れるようであれば,その時点で n には約数が存在することから素数でないことが確定します.よって flag = 0 としておき,break 文を使って繰り返しを強制終了しています.
逆に最後まで flag の値が 1 のままであれば n は素数であるといえます.

よって④では flag の値でもって素数かどうかを判定できるのです.

ここでいう flag のように,判定結果や状態を記録する変数のことを一般に「フラグ」と呼びます.
プログラミングにおいてフラグを使った処理は定番のやり方の 1 つです.

  • 【プログラムの実行結果】(その1)赤字は実行時にキーボードから入力する内容
整数を入力してください:17
17 は素数です
  • 【プログラムの実行結果】(その2)赤字は実行時にキーボードから入力する内容
    ※きちんと「50 は素数ではありません」と出力されることを確認せよ(以下の「過去にあったミス」に注意せよ)
整数を入力してください:50
50 は素数ではありません
  • 【プログラムの実行結果】(その3)赤字は実行時にキーボードから入力する内容
整数を入力してください:2
2 は素数です

【過去にあったミス(実際に減点となり,やり直しを命じられた例)】
実行の画面出力が上の例と違うきちんと確認していない).
  (例1)表示されているメッセージが実行例と違っている.
      例えば,「である」とか「ではない」と出力してしまっている.
  (例2)「n は素数です」というように出力がアルファベットに固定されている.
■ 問題文で指示されている手順に従っていない
  (例1)「nk で割り切れるか」判定すべきところを「kn で割り切れるか」判定している.
  (例2)「nk で割り切れる」場合に flag = 0 しか実行していない.
      (この場合は flag = 0 と break の両方を行う必要がある)
インデントに不備がある(VSCode 上でインデントを自動で揃える作業をやっていない).


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