编程习题:
利用流程控制语句,编程实现以下习题要求。
- 编程求1至1000累加的和。
- 一个数等于它的所有因子之和,那么它称为“完数”,请找出1000以内的所有完数。
- Fizz-Buzz 问题:写一个从1打印到100的程序,但是每当遇到3的倍数时,不打印相应的数字,但打印一次"Fizz"。遇到 5的倍数时,打印"Buzz"而不是相应的数字。对于同时为3和5的倍数的数时, 打印"FizzBuzz"。
- 使用 * 符号打印宽为20,高为10的矩形。
- 编程打印如下等腰直角三角形:
6. 编程打印如下等腰三角形:
知识点:PHP_EOL
PHP中换行可以用 PHP_EOL 来替代,以提高代码的可移植性。以下是不同操作系统下PHP_EOL的解析字符:
- unix系列用 \n
- windows系列用 \r\n
- mac用 \r
习题答案:
<?php
// 编程求1至1000累加的和
$sum = 0;
for ($i=1; $i<=1000; $i++) {
$sum += $i;
}
echo "The sum from 1 to 1000 is " . $sum . ".";
?>
<?php
//编程求编程求变1000以内的完数
for ($n = 2; $n < 1000; $n++) {
$sum = 0;
for ($m = 1; $m <= $n/2; $m++) {
if ($n % $m == 0) {
$sum += $m;
}
}
if ($sum != $n) {
continue;
}
echo "number: ".$n."; factors: ";
$count = 0;
for ($m = 1; $m <= $n/2; $m++) {
if ($n % $m == 0) {
$count++;
if ($count > 1) {
echo ", ";
}
echo $m;
}
}
echo ".".PHP_EOL;
}
?>
<?php
// Fizz-Buzz 问题
const FIZZ = 3;
const BUZZ = 5;
const FIZZBUZZ = 15;
$sum = 0;
for ($i=1; $i<=100; $i++) {
if ($i % FIZZBUZZ == 0) {
echo "FizzBuzz";
} elseif ($i % FIZZ == 0) {
echo "Fizz";
} elseif ($i % BUZZ == 0) {
echo "Buzz";
} else {
echo $i;
}
echo PHP_EOL;
}
?>
<?php
// 使用 * 符号打印宽为20,高为10的空心和实心矩形
const WIDTH = 20;
const HEIGHT = 10;
for ($i = 0; $i < HEIGHT; $i++) {
for ($j = 0; $j < WIDTH; $j++) {
if ($i == 0 || $i == HEIGHT - 1) {
echo "* ";
} elseif ($j == 0 || $j == WIDTH - 1) {
echo "* ";
} else {
echo " ";
}
}
echo PHP_EOL;
}
echo PHP_EOL;
echo PHP_EOL;
for ($i = 0; $i < HEIGHT; $i++) {
for ($j = 0; $j < WIDTH; $j++) {
if ($i == 0 || $i == HEIGHT - 1) {
echo "* ";
} else {
echo "* ";
}
}
echo PHP_EOL;
}
?>
<?php
// 编程打印如下等腰直角三角形
const SIDE_LENGTH = 10;
for ($i = 0; $i < SIDE_LENGTH; $i++) {
for ($j = 0; $j <= $i; $j++) {
echo " *";
}
echo PHP_EOL;
}
<?php
// 编程打印如下等腰三角形
const SIDE_LENGTH = 10;
for ($i = 0; $i < SIDE_LENGTH; $i++) {
for ($j = SIDE_LENGTH - 1 - $i; $j >= 0; $j--) {
echo " ";
}
for ($k = 0; $k < 2 * ($i + 1) - 1; $k++) {
echo "* ";
}
echo PHP_EOL;
}
?>