多次元配列 / ch12 — 多次元配列の総合演習 / 演習 01

📝 ドリル 01 — 各学生の平均点を出力

問題

標準入力で 3 行のデータが与えられます。各行は次の形式です。

名前,国語の点,数学の点,英語の点

入力例:

太郎,80,70,90
花子,60,90,90
次郎,100,100,70

各学生について、3 教科の 平均点 を計算し、次の形で 1 行ずつ出力してください。

名前: 平均

期待される出力:

太郎: 80
花子: 80
次郎: 90

採点

php scripts/grade.php v2/topics/06-array-multi/ch12-summary/drill/01-student-grades/

ヒント

  • 1 行ずつ fgets(STDIN) で読み、explode(",", $line) で分割
  • 1 件分を ['name' => ..., 'scores' => [...]] のような連想配列にして配列に追加
  • array_sum($scores) / count($scores) で平均
  • 今回は割り切れる点数になっているので、echo $avg でそのまま整数として表示される

テストケース

標準入力

太郎,80,70,90
花子,60,90,90
次郎,100,100,70

期待される出力

太郎: 80
花子: 80
次郎: 90

📄 starter.php(雛形)

このコードから書き始めてください。

<?php

// TODO: 標準入力 (3 行・"名前,点,点,点" 形式) を読み、各学生の平均点を「名前: 平均」で出力する
// ヒント:
//   $students = [];
//   while (($line = fgets(STDIN)) !== false) {
//       $line = rtrim($line, "\n");
//       if ($line === "") continue;
//       $cols = explode(",", $line);
//       $students[] = [
//           'name' => $cols[0],
//           'scores' => [(int)$cols[1], (int)$cols[2], (int)$cols[3]],
//       ];
//   }
//   foreach ($students as $s) {
//       $avg = array_sum($s['scores']) / count($s['scores']);
//       echo $s['name'] . ": " . $avg . "\n";
//   }
✅ 解答例を見る(自分で解いてから)
<?php

$students = [];
while (($line = fgets(STDIN)) !== false) {
    $line = rtrim($line, "\n");
    if ($line === "") continue;
    $cols = explode(",", $line);
    $students[] = [
        'name' => $cols[0],
        'scores' => [(int)$cols[1], (int)$cols[2], (int)$cols[3]],
    ];
}

foreach ($students as $s) {
    $avg = array_sum($s['scores']) / count($s['scores']);
    echo $s['name'] . ": " . $avg . "\n";
}