繁体   English   中英

仅使用嵌套的while循环打印表

[英]Printing a table using nested while loops only

我正在尝试在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循环。


我这里有两个主要问题:

  • 我不知道如何做到这一点不使用非嵌套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;
}

但是,正如所说,我用了一个非嵌套while在年初,也输出为:

0    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 

如果两位数数字未正确对齐。 另一方面, if不使用if语句,我想不出一种方法来修改循环以仅增加两位数字的空间。

那么,我是否缺少某些内容,或者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;
}

输出是

     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

说明:

  1. 我已将j用作种子,并将i * j用作第(j +1)列的新值。 从第一行第二列到最后一行最后一列,它都完美地工作。
  2. 对于第一列,j始终为0。为了使它起作用,我使用!j *(i + 1),第一列显示0到10。
  3. 若要为第一行和第一列隐藏0,则i,j和k均为0。对于所有其他单元格,至少其中一个具有除0以外的值。

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

注意事项:

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

     while(j == 0){ cout << i << '\\t'; break; } 

我把剩下的作为练习。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM