C言語で学生10人分の学生番号と3科目(数学・物理・英語)の成績データを読み込み、各学生の平均点を計算して画面表示およびファイルに出力する方法を解説します。ファイル操作、配列操作、構造体の活用を組み合わせると効率的に処理できます。
1. データ構造の定義
まず、各学生の情報をまとめる構造体を定義します。これにより、学生番号と成績を一つの単位で管理可能です。
例: typedef struct { int id; int math; int physics; int english; float average; } Student;
2. データファイルの読み込み
学生情報が格納されたテキストファイルを開き、fscanfで順に読み込みます。ファイル名は任意ですが、例として data.txt とします。
読み込み例: fscanf(fp, "%d %d %d %d", &students[i].id, &students[i].math, &students[i].physics, &students[i].english);
3. 平均点の計算
読み込んだ各学生の成績から平均を計算します。整数の合計を浮動小数点で割ることで、小数点以下も正確に扱えます。
例: students[i].average = (students[i].math + students[i].physics + students[i].english) / 3.0;
4. 学生番号順に並べ替え
出力を学生番号順にするため、簡単なバブルソートや qsort を使って構造体配列をソートします。
例: qsort(students, 10, sizeof(Student), compareById);(compareById は学生番号を比較する関数)
5. 画面表示とファイル出力
計算結果を画面に表示するには printf を使用し、ファイルに書き込むには fprintf を使用します。
例: printf("%d %d %d %d %.2f\n", students[i].id, students[i].math, students[i].physics, students[i].english, students[i].average);
ファイル出力例: fprintf(output_fp, "%d %d %d %d %.2f\n", students[i].id, students[i].math, students[i].physics, students[i].english, students[i].average);
まとめ
この方法により、学生番号と各科目の成績から平均点を算出し、学生番号順で画面表示およびファイル出力が可能です。構造体と配列、基本的なファイル操作を組み合わせることで、効率的かつ可読性の高いプログラム設計ができます。


コメント