C言語 演習問題 第6回 『構造体』

C言語 の演習問題を解いてみましょう。今回はポインタについて扱います。
問題文で提示された要件を満たすプログラムを作成してみて下さい。

この記事はシリーズ記事です。全シリーズはこちらからご覧になれます。

(C言語の基礎、操作方法等の記事⼀覧は こちら

目次

第1問

下記の要件に従って、生徒の情報を格納する構造体Studentを定義してください。
出来上がった構造体に学生の情報を3人分格納し、画面表示するプログラムを作成してください。

構造体Student
    name  : char型
    age   : int型
    score : float型
◆回答例◆
#include <stdio.h>
struct Student {
    char name[50];  // 学生の名前
    int age;        // 年齢
    float score;    // テストの点数
};
int main() {
    struct Student students[3];  // 学生3人分のデータを格納する配列
    for (int i = 0; i < 3; i++) {
        printf("学生%dの名前: ", i + 1);
        scanf("%s", students[i].name);
        printf("学生%dの年齢: ", i + 1);
        scanf("%d", &students[i].age);
        printf("学生%dの点数: ", i + 1);
        scanf("%f", &students[i].score);
    }
    printf("\n--- 学生データ一覧 ---\n");
    for (int i = 0; i < 3; i++) {
        printf("学生%d: 名前 = %s, 年齢 = %d, 点数 = %.1f\n",
        i + 1, students[i].name, students[i].age, students[i].score);
    }
    return 0;
}

第2問

下記の要件に従って、車両とエンジンの情報を格納する構造体CarとEngineを定義してください。
出来上がった構造体にエンジンの情報を4つ、車両の情報を4台分格納し、画面表示するプログラムを作成してください。

構造体Engine
    maker : char型 // 製造会社
    year : int型  // 製造年
    speed : double型 // 最高速度

構造体Car
    num : int型 // ナンバー
    gas : double型 // ガソリン
    engine : Engine*型 // エンジン
◆回答例◆
#include <stdio.h>
typedef struct Engine {
    char maker[256]; // 製造者
    int year; // 製造年
    double speed; // 最高速度
} Engine;
typedef struct Car {
    int num; // ナンバー
    double gas; // ガソリン
    Engine engine; // エンジン
} Car;
int main(void) {
    Engine engines[4] = {
        { "Yamaha", 2015, 160 },
        { "Honda", 2018, 180 },
        { "Suzuki", 2020, 150 },
        { "Kawasaki", 2022, 200 }
    };
    Car cars[4] = {
        { 1234, 25.5, engines[0] },
        { 5678, 15.0, engines[1] },
        { 9101, 10.0, engines[2] },
        { 1122, 30.0, engines[3] }
    };
    for (int i = 0; i < 4; i++) {
        printf("車のナンバー: %d\n", cars[i].num);
        printf("車のガソリン量: %.2fL\n", cars[i].gas);
        printf("エンジンのメーカー: %s\n", cars[i].engine.maker);
        printf("エンジンの製造年: %d\n", cars[i].engine.year);
        printf("エンジンの最高速度: %.2f km/h\n", cars[i].engine.speed);
        printf("-----------------------------\n");
    }
    return 0;
}

第3問

下記の要件に従って構造体Dept, Employeeを定義してください。
出来た構造体を使用し、部署・従業員をそれぞれ複数作ってから「従業員名(Employeeのname)・部署名(Deptのname)」の一覧を出力してください。なお、部署名は構造体Employeeの、p_deptを利用して出力して下さい。

構造体Dept
    dept_id: int型
    name: 文字列型
    address: 文字列型
構造体Employee
    employee_id: int型
    name: 文字列型
    mail: 文字列型
    p_dept: Dept* 型
◆回答例◆
#include <stdio.h>

typedef struct Dept {
    int dept_id;
    char name[100];
    char address[100];
} Dept;

typedef struct Employee {
    int employee_id;
    char name[100];
    char mail[100];
    Dept* p_dept;
} Employee;

int main(void) {
    Dept departments[3] = {
        {1, "営業部", "東京都千代田区"},
        {2, "開発部", "大阪府難波"},
        {3, "人事部", "東京都渋谷区"}
    };
    Employee employees[6] = {
        {1, "佐藤 太郎", "taro.sato@example.com", &departments[0]},
        {2, "鈴木 次郎", "jiro.suzuki@example.com", &departments[1]},
        {3, "高橋 花子", "hanako.takahashi@example.com", &departments[2]},
        {4, "田中 三郎", "saburo.tanaka@example.com", &departments[0]},
        {5, "渡辺 美里", "misato.watanabe@example.com", &departments[1]},
        {6, "伊藤 志乃", "shino.ito@example.com", &departments[2]}
    };
    int i;
    for (i = 0; i < 6; i++) {
        printf("社員: %s\t, 部署: %s\n", employees[i].name, (employees[i].p_dept)->name);
    }
    return 0;
}

プログラミングは、練習と経験が鍵となります。ぜひ問題に挑戦し続けてください。別の記事で、より複雑な課題にも取り組みスキルをさらに磨いていきましょう。

この記事はシリーズ記事です。全シリーズはこちらからご覧になれます。

(Visited 53 times, 1 visits today)
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

目次