PHP vol.10

今日はテストでした。

問1

「Hello PHP」と出力するプログラムを書きなさい。

<?php
echo "Hello PHP\n";

問2

四則演算子を全て書きなさい。

+ - * / %

問3

論理演算子論理積論理和・否定)の演算子を書きなさい。

論理積 &&
論理和 ||
否定 !=
正解
論理積 &&
論理和 ||
否定 !

問4

$aをインクリメントとデクリメントするプログラムを書きなさい。

<?php
$a = 0;
$a++;
echo $a."\n";
$a--;
echo $a."\n";

問5

今まで勉強したデータ型を全て記述しないさい(5つ)。

文字列 string
整数 integer
小数点数 float
boolean
正解
文字列 string
整数 integer
浮動小数点数 float
論理値 boolean
配列 array

問6

比較演算子を書きなさい(等しい、等しくない、以上、以下、未満、〜より大きいの計6つの)。

等しい ==
等しくない !=
以上 >=
以下 <=
未満
〜より大きい >

問7

10より大きければ「big」、10以下かつ5より大きければ「middle」、
5以下かつ1より大きければ「small」、それ以外は「unknown」と出力するプログラムを書きなさい。

<?php
$num = 0;
if ($num > 10) {
  echo "big\n";
} elseif ($num >5 ) {
  echo "middle\n";
} elseif ($num >1) {
  echo "small\n";
} else {
  echo "unknown\n";
}

問8

1から10まで表示するプログラムをfor文を使って書きなさい。

<?php
for ($i=1;$i<=10;$i++) {
  echo $i."\n";
}

問9

for文とif文を使い、偶数の場合は「nは偶数です」と出力し、奇数の場合は、「nは奇数です」と出力するプログラムを書きなさい。

<?php
for ($i=1;$i<=20;$i++){
  if ($i%2==0) {
    echo $i."は偶数です\n";
  } else {
    echo $i."は奇数です\n";
  }
}

問10

2の倍数を100まで表示するプログラムを書きなさい。

<?php
for ($i=1;$i<=100;$i++) {
  if ($i%2==0) {
    echo $i."\n";
  }
}

問11

2の倍数と3の倍数を100まで表示するプログラムを書きなさい(同じ倍数は2と3の倍数ですと表示)。

<?php
for ($i=1;$i<=100;$i++) {
  if ($i%2==0 && $i%3==0) {
    echo $i."は2と3の倍数です\n";
  } elseif ($i%2==0) {
    echo $i."\n";
  } elseif ($i%3==0) {
    echo $i."\n";
  } else {
    echo "";
  }
}

問12

配列の添字(キー名)はデフォルトはいくつから始まりますか?

正解

0から始まる。

問13

連想配列とはなんですか?

正解

キーが文字列の配列になったことを言う。

問14

配列を使い、学生10人分の点数を一気に出力するプログラムを書きなさい。

<?php
$tokuten = array(20,54,31,40,32,89,38,98,65,100);
foreach ($tokuten as $key) {
  echo $key."\n";
}

問15

配列を使い、学生10人分のなかの最高得点を出力するプログラムを書きなさい。

<?php
$tokuten = array(90,20,40,50,32,89,76,54,99,33);
for ($k=0;$k<9;$k++) {
  for ($i=0;$i<9;$i++) {
    $n = $i + 1;
    if ($tokuten[$i] > $tokuten[$n]) {
      $box = $tokuten[$i];
      $tokuten[$i] = $tokuten[$n];
      $tokuten[$n] = $box;
    }
  }
}
echo $tokuten[9]."\n";

問16

多次元配列を使い、学生10人分の中の教科(英語、数学、国語)ごとの最高得点を出力するプログラムを書きなさい。

補習時に解いたもの
<?php
$cls = array("英語","国語","数学");
$stu = array(0,0,0);
$box = array(0,0,0);
$tokuten = array();
$tokuten["sato"] = array("eng" =>40,"jpn"=>30,"mat"=>90);
$tokuten["kato"] = array("eng" =>90,"jpn"=>45,"mat"=>32);
$tokuten["saito"] = array("eng" =>33,"jpn"=>41,"mat"=>92);
$tokuten["naito"] = array("eng" =>99,"jpn"=>75,"mat"=>82);
$tokuten["nishizawa"] = array("eng" =>20,"jpn"=>65,"mat"=>52);

