まとめ:学生データの構造体
CoddyのCジャーニー「Logic & Flow」セクションの一部 — レッスン 43/63。
チャレンジ
簡単学生管理システムを使用して、構造体の使用方法の完全なワークフローを示すC言語のプログラムを作成してください。プログラムは以下の手順で行う必要があります:
- 以下のメンバを持つ
Studentという名前のstructを定義します:- 学生のID番号を格納する整数型の
id - 学生の成績を格納する浮動小数点型の
grade
- 学生のID番号を格納する整数型の
- main関数内で、
student1という名前のStudent変数を作成します。 scanfを使用して、入力から学生のIDと成績を読み取ります:- IDとして整数を読み取り、
student1.idに格納します。 - 成績として浮動小数点数を読み取り、
student1.gradeに格納します。
- IDとして整数を読み取り、
- 入力を読み取った後、以下のバリデーションと計算を実行します:
- 成績が 100.0 より大きい場合は、100.0 に設定します。
- 成績が 0.0 より小さい場合は、0.0 に設定します。
- 現在の成績(バリデーション後)に 5.0 を加算してボーナス成績を計算します。
- ボーナス成績が 100.0 を超える場合は、ボーナス成績を 100.0 に設定します。
- 学生情報を以下の正確な形式で出力します:
Student Information:ID: [id]Original Grade: [grade]Bonus Grade: [bonus_grade]Grade Status: [status]
- 成績ステータス(grade status)は次のように決定する必要があります:
- 元の成績が 90.0 以上の場合:
Excellent - 元の成績が 80.0 から 89.9 の場合:
Good - 元の成績が 70.0 から 79.9 の場合:
Average - 元の成績が 70.0 未満の場合:
Needs Improvement
- 元の成績が 90.0 以上の場合:
このチャレンジでは、構造体の定義、変数の作成、ドット演算子を使用したメンバへのアクセス、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;
}