什么是乘法表(数值乘法表)
乘法表指的是将一个固定的数分别与1到10(或其他范围)的整数相乘,按顺序输出每个乘积结果。这是学习循环结构时一个基础且实用的练习场景。
比如说,用户需要知道7的倍数有哪些,程序通过循环依次计算7×1、7×2……直到7×10,把结果逐行打印出来。
核心实现逻辑
编写一个数值乘法表需要三个基本要素:
-
被乘数:固定的那个数(比如7、9、12)
-
循环变量:从1开始递增到指定上限(通常到10结束)
-
乘法运算:循环变量 × 被乘数
个人经验:很多新手会把被乘数和乘数的位置搞反,但实际上乘法交换律决定了结果一样,代码可读性才是应该关注的。我习惯把固定值放右边,循环变量放左边,这样读起来“1×7、2×7……”更符合平时念乘法表的语序。
示例一:使用define常量定义被乘数
下面这份代码演示了如何用define()定义一个常量作为被乘数,然后用for循环输出结果。
<?php
define('BASE_NUM', 7); // 定义常量,存储被乘数
for ($i = 1; $i <= 10; $i++) {
echo $i * BASE_NUM;
echo '<br>';
}
?>
输出结果:
7
14
21
28
35
42
49
56
63
70
关于常量的使用:用define()定义常量而不是用普通变量,是考虑到这个数值在整个脚本执行过程中不应该被意外修改。如果后续维护代码时有人不小心改了BASE_NUM的值,程序就会报错而不是静默地产生错误结果。这种做法在多人协作或长期维护的项目中比较实用。
示例二:通过表单动态生成任意数的乘法表
代码号学习编程的典型场景——用户输入什么数字,程序就输出这个数字的乘法表。
<form method="post">
请输入要生成乘法表的数字:<input type="text" name="number"><br><br>
<input type="submit" name="submit" value="生成表格">
</form>
<?php
if ($_POST) {
$num = $_POST['number'];
// 输入校验:必须是有效的数字
if (!is_numeric($num) || $num <= 0) {
echo '请输入大于0的有效数字';
} else {
echo "<h3>数字 {$num} 的乘法表:</h3>";
for ($i = 1; $i <= 10; $i++) {
$result = $i * $num;
echo "{$i} × {$num} = {$result}<br>";
}
}
}
?>
本节课程知识要点
| 知识点 | 说明 |
|---|---|
| define() 常量定义 | 值在脚本中不可变,适合存储固定配置 |
| for 循环结构 | for(初始值; 条件; 步进) 三部分缺一不可 |
| 循环变量作用域 | $i 仅在循环内部有意义,外部访问会报错 |
| 输入校验的必要性 | 用户可能输入负数、字母或空值,必须提前过滤 |
| 字符串拼接与换行 | <br> 标签用于浏览器换行,\n 用于源码换行 |
输出格式的几种写法对比
在开发中,乘法表的输出方式可以有不同选择,每种有其适用场景。
写法一:纯文本拼接
echo $i . " × " . $num . " = " . ($i * $num) . "<br>";
写法二:双引号变量解析(个人比较常用,更简洁)
echo "$i × $num = " . ($i * $num) . "<br>";
写法三:使用printf格式化
printf("%d × %d = %d<br>", $i, $num, $i * $num);
为什么很多时候不用纯文本拼接?因为当变量较多时代码会变得冗长,可读性下降。双引号解析虽然简洁,但需要注意数组或对象属性可能需要花括号包裹。我自己在项目中倾向于用双引号搭配点连接符混合使用。
进阶:输出带HTML表格的乘法表
有时候需要把结果放在表格里,让界面更规整。下面是一个例子:
<?php
$number = 9;
echo '<table border="1" cellpadding="8">';
for ($i = 1; $i <= 10; $i++) {
echo '<tr>';
echo "<td>{$i} × {$number}</td>";
echo "<td align='right'>" . ($i * $number) . "</td>";
echo '</tr>';
}
echo '</table>';
?>
常见问题与排查思路
问题1:输出结果全部挤在一行
-
原因:忘记写
<br>或换行符 -
解决:每个结果后面加上换行标签
问题2:循环只执行了一次
-
原因:循环条件写成了
$i<=10但循环内修改了$i的值 -
解决:不要在循环体内手动改变循环变量
问题3:表单提交后页面没反应
-
原因:没有判断
$_POST是否有数据 -
解决:用
if($_POST)或isset($_POST['submit'])包裹处理逻辑
个人建议
初学阶段建议先用define()写固定值的乘法表,把循环逻辑跑通。然后再改成表单动态版本,加深对超全局变量$_POST的理解。之后尝试输出不同范围(比如1到12)的乘法表,这样循环控制能力会更扎实。
另外写代码时养成加注释的习惯,哪怕是简单练习——三个月后回头看,注释能帮你快速回想起当时的思路。