首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >打印10×10次表

打印10×10次表
EN

Code Review用户
提问于 2021-07-25 01:10:40
回答 4查看 714关注 0票数 1

在过去的两周里,我一直在C++学习中使用视频编程,所以不要太难判断这是否是一个愚蠢的问题。

我的上一课介绍了数组,任务是使用多维数组制作一个10×10倍的表。我成功地制作了这个时间表,但据我所知,我不得不键入每个整数。这是处理此场景的最佳方法,还是有一种无需键入10行数组就可以计算大多数整数的方法?

代码语言:javascript
运行
复制
#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;
}
EN

回答 4

Code Review用户

回答已采纳

发布于 2021-07-25 06:34:26

如果您确信您想要的数组中的数据,如您提到的数据,每一行都是一个算术级数,那么这可以很容易地使用循环来完成。

代码语言:javascript
运行
复制
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,因此我们应用了以下公式:

代码语言:javascript
运行
复制
a + (n-1)d

其中a是本系列的第一个术语,n指的是nth术语,而d是常见的区别。

应用上述内容后,我们可以看到数组如下:

代码语言:javascript
运行
复制
for (indexRow = 0; indexRow < n ; indexRow++) {
    for (indexColumn = 0; indexColumn < m; indexColumn++) {
        cout << animals[indexRow][indexColumn] << " " << flush;
    }
}

打印出预期的输出。

票数 2
EN

Code Review用户

发布于 2021-07-26 15:21:39

animals是一个,嗯,非常规的产品表的名字。

但是,似乎没有任何迫切的需要拥有数组--只要在您到达它们时打印出它们:

代码语言:javascript
运行
复制
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>中找到)来实现这一点。这将给出最终的完整程序:

代码语言:javascript
运行
复制
#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::flushstd::endl)。让缓冲做好它的工作。
  • 当我在学校的时候,乘法表上升到了12。也许你在哪里/当你在的时候,这就不一样了(我想十进制货币减少了死记硬背学习11和12的倍数的需要?)我们可以使用一个命名的常量,这样我们就可以很容易地改变限制,并且仍然有一个平方表。
票数 2
EN

Code Review用户

发布于 2021-07-26 14:51:34

前面的两个答案在运行时创建数组。我想添加这样一个事实:您可以使用constexpr在编译时计算它,就像您输入了它一样。

另外,编写using namespace std;

您应该只使用输出\n而不是使用endl。您对flush的明确调用是不必要的,只是减慢了它的速度。

当您的代码只使用标准的<windows.h>而不调用任何Windows时,不要包含C++。

票数 1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/264362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档