foreach ($tokuten as $name => $array) {
  foreach ($array as $class => $value) {
    if ($value > $box[0] && $class=="eng") {
      $stu[0] = $name;
      $box[0] = $value;
    } elseif($value > $box[1] && $class=="jpn") {
      $stu[1] = $name;
      $box[1] = $value;
    } elseif($value > $box[2] && $class=="mat") {
      $stu[2] = $name;
      $box[2] = $value;
    } else {
      echo "";
    }
  }
}
for ($i=0;$i<=2;$i++) {
  echo $cls[$i].":\t".$box[$i]."\t(".$stu[$i].")\n";
}
自宅でid:toru_tashimaさんのコメントを踏まえて直したもの。
<?php
$cls = array("eng"=>"英語","jpn"=>"国語","mat"=>"数学");
$stu = array(0,0,0);
$box = array(0,0,0);
$tokuten = array();
$tokuten["sato"] = array("eng" =>40,"jpn"=>30,"mat"=>90);
$tokuten["kato"] = array("eng" =>90,"jpn"=>45,"mat"=>32);
$tokuten["saito"] = array("eng" =>33,"jpn"=>41,"mat"=>92);
$tokuten["naito"] = array("eng" =>99,"jpn"=>75,"mat"=>82);
$tokuten["nishizawa"] = array("eng" =>20,"jpn"=>65,"mat"=>52);

foreach ($tokuten as $name => $array) {
  foreach ($array as $class => $value) {
    if ($value > $box["eng"] && $class=="eng") {
      $stu["eng"] = $name;
      $box["eng"] = $value;
    } elseif($value > $box["jpn"] && $class=="jpn") {
      $stu["jpn"] = $name;
      $box["jpn"] = $value;
    } elseif($value > $box["mat"] && $class=="mat") {
      $stu["mat"] = $name;
      $box["mat"] = $value;
    } else {
      echo "";
    }
  }
}
foreach ($cls as $key => $value) {
  echo $value.":\t".$box[$key]."\t(".$stu[$key].")\n";
}
実行結果
$ php 042010.php
英語:	99点	(naito)
国語:	75点	(naito)
数学:	92点	(saito)

問17

九九を表示するプログラムを書きなさい。

<?php
for ($i=1;$i<=9;$i++){
  echo $i."の段\n";
  for ($k=1;$k<=9;$k++){
    echo $i."×".$k."".($i*$k)."\n";
  }
}

問18

以下を表示するプログラムを書きなさい。
*+*
+*+
*+*

<?php
for ($i=1;$i<=9;$i++) {
  if ($i%2==0) {
    echo "";
  } else {
    echo "";
  }
  if ($i%3==0) {
    echo "\n";
  }
}

問19

降順(多い順)に並び替えるプログラムを書きなさい。

補習時に解いたもの
<?php
$tokuten = array(90,20,40,50,32,89,76,54,99,33);
echo "前:";
foreach ($tokuten as $key) {
  echo $key.",";
}
echo "\n";
for ($k=0;$k<9;$k++) {
  for ($i=0;$i<9;$i++) {
    $n = $i + 1;
    if ($tokuten[$i] < $tokuten[$n]) {
      $box = $tokuten[$i];
      $tokuten[$i] = $tokuten[$n];
      $tokuten[$n] = $box;
    }
  }
}
echo "後:";
foreach ($tokuten as $key) {
  echo $key.",";
}
echo "\n";
実行結果
$ php 042013.php
前:90,20,40,50,32,89,76,54,99,33,
後:99,90,89,76,54,50,40,33,32,20,

感想

というようにやってきましたが、正直ノート(このはてダ)頼りだったんだなーとか思います。
そして、とっても今ぼーっとしています。よくない。

補習時の感想

どうにか解けました。
特に最後の問19はなんで解けなかったんだろうと思いました。
最後の最後でドはまりしたみたいです。