構造体を使用したプログラミング1:交差点データのキーボード入力

目次

  1. 課題1
  2. 課題1の答え

1. 課題

 各交差点の交差点番号,交差点名,位置(x,y),平均待ち時間,交差道路数,隣接する
交差点番号を読みとりデータを構造体へ格納するプログラムを作成して下さい。
 下記にサンプルを示します.
 テキストのプログラムでは入力する交差点数を5と固定していますが、これを入力時に変更
できるようにすると便利ですね。



2. 課題の回答例

これは未完成のプログラムですので、必要な箇所を追記してプログラムを完成させてください。

/* 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へデータを代入するプログラムを記入しなさい */







/* 判定文 */ 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; }

    解説


 
戻る