/****************************/ /* 名前,給与,年齢 */ /* coded by Y.Suganuma */ /****************************/ #include <stdio.h> struct kojin { char name[20]; int kyuyo; int nenrei; }; int main() { struct kojin x; /* 入力 */ printf("名前は? "); scanf("%s", x.name); printf("給与は? "); scanf("%d", &x.kyuyo); printf("年齢は? "); scanf("%d", &x.nenrei); /* 出力 */ printf("名前 %s 給与 %d 年齢 %d\n", x.name, x.kyuyo, x.nenrei); return 0; }
/****************************/ /* 3次元空間の点 */ /* coded by Y.Suganuma */ /****************************/ #include <stdio.h> #include <stdlib.h> #include <math.h> struct ten { double x,y,z,r; }; int main() { struct ten *p; double mean = 0.0; int i1, kosu = 0, n; /* 入力 */ printf("点の数は? "); scanf("%d", &n); p = (struct ten *)malloc(n*sizeof(struct ten)); for (i1 = 0; i1 < n; i1++) { printf("点の座標は(x y z)? "); scanf("%lf %lf %lf", &p[i1].x, &p[i1].y, &p[i1].z); p[i1].r = sqrt(p[i1].x * p[i1].x + p[i1].y * p[i1].y + p[i1].z * p[i1].z); mean += p[i1].r; } /* 点の個数 */ mean /= n; for (i1 = 0; i1 < n; i1++) { if (p[i1].r >= mean) kosu++; } printf(" 平均距離 %f 個数は %d\n", mean, kosu); return 0; }
/****************************/ /* 構造体のネスト */ /* coded by Y.Suganuma */ /****************************/ #include <stdio.h> struct kojin { char name[20]; struct jusho { char ken[10]; char shi[10]; char ban[20]; } ju; int nen; char sei[3]; }; void output(struct kojin); int main() { struct kojin x; /* 入力 */ printf("名前は? "); scanf("%s", x.name); printf("住所(県)は? "); scanf("%s", x.ju.ken); printf("住所(市)は? "); scanf("%s", x.ju.shi); printf("住所(番地)は? "); scanf("%s", x.ju.ban); printf("年齢は? "); scanf("%d", &x.nen); printf("性別は? "); scanf("%s", x.sei); /* 出力 */ output(x); return 0; } /*******************/ /* 構造体の出力 */ /* x : 構造体 */ /*******************/ void output(struct kojin x) { printf("名前 %s 住所 %s%s%s 年齢 %d 性別 %s\n", x.name, x.ju.ken, x.ju.shi, x.ju.ban, x.nen, x.sei); }
/****************************/ /* 名前,住所,電話番号 */ /* coded by Y.Suganuma */ /****************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> struct kojin { char name[20]; char jusho[50]; char tel[15]; }; int main() { struct kojin *p; char name[20]; int i1, n, sw = 1; /* 入力(データベースの作成) */ printf("人数は? "); scanf("%d", &n); p = (struct kojin *)malloc(n*sizeof(struct kojin)); for (i1 = 0; i1 < n; i1++) { printf(" 名前は? "); scanf("%s", p[i1].name); printf(" 住所は? "); scanf("%s", p[i1].jusho); printf(" 電話番号は? "); scanf("%s", p[i1].tel); } /* 探索 */ printf("探索\n"); while (sw > 0) { printf(" 名前は?(endで終了) "); scanf("%s", name); sw = strcmp(name, "end"); if (sw != 0) { for (i1 = 0; i1 < n && sw != 0; i1++) { sw = strcmp(name, p[i1].name); if (sw == 0) printf(" 電話番号は %s\n", p[i1].tel); } if (sw != 0) printf(" 見つかりません\n"); sw = 1; } } return 0; }
/****************************/ /* リスト処理 */ /* coded by Y.Suganuma */ /****************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> struct list { char *name; struct list *mae; struct list *ato; }; void add(char *, struct list **); void output(struct list *, int); struct list **search(char *, struct list **, int *); int main() { struct list *base = NULL, **add_a; int sw = 1, same; char tango[50]; /* 単語の入力とリストの作成 */ while (sw != 0) { // 単語入力 printf("単語を入力して下さい(終了はピリオド) "); scanf("%s", tango); // 終了判定 sw = strcmp(tango, "."); // リスト作成 if (sw != 0) { add_a = search(tango, &base, &same); // 探索 if (same == 0) add(tango, add_a); // 追加 } } /* リストの出力 */ output(base, 0); return 0; } /**************************************************************/ /* 単語の探索 */ /* tango : 入力された単語 */ /* base : 単語が入っている構造体のアドレスへのポインタ */ /* same : =0 : 単語を追加 */ /* =1 : 既に同じ単語がリスト上にある */ /* return : 追加する単語構造体のアドレスに対するポインタ */ /**************************************************************/ struct list **search(char *tango, struct list **base, int *same) { struct list **add_a; int sw; *same = 0; /* 最初の単語 */ if (*base == NULL) return base; /* 単語の比較 */ sw = strcmp(tango, (*base)->name); if (sw == 0) { // 同じ単語 *same = 1; return base; } else { if (sw < 0) add_a = search(tango, &((*base)->mae), same); // 左 else add_a = search(tango, &((*base)->ato), same); // 右 return add_a; } } /************************************************************/ /* 単語の追加 */ /* tango : 入力された単語 */ /* base : 単語が入っている構造体のアドレスへのポインタ */ /************************************************************/ void add(char *tango, struct list **base) { int len; *base = (struct list *)calloc(1, sizeof(struct list)); len = strlen(tango) + 1; (*base)->name = (char *)malloc(len*sizeof(char)); strcpy((*base)->name, tango); } /**********************************************************/ /* 単語の出力 */ /* base : 対象とする単語が入っている構造体のアドレス */ /* dep : リストの深さ */ /**********************************************************/ void output(struct list *base, int dep) { int i1; if (base != NULL) { for (i1 = 0; i1 < dep; i1++) printf(" "); printf("%s\n", base->name); dep++; output(base->mae, dep); output(base->ato, dep); } }
菅沼ホーム | 演習解答例目次 | 本文目次 | 付録 | 索引 |