目次
各交差点の交差点番号,交差点名,位置(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は(直前に入力した)交差道路数だけ入力させている。