用while循环绘制一个简单的三角形

时间:2010-09-19 20:22:03

标签: c++ loops while-loop

愚蠢的生活问题背后的学习使我脱轨!我决定改用我的学习资料,现在正在使用Accelerated C ++。

第2章,练习5:
写一组“*”字符,使它们形成正方形,矩形和三角形。

我试过但是却无法完全降低三角形。快速谷歌找到了以下答案:

// draw triangle
    int row = 0;
    int col = 0;
    int height = 5;

// draw rows above base
    while (row < height - 1)
    {
        col = 0;
        while (col < height + row)
        {
            ++col;
            if (col == height - row)
                cout << '*';
            else
            {
                if (col == height + row)
                    cout << '*';
                else
                    cout << ' ';
            }
        }
        cout << endl;
        ++row;
    }

// draw the base
    col = 0;

    while (col < height * 2 - 1)
    {
        cout << '*';
        ++col;
    }

我想要解决这个问题并完全理解它,因为我无法提出自己的答案。无论我经历了多少次,我都看不出它是如何绘制三角形的右侧:

- - - - *
- - - *
- - *
- *
*
* * * * * * * * * * 

这就是我在纸上循环的过程。那个右边来自哪里?我有一种直觉,表达式正在做一些我没有看到的事情。代码有效。

2 个答案:

答案 0 :(得分:3)

在嵌套的while循环中,在else子句中:

else
{
    if (col == height + row)
        cout << '*';  // This draws the right side
    else
        cout << ' ';
}

诀窍是while循环不会退出,直到列到达height + row,这是右侧的位置。它在前面的if子句中打印左侧(height - row)。

答案 1 :(得分:1)

我是OP上面显示的运动解决方案的作者。我为这种困惑道歉;我会做一个注释,回过头来为http://www.parkscomputing.com/accelerated-cpp-solutions/

的解决方案添加一些评论