大学の問題で
「add関数の内容を実装し、連結リストに学生が追加でき るようにせよ
以下の順番で3パターンの実装を行うこと
▪ パターン1:テンプレートの状態(最初に3名登録されてい る状態を想定)から常に学生をリストの先頭に追加できるよ うにせよ
▪ パターン2:パターン1を改良し、テンプレートの状態(最 初に3名登録されている状態を想定)から常に学生をリスト の末尾に追加できるようにせよ(最後尾の直前の要素を探す アルゴリズムが必要)
▪ パターン3(余裕がある人だけでよい):パターン2を改良 し、登録されている学生が0名の場合でも、既に登録されて いる学生がいる場合も、常にリストの末尾に学生を追加でき るようにせよ」
というものがあります。3まで終わったらそのファイルを提出すればいいとのことです。
パターン1の段階から引っかかってしまい前に進めません。どうすれば実行できますか?
C
1// 2// 学生名簿プログラム(リスト使用) 3// アルゴリズム応用 第8回課題-1 4// 5 6#include <stdio.h> 7#include <stdlib.h> 8 9/* 学生の構造体 */ 10typedef struct Meibo { 11 int number; 12 char name[10]; 13 int credits; 14 struct Meibo *next; //後続へのポインタ 15} Meibo; 16 17Meibo *head = NULL; //リストの先頭へのポインタ 18 19/* 一覧表示 */ 20void display(){ 21 Meibo *ptr; 22 printf("------------------\n"); 23 for(ptr = head; ptr != NULL; ptr = ptr->next){ 24 printf("%-3d%-10s%-3d\n", ptr->number, ptr->name, ptr->credits); 25 printf("------------------\n"); 26 } 27} 28 29/* 追加 */ 30void add(){ 31 //一人分のメモリを確保する 32 Meibo *student; 33 student = (Meibo *)malloc(sizeof(Meibo)); 34 35 if(student != NULL){ 36 //入力を受け取る 37 printf("学績番号\n"); 38 scanf("a = %d", &student->number); 39 printf("氏名\n"); 40 scanf("b = %s", student->name); 41 printf("総取得単位数\n"); 42 scanf("c = %d", &student->credits); 43 44 //リストに追加する 45 //ここを考えましょう 46 } 47} 48 49int main(void){ 50 //学生の基本情報を設定 51 Meibo st1 = { 1, "John", 30 }; 52 Meibo st2 = { 2, "Paul", 28 }; 53 Meibo st3 = { 3, "George", 20 }; 54 Meibo st4 = { a, b, c}; 55 56 //連結リストを作る 57 head = &st4; 58 st1.next = &st1; 59 st2.next = &st2; 60 st3.next = &st3; 61 62 // メニューの表示と実行 63 char cmd; 64 printf("a:追加 d:一覧表示 q:終了\n"); 65 while((cmd = getchar()) != 'q'){ 66 switch(cmd){ 67 case 'a': 68 add(); 69 break; 70 case 'd': 71 display(); 72 break; 73 case '\n':case ' ': 74 break; 75 default: 76 printf("不正なコマンドです\n"); 77 break; 78 } 79 } 80 81 printf("名簿プログラムを終了します。\n"); 82 83 return 0; 84}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。