問 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 から提出してください.)
くれぐれも各問題で記載されている注意事項や「過去にあったミス」を見落とさないようにしてください.
なお,提出後に間違いに気付いた場合,〆切前であれば差し替え(上書き)は可能です.
← [ 問 7 (ex1307a.c) ]