C++ 仅使用嵌套while循环打印表

C++ 仅使用嵌套while循环打印表,c++,if-statement,while-loop,nested-loops,cout,C++,If Statement,While Loop,Nested Loops,Cout,我正在尝试用C++打印下表: 1 2 3 4 5 6 7 8 9 10 1 1 2 3 4 5 6 7 8 9 10 2 2 4 6 8 10 12 14 16 18 20 3 3 6 9 12 15 18 21 24 27 30 4 4

我正在尝试用C++打印下表:

     1    2    3    4    5    6    7    8    9    10    
1    1    2    3    4    5    6    7    8    9    10    
2    2    4    6    8    10   12   14   16   18   20    
3    3    6    9    12   15   18   21   24   27   30    
4    4    8    12   16   20   24   28   32   36   40    
5    5    10   15   20   25   30   35   40   45   50    
6    6    12   18   24   30   36   42   48   54   60    
7    7    14   21   28   35   42   49   56   63   70    
8    8    16   24   32   40   48   56   64   72   80    
9    9    18   27   36   45   54   63   72   81   90    
10   10   20   30   40   50   60   70   80   90   100   
仅使用嵌套的
循环


我这里有两个主要问题:

  • 如果不在开头使用非嵌套的
    while
    (打印第一行),或者在第一行不使用
    if
    语句,我不知道该如何操作
  • 使用
    setw
    我在尝试将数字与两位数字对齐时遇到问题
这是我试过的

#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
  int k=0;
  while(k<=10)
  {cout << k << setw(5);
      k++;
  };
  cout << "\n";

  int i=1;
  while(i<=10){
      cout << i << setw(5);
      int j=1;
      while(j<=10){
          cout<< i*j << setw(5);
          j++;
      }
      cout << "\n";
    i++;
  }  
  return 0;
}
两位数字没有正确对齐。另一方面,如果不使用
if
语句,我想不出一种方法来修改循环,以便只增加两位数的空间


因此,我是否遗漏了一些内容,或者如果不使用
if
或非嵌套
while

则无法打印上表,我认为您希望隐藏第一个0值。为了隐藏它,我做了一些小动作。没有if语句,所有打印都嵌套在while中

#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
  int i = 0, k = 0;
  while (i < 10){
      int j = 0;
      while (j <= 10){
          cout << left << setw(5);
          (i || j || k) && cout << j + i * j + !j * (i + 1);
          !(i || j || k) && cout << "";
          j++;
      }
      cout << "\n";
      i += k++ > 0;
  }  
  return 0;
}
说明:

  • 我使用j作为种子,I*j作为第(j+1)列的新值。 它非常适合从第一行第二列到最后一行最后一列
  • 对于第一列,j始终为0。为了让它工作,我用了!j*(i+1),它为第一列打印0到10
  • 要隐藏第一行和第一列的0,所有i、j和k都是0。对于所有其他单元格,其中至少有一个单元格的值不是0

  • 如果仍然不清楚,我将举例说明。

    我认为您希望隐藏第一个0值。为了隐藏它,我做了一些小动作。没有if语句,所有打印都嵌套在while中

    #include <iostream>
    #include <iomanip>
    using namespace std;
    
    int main()
    {
      int i = 0, k = 0;
      while (i < 10){
          int j = 0;
          while (j <= 10){
              cout << left << setw(5);
              (i || j || k) && cout << j + i * j + !j * (i + 1);
              !(i || j || k) && cout << "";
              j++;
          }
          cout << "\n";
          i += k++ > 0;
      }  
      return 0;
    }
    
    说明:

  • 我使用j作为种子,I*j作为第(j+1)列的新值。 它非常适合从第一行第二列到最后一行最后一列
  • 对于第一列,j始终为0。为了让它工作,我用了!j*(i+1),它为第一列打印0到10
  • 要隐藏第一行和第一列的0,所有i、j和k都是0。对于所有其他单元格,其中至少有一个单元格的值不是0
  • 如果仍然不清楚,我将举例说明。

    需要考虑的事项:

    • 输出选项卡而不是尝试设置宽度要容易得多, 虽然您对输出外观的控制会减少(它会 取决于控制台的制表位宽度)。但是你的标准标签停止了 将处理您的值范围
    • 您的问题陈述没有说明可以使用多少while循环
    • 可以使用while循环模拟if语句,如下所示:

      while(j == 0){
          cout << i << '\t';
          break;
      }
      
      while(j==0){
      可以考虑以下事项:

      • 输出选项卡而不是尝试设置宽度要容易得多, 虽然您对输出外观的控制会减少(它会 取决于控制台的制表位宽度)。但您的标准制表位 将处理您的值范围
      • 您的问题陈述没有说明可以使用多少while循环
      • 可以使用while循环模拟if语句,如下所示:

        while(j == 0){
            cout << i << '\t';
            break;
        }
        
        while(j==0){
        
        如果使用制表符分隔列会怎么样?如果不需要0,则可以设置if条件以检查其是否为0,然后打印空格。如果需要使用setw,则可以检查数字是否大于9或小于100,然后相应地调整空格。
        '\t'
        字符可用于对齐文本。是否考虑使用在0处开始
        i
        而不是在开始处有一个单独的循环?对于非嵌套的while循环,您可以让您的循环从0开始,或者转到11并相应地打印数字,当两个变量都为0时,通过打印空格来隐藏0。如果您使用制表符来分隔列呢?如果不需要0,您可以设置if条件要检查其是否为0,请打印空格。如果需要使用setw,则可以检查数字是否大于9或小于100,然后相应地调整空格。
        '\t'
        字符可用于对齐文本。您是否考虑过在0处使用起始
        i
        而不是在起始处使用单独的循环?对于非嵌套while loop,你可以让你的循环从0开始,或者转到11,并相应地打印数字,当你得到两个变量为0时,通过打印空格隐藏0。现在我添加了一个解释。现在我添加了一个解释。