在获得用户的2个输入后,需要以非常具体的方式创建乘法表
Need to create a multiplication table in a very specific way after getting 2 inputs from the user
我们正在学习C++类中的for循环,我们被要求从用户那里获得2到10之间的2个输入。然后生成一个看起来像这样的表:(在这个例子中,两个输入是5和7)
.....1...2...3...4...5...6...7
.1...1...2...3...4...5...6...7
.2...2...4...6...8..10..12..14
.3...3...6...9..12..15..18..21
.4...4...8..12..16..20..24..28
.5...5..10..15..20..25..30..35
基本上是将轴上的每个数字相乘,然后显示在中间(乘法表)。我对iomanip很满意,不需要帮助调整数字。我只是不完全理解如何使用for循环产生实际的乘法。
我试过几件事,但老实说,我不知道该去哪里。以下是我目前拥有的
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main()
{
int userInputX;
int userInputY;
do {
do {
cin >> userInputX;
} while (((1 > userInputX) || (userInputX > 11)));
do {
cin >> userInputY;
} while (((1 > userInputY) || (userInputY > 11)));
for (int i = 1; i <= userInputY; i++) {
cout << setw(5) << right << setfill('.') << i;
}
cout << 'n';
for (int k = 1; k <= userInputY; k++) {
cout << setw(5) << right << setfill('.') << k;
}
cout << "n";
for (int i = 1; i <= userInputX; i++) {
cout << setw(5) << right << setfill('.') << i;
}
cout << "n";
} while (false);
return 0;
}
由于需要打印标题行和列,此任务变得更加复杂。
我建议从忽略这些开始,只打印乘法本身,例如
...1...2...3...4
...2...4...6...8
...3...6...9..12
只打印表格
为此,我们需要一个嵌套循环-一个内循环在外循环 最终,内部循环中的代码将运行 只有几个空格需要填写。 我们已经有了打印数字所需的代码,用点填充。我们只需要调整它来输出 一旦我们完成了这项工作,我们就有了可以打印出上表的代码。 现在,我们必须研究如何添加标题行和列。这实际上是两个独立的任务: (左上角还有添加代码的额外任务。稍后我们将在标题列中处理此问题,但目前,我们所拥有的内容将与乘法表对齐。) (哦,我差点忘了:在打印标题行之后,我们还必须在行标题循环之后,在外循环运行之前打印一行换行符。) 要添加标题行,我们必须在第一列之前每行打印一次额外的数字。这意味着我们必须将代码放在外循环中,就在内循环开始之前。 当我们这样做时,标题行将错位,因为它在第一列中需要 这很简单,只需使用我们的代码打印一个数字,然后用 我们剩下的是: 这是代码的最终结构。剩下的就是填空,把它放在上面提供的// outer loop: for each row
for (int i = 1; i <= userInputY; i++) {
// inner loop: for each column in the row
for (int j = 1; j <= userInputX; j++) {
// [code to print i*j]
}
// [code to print a newline after each row]
}
(rows * columns)
次,这正是我们所期望的。i
和j
的乘积,而不仅仅是循环计数器变量本身。打印标题行
1..userInputX
的代码。我们已经确定了这个代码,我们只需要在外循环之前添加它// row header loop: for each column
for (int j = 1; j <= userInputX; j++) {
// [code to print each 'j']
}
// outer loop: for each row
...
打印标题列
...
// outer loop: for each row
for (int i = 1; i <= userInputY; i++) {
// [code to print 'i']
// inner loop: for each column in the row
...
.
。在打印标题行之前,我们需要添加代码来完成此操作:// print '.' in top-left corner
// [code to print '.']
// row header loop: for each column
...
'.'
字符替换该数字。最终代码结构
// print '.' in top-left corner
// [code to print '.']
// row header loop: for each column
for (int j = 1; j <= userInputX; j++) {
// [code to print each 'j']
}
// [code to print a newline after header row]
// outer loop: for each row
for (int i = 1; i <= userInputY; i++) {
// inner loop: for each column in the row
for (int j = 1; j <= userInputX; j++) {
// [code to print each i*j]
}
// [code to print a newline after each row]
}
main()
函数中,去掉我们不再需要的部分。
- 如何在c++中为模板函数实例创建快捷方式
- 在c代码之间共享数据的最佳方式
- 在C++中将函数压缩为两种方式
- 以螺旋方式打印矩阵的程序.(工作不好)
- OpenGL大的3D纹理(>2GB)非常慢
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- 创建引用向量的优雅方式
- 为什么需要复制构造函数,在哪些情况下它们非常有用
- Constexpr替代了新的放置方式,可以让内存中的对象保持未初始化状态
- 为什么std::互斥需要很长的、非常不规则的时间来共享
- 使用QQuickFramebufferObject时同步数据的最佳方式是什么
- 不同/较旧的处理器运行c++代码的方式是否不同
- 从嵌套在std::映射中的std::列表中删除元素的最佳方式
- 在获得用户的2个输入后,需要以非常具体的方式创建乘法表
- 如何仅验证int类型的输入..以一种非常简单但有效的方式?在c++中
- LLVM clang编译器优化器以一种非常奇怪的方式重新排列代码,该怎么做
- 定义一个非常大的数组(查找表)的最佳方式是什么
- 使用c++在非常大的文本文件(10gb)中搜索多个单词是最快的方式
- c++(非c++ 11)在非常大的方法中释放数组的最佳方式
- 对代码的编译方式非常迂腐