【问题标题】:While statements - Cant understand a conceptWhile 语句 - 无法理解一个概念
【发布时间】:2016-07-14 18:08:11
【问题描述】:

我目前正在学习 C++,现在我被困在 while 语句上。 问题是我无法正确理解在 while 语句开始之前初始化变量或在 main 中全局初始化变量之间有什么区别。

下面的代码可能会更好地解释我的问题:

int main()
{
using namespace std;
int x = 1;
while (x <= 5)
{
    int y = 1;
    while (y <= x)
    {
        cout << y++ << " ";
    }
    cout << "\n";
    ++x;
}

return 0;

}

此代码输出为:

1
1 2
1 2 3
1 2 3 4
1 2 3 4 5

但以下

int main()
{
using namespace std;
int x = 1;
int y = 1;
while (x <= 5)
{
    //int y = 1;
    while (y <= x)
    {
        cout << y++ << " ";
    }

    cout << "\n";
    ++x;
}

return 0;
}

产生:

1
2
3
4
5

好吧,这听起来可能很愚蠢,但我真的需要理解它。我已经经历了几个主题,但是变量初始化的地方并没有让我明白。如果有人能指出我正确的方向,那将不胜感激。 谢谢

【问题讨论】:

  • 在第一个版本中,ywhile (x &lt;= 5) 循环的开始处具有1 的值,在第二个版本中,在第二次迭代中,该值是最后的结果第一次迭代,依此类推。
  • 在第二个程序中y 将其值从第一个外循环迭代保留到下一个。

标签: c++ loops variables while-loop statements


【解决方案1】:

y = 1在第一种情况下第一个while循环开始时会一次又一次地初始化。

在第二种情况下,它不会再次初始化,即它达到 x 的值并且不会进入第二个 while 循环。

【讨论】:

  • 哦,我明白了。我认为这就是它改变输出的原因,因为如果全局初始化它只是第一次从 1 开始,然后每次递增。但是在第一次它从 1 开始并且必须在 while 语句评估之前递增到某个级别。我说的对吗?
  • 是的,你是对的,但是你做的初始化不是global它仍然被称为local初始化,global initialization是在主函数之外声明变量。
  • 哦,是的,我仍然需要掌握这些东西。不过谢谢。你的回答清楚了。
【解决方案2】:

在第二个代码中,这完全是因为y 的值从未被重置为y=1

而在第一种情况下,每当while() 循环检查条件并进入循环时,您总是分配int y=1

【讨论】:

    【解决方案3】:

    您的示例中的第一个循环表明,对于 x 的每个值,y 变量将再次初始化为 1,y 的值将上升到 x(意味着您每次 x 增加时都将 y 初始化为 1)。

    Bur 对于第二个示例,y 仅初始化一次,并且每次 x 值增加(更改)时都将使用它的最后一个值。

    【讨论】:

      【解决方案4】:

      while 用于循环,在第一个程序中,每次 while 循环时都会初始化 y=1。在第二个程序中,它总是得到y=1,因为它没有被循环。希望这能澄清您的问题。

      【讨论】:

        【解决方案5】:

        与其说是初始化,不如说是赋值。以下是您的代码的大致执行方式:

        第一种情况

        1. 为 x 和 y 分配内存
        2. 将 x 设置为 1
        3. 检查x是否小于5,否则转9
        4. 将 y 设置为 1
        5. 检查y是否小于x,否则转8
        6. 打印 y
        7. 增加 y,转到 5
        8. 增加 x,转到 3
        9. 结束

        第二种情况

        1. 为 x 和 y 分配内存
        2. 将 x 设置为 1
        3. 将 y 设置为 1
        4. 检查x是否小于5,否则转9
        5. 检查y是否小于x,否则转8
        6. 打印 y
        7. 增加 y,转到 5
        8. 增加 x,转到 4
        9. 结束

        注意第 3 点和第 4 点是如何在这两种情况之间交换的。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-08-01
          • 1970-01-01
          相关资源
          最近更新 更多