C言語を使って、学生10人分の学生番号と3科目(数学、物理、英語)の成績をファイルから読み込み、平均点を計算して画面表示とファイル出力を行うプログラムの作り方を解説します。初心者でも理解しやすい構造で説明しています。
データ構造とファイル形式
まず、入力ファイルには以下のように1行に1人分のデータが記載されているとします。
1001 80 90 85
1002 75 88 92
...(10行)
各行は「学生番号 数学 物理 英語」の順に空白区切りです。
サンプルプログラム
以下のプログラムは読み込み、平均点計算、ソート、出力を順に行います。
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int id;
int math;
int physics;
int english;
double average;
} Student;
int compare(const void *a, const void *b) {
return ((Student *)a)->id - ((Student *)b)->id;
}
int main() {
FILE *fin = fopen("input.txt", "r");
FILE *fout = fopen("output.txt", "w");
if (!fin || !fout) { printf("ファイルが開けません\n"); return 1; }
Student students[10];
for (int i = 0; i < 10; i++) {
fscanf(fin, "%d %d %d %d", &students[i].id, &students[i].math, &students[i].physics, &students[i].english);
students[i].average = (students[i].math + students[i].physics + students[i].english) / 3.0;
}
fclose(fin);
qsort(students, 10, sizeof(Student), compare);
for (int i = 0; i < 10; i++) {
printf("%d %d %d %d %.2f\n", students[i].id, students[i].math, students[i].physics, students[i].english, students[i].average);
fprintf(fout, "%d %d %d %d %.2f\n", students[i].id, students[i].math, students[i].physics, students[i].english, students[i].average);
}
fclose(fout);
return 0;
}
プログラムのポイント
- 構造体 Student を使って1人分の情報をまとめる
- fscanf でファイルからデータを読み込む
- 平均点は double 型で計算
- qsort で学生番号順にソート
- printf と fprintf で画面とファイルに出力
まとめ
この方法で、学生10人分のデータを簡単に読み込み、平均点を計算し、学生番号順に並べて出力することが可能です。構造体とファイル操作を組み合わせることで、わかりやすく簡潔にプログラムを作成できます。


コメント