SkipTest 2018

From Prog0

Jump to: navigation, search

2018年度スキップテスト

問題

GPA(Grade Point Average)は大学における成績評価の世界標準的な方法であり、以下の計算式で算出される。

GPA= (4 x 評価がAの科目の単位数(以下同様) + 3 x Bの単位数 + 2 x Cの単位数) / 総履修科目単位数(※評価がD、F、履修放棄の単位数を含む)

なお、単位数の係数となる値(A: 4など)をGrade Pointと呼ぶ。また、AからF、および放棄の評価と評点との関係は以下の通りである。

  • A: 80-100点,B: 65-79点,C: 50-64点,D: 35-49点,F: 34点以下,履修放棄: 0点

以下の仕様に基づいて、学生の成績管理とGPA(Grade Point Average)の算出を行うプログラムを作成せよ。

  • 全部で4つの科目があるものとし,それぞれの科目の単位数は,

 科目1: 4単位, 科目2: 4単位, 科目3: 3単位, 科目4: 4単位
とする

  • int型の配列courseに上記の各科目の単位数を格納すること
  • int型の二次元配列studentに学生の学籍番号と各科目の評点(0-100点)を保存すること
  • 評点を引数とし,Grade Pointを戻り値とする関数gradeを作成し,使用すること
  • プログラム実行後,学籍番号と評点はキーボードから入力され,その後各学生のGPAが表示されること
  • 学生の人数は最大で50名とする.マクロMAXSTUDENTSで人数を定義し,プログラム中で使用すること
  • 学籍番号と評点の入力時に,Control+Dを入力することで,最大人数より少ない人数で入力を終えるようにできること
  • 表示のフォーマット等は実行例と厳密に合っていなくてもよい

[実行例]

学生の学籍番号と各科目の評点を入力してください
1260401 98 100 80 77
1260402 75  63 50 72
1260403 49   0 30 60
1260404 82  64 51 55
1260405 79  71 88 62
(ここでControl+Dを入力)
各学生のGPAは以下の通りです
ID: 1260401, GPA: 3.733333
ID: 1260402, GPA: 2.533333
ID: 1260403, GPA: 0.533333
ID: 1260404, GPA: 2.533333
ID: 1260405, GPA: 2.933333

解答例

#include <stdio.h>
#define MAXSTUDENTS 50
#define COURSES 4

int grade (int);

int main () {
  int     course[4] ={4, 4, 3, 4};
  int     total = 0;
  int     student[MAXSTUDENTS][5];
  int     i, j, k;
  double  gpa;
  
  /* 総履修科目単位数を求める */
  for(i = 0; i < COURSES; i++) total+=course[i];
  
  /* メッセージ表示 */
  printf("学生の学籍番号と各科目の評点を入力してください\n");
  
  /* 学籍番号・評点入力 */
  for (k = 0; k < MAXSTUDENTS; k++) {
    if(scanf("%d%d%d%d%d", &student[k][0], &student[k][1], &student[k][2], &student[k][3], &student[k][4]) == EOF) break;
  }
  
  /* 結果表示 */
  printf("各学生のGPAは以下の通りです\n");
  for(i = 0; i < k; i++) {
    gpa = 0;
    for(j = 0; j < COURSES; j++) {
    gpa += grade(student[i][j+1])* course[j];
  }
  printf("ID: %d, GPA: %.6f\n", student[i][0], gpa/total);
  }
  return 0;
}

int grade (int score) {
  if (score >= 80 && score <= 100) {
    return 4;
  } else if (score >= 65 && score <= 79) {
    return 3;
  } else if (score >= 50 && score <= 65) {
    return 2;
  } else {
    return 0;
 }
}
Personal tools