在过去的两周里,我一直在C++学习中使用视频编程,所以不要太难判断这是否是一个愚蠢的问题。
我的上一课介绍了数组,任务是使用多维数组制作一个10×10倍的表。我成功地制作了这个时间表,但据我所知,我不得不键入每个整数。这是处理此场景的最佳方法,还是有一种无需键入10行数组就可以计算大多数整数的方法?
#include<iostream>
#include<Windows.h>
using namespace std;
int main() {
int animals[10][10] = {
{1,2,3,4,5,6,7,8,9,10},
{2,4,6,8,10,12,14,16,18,20},
{3,6,9,12,15,18,21,24,27,30},
{4,8,12,16,20,24,28,32,36,40},
{5,10,16,20,25,30,35,40,45,50},
{6,12,18,24,30,36,42,48,54,60},
{7,14,21,28,35,42,49,56,63,70},
{8,16,24,32,40,48,56,64,72,80},
{9,18,27,36,45,54,63,72,81,90},
{10,20,30,40,50,60,70,80,90,100},
};
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
cout << animals[i][j] << " " << flush;
}
cout << endl;
}
return 0;
}
发布于 2021-07-25 06:34:26
如果您确信您想要的数组中的数据,如您提到的数据,每一行都是一个算术级数,那么这可以很容易地使用循环来完成。
int n = 10, m = 10; //you can take this as user input
int animals[n][m];
int indexRow, indexColumn;
for (indexRow = 0; indexRow < n ; indexRow++) {
for (indexColumn = 0; indexColumn < m; indexColumn++) {
animals[indexRow][indexColumn] = (indexRow + 1) + (indexColumn)*(indexRow + 1);
}
}
我们在这里所做的是,在为每一行设置值时,使用算术级数的nth term
公式。正如您所看到的,每个row
的第一个元素是it's index number + 1
,而本系列中的nth
项是column's index number + 1
,因此我们应用了以下公式:
a + (n-1)d
其中a
是本系列的第一个术语,n
指的是nth
术语,而d
是常见的区别。
应用上述内容后,我们可以看到数组如下:
for (indexRow = 0; indexRow < n ; indexRow++) {
for (indexColumn = 0; indexColumn < m; indexColumn++) {
cout << animals[indexRow][indexColumn] << " " << flush;
}
}
打印出预期的输出。
发布于 2021-07-26 15:21:39
animals
是一个,嗯,非常规的产品表的名字。
但是,似乎没有任何迫切的需要拥有数组--只要在您到达它们时打印出它们:
for (int i = 1; i <= 10; ++i) {
for (int j = 1; j <= 10; ++j) {
std::cout << i * j << " ";
}
std::cout << '\n';
}
把数字排成一行会很好(因为它应该是一张桌子)。我们可以使用I/O机械手std::setw()
(在<iomanip>
中找到)来实现这一点。这将给出最终的完整程序:
#include <iomanip>
#include <iostream>
int main()
{
static constexpr int limit = 10;
for (int i = 1; i <= limit; ++i) {
for (int j = 1; j <= limit; ++j) {
std::cout << std::setw(4)
<< i * j;
}
std::cout << '\n';
}
}
上文所载的其他一些意见:
using namespace std
,特别是在文件范围内。main()
返回0是可选的;在主函数中,允许运行结束,并推断返回值为零。当然,这在任何其他值返回函数中都是不允许的。++
和--
。虽然这可能不会影响将它们应用到int
中的代码,但它可以节省一些类型的昂贵副本,因此这是一个很好的习惯。std::flush
或std::endl
)。让缓冲做好它的工作。发布于 2021-07-26 14:51:34
前面的两个答案在运行时创建数组。我想添加这样一个事实:您可以使用constexpr
在编译时计算它,就像您输入了它一样。
另外,别编写using namespace std;
。
您应该只使用输出\n
而不是使用endl
。您对flush
的明确调用是不必要的,只是减慢了它的速度。
当您的代码只使用标准的<windows.h>
而不调用任何Windows时,不要包含C++。
https://codereview.stackexchange.com/questions/264362
复制相似问题