嵌套For循环到Do while循环

时间:2016-10-13 09:43:36

标签: c++

您好,我阅读了有关家庭作业问题的指导原则,并明确表示这是家庭作业。这是家庭作业,我花了最后45分钟一遍又一遍地尝试。我撞墙了,需要帮助。

我的任务是获取来自双For循环的代码并将其转换为嵌套到for循环中的while循环。我已经成功完成了。但是,第三部分是采用该代码并将外部for循环变为do while循环。 输出需要增加一个"#"如果输入是" 4"那么每一行都是这样的

#
##
###
####

下面是我编写的代码,我需要将外部for循环变为do while循环:

int main()
{
    int side;

    cout << "Enter a number: ";
    cin >> side;

    for (int i = 0; i < side; i++)
    {
        int j = i;
        while(j >= 0)
        {
            cout << "#";
            j--;
        }
        cout << "\n";
    }
}

这是我到目前为止的尝试:

int main()
{
    int side;
    int i;

    cout << "Enter a number: ";
    cin >> side;
    int j=side;
    do
    {
        while(j >= 0)
        {
            cout << "#";
            j--;
        }
        cout << "\n";
        i++;
    }
    while(j >= side);
}

我的老师说,只要代码被解释,我理解它是如何工作的那样没关系。任何帮助将非常感激。 谢谢。

4 个答案:

答案 0 :(得分:1)

我建议

Sub InsertPicFromFile()
Dim cCell As Range
For Each cCell In Selection
If cCell.Value <> "" Then
On Error Resume Next
ActiveSheet.Shapes.AddPicture _
    Filename:=cCell.Value, LinkToFile:=msoFalse, _
    SaveWithDocument:=msoTrue, _
    Left:=cCell.Offset(ColumnOffset:=1).Left, Top:=cCell.Top, _
    Width:=cCell.Height, Height:=200
End If
Next cCell
End Sub

for循环通常包括初始化(int main() { int side; int i = 0; cout << "Enter a number: "; cin >> side; do { int j = i; while(j >= 0) { cout << "#"; j--; } cout << "\n"; i++; }while(i < side) } ),停止条件(i=0)和增量(i < side);你为什么不再使用i++

答案 1 :(得分:1)

你犯的第一个错误是:

int i; //not initialized!
/*...*/
i++;

并且你甚至没有在你的do-while条件下使用它。

所以while(j >= side);&gt; while (i >= side);

实际上,这也不是真的。由于side是输入,您希望i检查它是否更小而不是更大然后输入。所以它是while (i < side);

另一件事是int j=side;,当你递减j它永远不会重置时,所以你必须将它设置为你的do-while循环,并用i而不是侧面初始化它。 ......

无论如何,这是完整的代码:

#include <iostream>
using namespace std;

int main()
{
    int side;
    int i = 0;

    cout << "Enter a number: ";
    cin >> side;
    do
    {
        int j = i;
        while (j >= 0)
        {
            cout << "#";
            j--;
        }
        cout << "\n";
        i++;
    } while (i < side);

    return 0;
}

示例输出:

Enter a number: 10
#
##
###
####
#####
######
#######
########
#########
##########

答案 2 :(得分:0)

  • while(j >= side);应为while(i <= side);
  • j应在外循环的每次迭代中初始化(j = i;
  • int j=side;是不必要的。

一个友好的建议 - 描述性地命名您的变量和函数 - rowcolumnij好得多。

答案 3 :(得分:0)

他们上面的回答解决了你的问题,但让我告诉你一个更短的做事方式:

int main()
{
    int side;

    std::cout << "Enter a number: ";
    std::cin >> side;

    int row = 1;
    do
    {
        int col = 0;
        while (col++ != row)
        {
            std::cout << "#";
        }
        std::cout << "\n";
    } while (row++ != side); //This way, the condition is checked (row != side), and then row is incremented
}