課題 [13] 構造体(8/8)

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

まず,このプログラム(ex1308a.c)をダウンロードしなさい.
そして,ex1308a.cを編集して次の処理を行うプログラムとして仕上げなさい.

【目的の処理】
このプログラムも問 7 と同様にリスト構造(線形リスト)を扱うものである.
初期状態では次のように 1 個のノードだけで構成されており,そのデータは 10 としてある:

続いて,いくつか整数を読み込み,それら 1 つずつリストの末尾へ追加していくようにしたい:

プログラム中の関数 append を完成させ,そのようなリストの追加を実現しなさい.
なお,動作確認用に print_list も必要になるため,そちらは問 7 で作成した内容を流用せよ.

【ヒント】
あるポインタ変数 p が,あるノードを指している場合,
 ● その次のノードのポインタは p->next に格納してあるので,
  p = p->next; を実行すると 1 つ後ろのノードを p が指すようになる.
 ● p->next == NULL になっている場合p が指すノードは末尾のノードであるので,
    p->next = malloc(sizeof(NODE));
  を実行すると末尾に新しくノードを追加できる.
  さらにその後に p = p->next; を実行すれば,p は新たに追加した末尾ノードを指す
  ことになるので p->data には追加したいデータを
  p->next には NULL をそれぞれ代入してやればよい.

  • 【プログラムの実行結果】(その1)赤字は実行時にキーボードから入力する内容
整数を入力してください(-1 で終了):1
整数を入力してください(-1 で終了):2
整数を入力してください(-1 で終了):3
整数を入力してください(-1 で終了):4
整数を入力してください(-1 で終了):5
整数を入力してください(-1 で終了):-1
10
1
2
3
4
5
  • 【プログラムの実行結果】(その2)赤字は実行時にキーボードから入力する内容
整数を入力してください(-1 で終了):-1
10

【過去にあったミス(実際に減点となり,やり直しを命じられた例)】
実行の画面出力の内容が上の例と違うきちんと確認していない).
インデントに不備がある(VSCode 上でインデントを自動で揃える作業をやっていない).


問 4 ~問 8 は 7/23(火)12:00 までに提出を済ませてください.※23:59 ではないので注意!
(ex1304a.h ~ ex1308a.c を Moodle から提出してください.)
くれぐれも各問題で記載されている注意事項や「過去にあったミス」を見落とさないようにしてください.
なお,提出後に間違いに気付いた場合,〆切前であれば差し替え(上書き)は可能です.