九九乘法表需外层循环控制行数(1至9),内层循环控制列数(1至当前行号),形成上三角结构;常见错误是内外层循环范围设置不当,导致输出完整矩阵而非标准乘法表。

用 for 循环嵌套打印九九乘法表
核心就是外层控制行数(1 到 9),内层控制每行的列数(从 1 到当前行号)。别写成两层都到 9,那样会打出完整 9×9 矩阵,不是“上三角”形式的乘法表。
常见错误是 i 和 j 起始值或终止条件写反,比如内层写成 j ,结果每行都打满 9 个算式,失去“阶梯感”。
- 外层
for (int i = 1; i - 内层
for (int j = 1; j - 每行末尾加
std::endl或"\n"换行,否则全挤在一行
for (int i = 1; i <= 9; ++i) {
for (int j = 1; j <= i; ++j) {
std::cout << j << "x" << i << "=" << i * j << "\t";
}
std::cout << "\n";
}对齐问题:制表符 \t 不可靠,改用字段宽度控制
\t 在不同终端、不同数字位数下表现不一致——比如 1x1=1 和 10x10=100(虽然九九表没 10,但思路一样)占位差很多,容易错行。真正稳的方式是用 std::setw 固定输出宽度。
需要包含 <iomanip> 头文件;std::setw(n) 只对紧随其后的单次输出生效,不能设一次管全场。
立即学习“C++免费学习笔记(深入)”;
- 每个乘积项前加
std::setw(4)(足够放下 “9x9=81” + 空格) - 避免在
std::cout链式调用里混用\t和std::setw,行为难预测 - 如果用 C 风格
printf,可用"%2dx%2d=%3d ",但要注意 C++ 中更推荐流操作
用 while 替代 for 实现,逻辑不变但易漏更新变量
本质只是语法替换,循环逻辑完全一致。但新手常犯的错是:忘记在循环体内写 ++i 或 ++j,导致死循环。
尤其嵌套时,内层 while 的变量更新必须放在正确位置——不能只靠外层更新,也不能放错花括号层级。
- 外层:
int i = 1; while (i - 内层:
int j = 1; while (j —— 这个 <code>++j必须在内层循环体末尾 - 漏写任一
++,程序就卡住不动,终端无响应,不是报错,容易误以为代码“没运行”
想倒序打印(9×9 开头)?改的是外层起始和条件,不是内层
有人尝试把内层也改成 j >= i,结果一片空白。倒序只要动外层:从 9 往下走到 1;内层仍是从 1 到当前 i(此时 i 是大数),才能保证每行算式数量递减。
错误写法:for (int j = i; j >= 1; --j) —— 这会把每行变成 9x9=81 8x9=72 ...,不符合“j×i”习惯顺序,且破坏了“左小右大”的阅读直觉。
- 正确倒序外层:
for (int i = 9; i >= 1; --i) - 内层保持:
for (int j = 1; j - 输出仍是
j ,语义清晰
对齐和换行控制比循环结构本身更容易出问题,尤其是复制粘贴示例时忽略 std::setw 的作用范围或漏掉换行符。











