練習 [5] 配列(2/5)

練習 2(提出プログラム名:p0502a.c)

以下の手順で配列に格納されている整数の入れ替えを繰り返し実行できるプログラムを p0502a.c として作りなさい.
【手順】
SIZE 個(この場合,マクロ SIZE5 と定義)の整数を読み込みながら配列に格納する.
while(1) という無限ループを使って③,④,⑤を繰り返す:
  ③「何番目と何番目を交換しますか:」とメッセージを表示した後に
    2 つの整数 mn を読み込み,m 番目の数と n 番目の数を配列内で入れ替える.
  ④ m == n ならば break を実行して繰り返しから脱出する.
  ⑤ 配列の内容を実行例と同じかたちで表示する.
⑥ 「終了します⏎」と出力する.

なお,ここでは 1 ≦ m, nSIZE であると仮定してプログラムを作ってよい.

【注意】この問題ではマクロ SIZE の定義以外の場所では 5 や 4 といった配列長に関係する数字を書いてはいけません

  • 【プログラムの実行例】(その1)赤字は実行時にキーボードから入力する内容
    ※最初のメッセージ出力に printf("5個の整数を入力してください:\n"); と書くのは
    誤りなので注意せよ."%d"SIZE を使うこと
    ※交換後の数列表示で数字が隣とくっついてしまっていないか注意せよ.
    (数列の表示では "%d" での出力を繰り返して,繰り返しが終わったら改行を出力するということで構いません)
5 個の整数を入力してください:
5 -2 4 13 8
何番目と何番目を交換しますか:
2 5
2 番目と 5 番目を交換した結果:
5 8 4 13 -2 
何番目と何番目を交換しますか:
1 4
1 番目と 4 番目を交換した結果:
13 8 4 5 -2 
何番目と何番目を交換しますか:
1 1
終了します

  • 【プログラムの実行例】(その2)赤字は実行時にキーボードから入力する内容
    ※きちんと「終了します」と表示して改行されているか確認せよ.
    ※「終了します」の上に誤って配列の中身を表示させてしまっていないか注意せよ.
5 個の整数を入力してください:
1 2 3 4 5
何番目と何番目を交換しますか:
1 1
終了します

【過去にあったミス(減点となり,やり直しを命じられる)】
2 種類の実行例を確認せずに提出してしまっている.
 (例1)m == n の場合も交換を実行してしまっている(その場合は何もせずに終了するのが正解).
 (例2)「◯番目と△番目を交換した結果:」という表示で◯と△に具体的な数字が入っていない.
 (例3)最後に「終了します」と表示させていない.
■ scanf で mn を読み込むよりも前に m != nm == n を while や if の条件に書いてしまっている.
インデントに不備がある(VSCode 上でインデントを自動で揃える作業をやっていない).


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