目次
各交差点の交差点番号,交差点名,位置(x,y),平均待ち時間,交差道路数,隣接する
交差点番号を読みとりデータを構造体へ格納するプログラムを作成して下さい。
下記にサンプルを示します.
テキストのプログラムでは入力する交差点数を5と固定していますが、これを入力時に変更
できるようにすると便利ですね。
これは未完成のプログラムですので、必要な箇所を追記してプログラムを完成させてください。
/* Crossing2.c --- 構造体の格納と表示 */ #include <stdio.h> #include <string.h> #define CrossingNumber 5 /* 交差点数=5 */ #define MaxName 50 /* 最大文字数50文字(半角) */ typedef struct { double x, y; /* 位置 x, y */ } Position; /* 位置を表す構造体 */ typedef struct { int id; /* 交差点番号 */ Position pos; /* 位置を表す構造体 */ double wait; /* 平均待ち時間 */ char name[MaxName]; /* 交差点名 */ int points; /* 交差道路数 */ int next[5]; /* 隣接する交差点番号 */ } Crossing; Crossing cross[CrossingNumber]; int main(void) { int i,j; int crossing_number=0; /* 入力した交差点情報の数 */ char YesNo[16]; /* 入力継続の問い合わせに使用 */ for (i = 0; i < CrossingNumber; i++) { /* データの入力 */ /* 構造体crossへデータを代入するプログラムを記入しなさい */ crossing_number++; /* 交差点数を1増やす */ printf("交差点番号="); scanf("%d", &(cross[i].id)); /* 交差点番号の入力 */ printf("名前="); scanf("%s", cross[i].name); /* 交差点名の入力 */ printf("x座標="); scanf("%lf", &(cross[i].pos.x)); /* x座標の入力 */ printf("y座標="); scanf("%lf", &(cross[i].pos.y)); /* y座標の入力 */ printf("待ち時間="); scanf("%lf", &(cross[i].wait)); /* 待ち時間の入力 */ printf("交差道路数="); scanf("%d", &(cross[i].points)); /* 交差道路数の入力 */ /* 交差道路数だけ繰り返し */ for (j = 0; j < cross[i].points; j++) { printf("隣接交差点番号(No.%d)=", j); scanf("%d", &(cross[i].next[j])); /* 隣接交差点番号の入力 */ } /* 判定文 */ printf("次のデータを入力しますか?(Yes:\"y\")>"); scanf("%s", YesNo); if (strcmp(YesNo, "y") != 0) break; /* 入力文字が"y"以外ならループを抜ける */ } for (i = 0; i < crossing_number; i++) { /* データの表示 */ printf("配列[%d] 番号(%d), x(%lf), y(%lf), 名(%s), 待ち(%lf)\n", i, cross[i].id, cross[i].pos.x, cross[i].pos.y, cross[i].name, cross[i].wait); printf("\t交差道路数(%d)\t", cross[i].points); for(j=0; j<cross[i].points; j++){ /* 交差道路数だけ繰り返し */ printf("No.%d(%d) ", j, cross[i].next[j]); } puts(""); /* 改行 */ } return 0; } |
解説 1. 変数 crossing_number (交差点数)を新たに設け、交差点の入力がある毎に+1している。 交差点情報表示の時には、crossing_number で与えられる数だけループさせている。 2. 1つの交差点情報の入力が終ると、次の交差点を入力するか尋ねてくる。 ここで y を入れると継続、それ以外は入力終了となる。 3. 隣接交差点IDは(直前に入力した)交差道路数だけ入力させている。