多次元配列 / 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";
}