在這個習作中你將寫一個程式計算多個學生的平均成績及全班各科的平均和總平均成績。假設這個學生修習六門課,每門課程的名稱及學分如下:

課程

學分

計概

3

計概實習

1

微積分

4

線代

3

普物

3

普物實驗

1

首先,這個程式將讀入各個學生的學號及姓名,再讀入每門課程的分數;直到讀完所有學生資料為止。資料讀入完成後,依照輸入順序,輸出每個學生的學號、姓名、課程名稱、分數及平均分數;並於最後一行輸出全班各科的平均和總平均成績。

假設學號的格式為一個英文字母及七個數字,姓名的格式為二至四個中文字,分數為 0 100 的整數,平均分數計算到小數兩位。平均分數的計算公式如下:

score(i) creditHour(i) 為一門課的分數與學分。各科平均成績為該科總分除以學生人數,班級總平均成績為所有學生平均分總分除以學生人數。

下列為測試的學生資料:

學號

姓名

計概

計概實習

微積分

線代

普物

普物實驗

D9403100

李大華

87

76

72

90

75

80

D9403150

王小明

71

80

60

52

68

71

D9403148

陳有禮

65

68

79

82

64

61

D9404810

趙文

100

84

80

92

85

89

D9404154

林佳梅

69

78

60

62

68

62

D9402411

程傑米

51

63

70

64

8

67

D9402104

歐陽明明

85

91

85

100

84

92

D9403222

張中台

72

63

79

68

79

75

D9403556

吳美麗

84

85

91

88

80

86

D9404003

孫約翰

9

72

55

62

73

79

 

該測試學生資料在 student_score.txt 檔案中。檔案 student_score.txt 必須和本習作的執行檔存在同一子檔案夾。你可使用以下的函式讀入學生資料。

// Read all student records.

// At the end, return the number of students.

int readStudentScore(student* students) {

  FILE* fptr;

  int count = 0, i;

 

  fptr = fopen("student_score.txt", "r");

  while (feof(fptr) == 0) {

    fscanf(fptr, "%s", &students[count].id);

    fscanf(fptr, "%s", &students[count].name);

    for (i = 0; i < 6; i++) {

      fscanf(fptr, "%d", &students[count].score[i]);

    }

    count++;

  }

  fclose(fptr);

  return (count);

}

程式執行範例: