練習 [6] 配列(3/5)

練習 3(提出プログラム名:p0603.c)

サンプルプログラム 3 (sample3.c)p0603.c という別の名前のファイルにコピーしなさい.そして,p0603.c を編集して以下の (1), (2) を実行するプログラムを作りなさい.

(1) SIZE 個(この場合は 5 個)の整数を読み込んで配列に格納する.
(2)以下を繰り返す:
 「何番目と何番目を交換しますか:」とメッセージを表示した後に 2 つの整数 mn を読み込み,
 m 番目の数と n 番目の数を配列内で入れ替える.そして,配列の内容を表示する.

ただし,このプログラムでは以下の【ヒント】に書いている通り, (2) の処理を無限ループで繰り返しm == n の時に break 文で繰り返しから脱出するものとする.

【ヒント】
この問題の場合,何回繰り返すことになるかは事前に分からないため while 文を使うのがよいですが,その際には無限ループと break 文を活用して次のように作るという手があります(第 5 回講義資料 p37).
※こうすれば mn の値の比較は②の位置で 1 回だけ書けば良いため手間が省けます.
 while (1)
 {
   ①「何番目と何番目を交換しますか」と表示し,整数 mn を読み込む.
   ② m == n ならば break を実行して繰り返しから脱出する.
   ③ m 番目と n 番目の値を交換を実行する.
   ④交換した後の配列の内容を表示する.
 }
 ⑤「終了します」と表示する.

  • 【プログラムの実行例】(その1)赤字は実行時にキーボードから入力する内容
    ※「5 個の整数を入力してください:」という表示では"%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 上でインデントを自動で揃える作業をやっていない).


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