【C++练习】13.C++输出九九乘法表的方法详解
·
目录
- C++输出九九乘法表的方法详解
-
- 方法1:双重for循环(最基础)
-
- 思考:
- 代码分析:
- 特点:
- 方法2:使用while循环
-
- 思考:
- 代码分析:
- 特点:
- 方法3:使用递归实现
-
- 思考:
- 代码分析:
- 特点:
- 方法4:格式化输出(对齐美观)
-
- 思考:
- 代码分析:
- 特点:
- 方法5:使用函数封装
-
- 思考:
- 代码分析:
- 特点:
- 方法6:倒序输出九九乘法表
-
- 思考:
- 代码分析:
- 特点:
- 总结对比
C++输出九九乘法表的方法详解
我将详细讲解每种方法的思考逻辑、代码实现以及它们的特点。
方法1:双重for循环(最基础)
思考:
- 九九乘法表是一个9行9列的三角形表格
- 外层循环控制行数(1到9)
- 内层循环控制每行的列数(第i行有i列)
- 每项格式为"j×i=结果",用制表符\t分隔
代码分析:
#include <iostream>
using namespace std;
int main() {
for (int i = 1; i <= 9; i++) { // 外层循环控制行数
for (int j = 1; j <= i; j++) { // 内层循环控制每行的列数
cout << j << "×" << i << "=" << i * j << "\t";
// 输出格式:1×1=1 1×2=2 2×2=4 ...
}
cout << endl; // 每行结束后换行
}
return 0;
}
特点:
- 最直观的实现方式
- 时间复杂度O(n²)
- 代码简洁明了
- 适合初学者理解循环嵌套
方法2:使用while循环
思考:
- 用while循环替代for循环实现相同的逻辑
- 需要手动控制循环变量的初始化和递增
代码分析:
#include <iostream>
using namespace std;
int main() {
int i = 1; // 外层循环变量初始化
while (i <= 9) { // 外层循环条件
int j = 1; // 内层循环变量初始化
while (j <= i) { // 内层循环条件
cout << j << "×" << i << "=" << i * j << "\t";
j++; // 内层循环变量递增
}
cout << endl;
i++; // 外层循环变量递增
}
return 0;
}
特点:
- 与for循环实现功能相同
- 更清晰地展示了循环变量的变化过程
- 适合需要更灵活控制循环的场景
方法3:使用递归实现
思考:
- 将问题分解为两个递归函数:
- printRow:打印一行
- printTable:打印整个表格
- 递归终止条件:当i>9时停止递归
代码分析:
#include <iostream>
using namespace std;
// 打印第i行的乘法表
void printRow(int i, int j) {
if (j > i) { // 终止条件:j超过i
cout << endl;
return;
}
cout << j << "×" << i << "=" << i * j << "\t";
printRow(i, j + 1); // 递归调用打印下一项
}
// 打印整个乘法表
void printTable(int i = 1) { // 默认参数从1开始
if (i > 9) return; // 终止条件:i超过9
printRow(i, 1); // 打印第i行
printTable(i + 1); // 递归调用打印下一行
}
int main() {
printTable(); // 调用递归函数
return 0;
}
特点:
- 使用函数递归替代循环
- 代码结构更模块化
- 递归深度较浅(最多9层),不会导致栈溢出
- 有助于理解递归思想
方法4:格式化输出(对齐美观)
思考:
- 使用头文件中的setw设置输出宽度
- 保证输出结果对齐美观
- 固定每项的格式和间距
代码分析:
#include <iostream>
#include <iomanip> // 包含格式化输出所需的头文件
using namespace std;
int main() {
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
cout << j << "×" << i << "="
<< setw(2) << i * j << " ";
// setw(2)设置输出宽度为2,保证个位数和十位数对齐
}
cout << endl;
}
return 0;
}
特点:
- 输出结果更加整齐美观
- 适用于需要精确控制输出格式的场景
- 可以处理不同位数的乘积对齐问题
方法5:使用函数封装
思考:
- 将乘法表的打印逻辑封装成独立函数
- 提高代码的可重用性和可读性
- 主函数只需调用封装好的函数
代码分析:
#include <iostream>
using namespace std;
// 封装打印九九乘法表的函数
void printMultiplicationTable() {
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
cout << j << "×" << i << "=" << i * j << "\t";
}
cout << endl;
}
}
int main() {
printMultiplicationTable(); // 调用封装好的函数
return 0;
}
特点:
- 代码结构更清晰
- 函数可以重复使用
- 便于维护和修改
- 符合模块化编程思想
方法6:倒序输出九九乘法表
思考:
- 外层循环从9递减到1
- 内层循环仍然从1到当前行数i
- 实现乘法表的倒序输出
代码分析:
#include <iostream>
using namespace std;
int main() {
for (int i = 9; i >= 1; i--) { // 外层循环倒序
for (int j = 1; j <= i; j++) { // 内层循环正序
cout << j << "×" << i << "=" << i * j << "\t";
}
cout << endl;
}
return 0;
}
特点:
- 输出顺序与常规相反
- 展示了循环变量的灵活控制
- 可以用于验证对循环的理解
- 输出结果从最大乘法项开始
总结对比
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 双重for循环 | 简单直观,易于理解 | 代码重复性高 | 基础教学,简单需求 |
| while循环 | 循环控制更灵活 | 代码稍显冗长 | 需要灵活控制循环的场景 |
| 递归实现 | 展示递归思想,代码优雅 | 递归深度限制,效率略低 | 教学递归概念 |
| 格式化输出 | 输出美观整齐 | 需要额外头文件 | 需要精确控制输出的场景 |
| 函数封装 | 模块化,可重用 | 增加函数调用开销 | 大型项目,代码复用 |
| 倒序输出 | 展示不同输出顺序 | 非常规需求 | 特殊需求或教学目的 |
在实际开发中,双重for循环和函数封装是最常用的方法,因为它们既简单又实用。格式化输出在需要美观显示时非常有用,而递归实现则更多用于教学目的。
更多推荐


所有评论(0)