使用WHILE循环的C++代码实现右三角形

20 浏览
0 Comments

使用WHILE循环的C++代码实现右三角形

我需要打印这个三角形:

*
**
***
****
*****
******
*******
********

使用一个FOR循环和一个WHILE循环。我需要帮助,我已经找出了FOR循环版本,我只需要将它转换为WHILE循环,但是我尝试的所有方法都没有给我正确的输出!非常感谢任何帮助!

到目前为止我的代码是:

#include 
using namespace std;
int main(int argc, char**argv) {
    int i = 1;
    int j = 1;
    int N = 8;
    while (i <= N)
    {
        i++;
        while(j <= i)
        {
            cout<<"*";
            j++;
        }
        cout<

0
0 Comments

问题的原因是代码中的i = i++;语句并不会按照预期的方式工作。这行代码表面上看起来是将i的值自增后再赋值给i,但实际上这样的操作是未定义的行为。

解决这个问题的方法是使用其他方式来实现i自增的功能,而不是在同一行中将自增操作和赋值操作结合在一起。可以通过将自增操作放在赋值操作的前面或后面,或者使用另外的变量来保存自增后的值,再进行赋值。

以下是使用while循环实现打印直角三角形的示例代码,修复了i = i++;语句的问题:

#include 
int main() {
    int i = 1;
    int n = 5;
    while (i <= n) {
        int j = 1;
        while (j <= i) {
            std::cout << "* ";
            j++;
        }
        std::cout << std::endl;
        i++;
    }
    return 0;
}

运行上述代码,将会输出一个由星号组成的直角三角形:

*
* *
* * *
* * * *
* * * * *

这个修复了i = i++;语句的示例代码使用了嵌套的while循环来打印直角三角形。外层循环控制行数,内层循环控制每行的星号数量。在每行内部循环中,使用j变量来追踪星号的数量,每打印一个星号后自增j。在外层循环的每次迭代中,自增i来控制打印的行数。

0
0 Comments

在这段代码中,问题的出现是因为在内部循环之后没有将变量j重新设置为1

当前的代码中,当j的值首次小于等于i时,它将保持这个值,内部循环将不再执行。

解决这个问题的方法是在内部循环之后添加j = 1的语句,以重新将j的值设置为初始值1

此外,虽然这与你的问题没有直接关系,但要确保永远不要使用j = j++i = i++的形式,而应该使用j++i++(正如评论中的Kshitij Mehta所说)。如果你对此感兴趣,可以阅读这个问题及其答案来了解更多信息。

0
0 Comments

原因:该代码的目的是以星号组成的直角三角形。然而,使用了一个无限循环(while (1)),并且在循环体内直接输出了固定的星号图案。这样写的代码不符合直角三角形的定义,而是输出了固定的星号序列。

解决方法:重新设计代码,使用循环控制语句来生成直角三角形。可以使用嵌套的循环来实现,外层循环控制行数,内层循环控制每行星号的个数。具体实现如下:

int rows = 8; // 定义行数
int i = 1; // 控制行数的变量
while (i <= rows) {
  int j = 1; // 控制星号个数的变量
  while (j <= i) {
    cout << "*";
    j++;
  }
  cout << '\n';
  i++;
}

以上代码会输出一个符合直角三角形定义的星号图案。

0