Menu
Coddy logo textTech

まとめ:学生データの構造体

CoddyのCジャーニー「Logic & Flow」セクションの一部 — レッスン 43/63。

challenge icon

チャレンジ

簡単

学生管理システムを使用して、構造体の使用方法の完全なワークフローを示すC言語のプログラムを作成してください。プログラムは以下の手順で行う必要があります:

  1. 以下のメンバを持つ Student という名前の struct を定義します:
    • 学生のID番号を格納する整数型の id
    • 学生の成績を格納する浮動小数点型の grade
  2. main関数内で、student1 という名前の Student 変数を作成します。
  3. scanf を使用して、入力から学生のIDと成績を読み取ります:
    • IDとして整数を読み取り、student1.id に格納します。
    • 成績として浮動小数点数を読み取り、student1.grade に格納します。
  4. 入力を読み取った後、以下のバリデーションと計算を実行します:
    • 成績が 100.0 より大きい場合は、100.0 に設定します。
    • 成績が 0.0 より小さい場合は、0.0 に設定します。
    • 現在の成績(バリデーション後)に 5.0 を加算してボーナス成績を計算します。
    • ボーナス成績が 100.0 を超える場合は、ボーナス成績を 100.0 に設定します。
  5. 学生情報を以下の正確な形式で出力します:
    • Student Information:
    • ID: [id]
    • Original Grade: [grade]
    • Bonus Grade: [bonus_grade]
    • Grade Status: [status]
  6. 成績ステータス(grade status)は次のように決定する必要があります:
    • 元の成績が 90.0 以上の場合:Excellent
    • 元の成績が 80.0 から 89.9 の場合:Good
    • 元の成績が 70.0 から 79.9 の場合:Average
    • 元の成績が 70.0 未満の場合:Needs Improvement

このチャレンジでは、構造体の定義、変数の作成、ドット演算子を使用したメンバへのアクセス、scanf による入力処理、およびデータバリデーションと処理のための条件分岐ロジックの理解をテストします。実践的なシナリオで構造体を扱う完全なワークフローを練習します。

自分で試してみよう

#include <stdio.h>

// TODO: ここでStudent構造体を定義する

int main() {
    // TODO: student1という名前のStudent変数を作成する
    
    // 入力を読み込む
    int id;
    float grade;
    scanf("%d", &id);
    scanf("%f", &grade);
    
    // TODO: 入力値を構造体のメンバに格納する
    
    // TODO: 成績の検証とボーナスの計算を実装する
    
    // TODO: 成績ステータスを判定する
    
    // 結果を出力する
    printf("Student Information:\n");
    printf("ID: %d\n", /* TODO: 学生IDを出力する */);
    printf("Original Grade: %.1f\n", /* TODO: 元の成績を出力する */);
    printf("Bonus Grade: %.1f\n", /* TODO: ボーナス後の成績を出力する */);
    printf("Grade Status: %s\n", /* TODO: 成績ステータスを出力する */);
    
    return 0;
}

Logic & Flowのすべてのレッスン