推广 热搜: csgo  vue  angelababy  2023  gps  新车  htc  落地  app  p2p 

C语言之格式化屏幕输出详解

   2023-08-10 网络整理佚名1820
核心提示:在一些问题中,问题经常规定了屏幕输出的格式,让我们以固定的格式编程输出某些图案或表格。我们分别以下面三个例子来说明格式化屏幕输出的方法。如果题目要求输出菱形的大小可以改变,那不就寄了吗?仔细思考,这种格式化输出的图案都是非常整齐的,我们当然需要用到循环语句。题目2:分别按如下三种形式,编程输出九九乘法表。首先第一步,我们要用暴力方法把九九乘法表的表头输出出来:

在一些问题中,问题往往会指定屏幕输出的格式,让我们以编程方式以固定格式输出某些模式或表格。 我们通过以下三个例子来说明格式化屏幕输出的方法。

问题1:请打印出以下图案

当然,我们可以用最笨的方法,直接按照标题风格暴力输出:

printf("   *\n");
printf("  ***\n");
printf(" *****\n");
printf("*******\n");
printf(" *****\n");
printf("  ***\n");
printf("   *\n");

太无聊了,你受不了吗?

如果标题要求输出菱形的大小可以改变,那不应该发吗?

仔细想想,这个格式化输出的模式非常整齐,我们当然需要使用循环语句。

首先,两层for循环跑不掉。 最外层的for循环用于控制输出行数,内层的for循环用于控制空格'*'。 一开始我们最好自己画一下,分析一下图案的构成。

我们发现前四行中'*'的个数是向下以奇数递增的,而后四行中'*'的个数是逐行减少的,所以我们只需要处理该模式即可前 4 行中,后 3 行稍作修改即可获得。

首先我们看一下空格和‘*’与行数的数量关系:

行数

空间

...

...

...

Nn(N为增量行总数)

2*n-1

显然,这个问题现在已经成为小学生的常规问题了,所以我们可以编写如下代码:

for (int n=1; n<=4; n++)//n为行数,4为总行数N
{
  for (int i=1; i<=4-n; i++)//输出'*'前的空格
  {
      printf(" ");
  }
  for (int i=1; i<=2*n-1; i++)//输出'*'
  {
      printf("*");
  }
  printf("\n");//输出完一行后要换行
}

运行结果为:

说明我们的想法是对的! 那么剩下的3行(N-1行)只需要稍微修改上面的代码即可。 修改后我们可以得到:

for (int n=1; n<=4; n++)//n为行数,4为递增总行数N
{
  for (int i=1; i<=4-n; i++)//输出'*'前的空格
  {
      printf(" ");
  }
  for (int i=1; i<=2*n-1; i++)//输出'*'
  {
      printf("*");
  }
  printf("\n");//输出完一行后要换行
}
for (int n=1; n<=3; n++)//n为行数,3为递减总行数N-1
{
  for (int i=1; i<=n; i++)//输出'*'前的空格
  {
      printf(" ");
  }
  for (int i=1; i<=7-2*n; i++)//输出'*',7为递增行中最后一行(第N行)的'*'的数量2*N-1
  {
      printf("*");
  }
  printf("\n");//输出完一行后要换行
}

运行结果为:

伟大的! 现在我们已经得到了我们想要的结果。 那么随着菱形大小的变化,我们只需要相应改变N的大小即可输出对应的图案。

题目2:根据以下三种形式,编程输出九十九乘法表。

同样,暴力的方法肯定可以做到,这里不再赘述。

首先,第一步,我们需要用暴力的方法输出九九乘法表的表头:

printf("1  2  3  4  5  6  7  8  9\n");
printf("-  -  -  -  -  -  -  -  -\n");

这三个表的第一个格式应该是比较简单的,因为他没有太多难以处理的空格。

其实我们只需要用两层循环,让九九乘法表的行头和列头遍历1~9,相乘就可以得到表中的每个值(行头是隐藏在这里)。 (行标题和列标题是指下表中的这些数字):

因此我们有:

for (int i=1; i<=9; i++)//行的表头递增
{
  for (int j=1; j<=9; j++)//列的表头递增
  {
      printf("%3d", i * j);
  }
  printf("\n");//每输出完一行后要换行
}

这样我们就得到了第一个表:

我们看第二个表:第二个表是左下三角形,右上三角形没有输出(或者输出为空白)。

查找规则,不难发现,当列头小于等于行头(j=i)时,输出数字,当列头小于行的标题 (j

for (int i=1; i<=9; i++)//行的表头递增
{
  for (int j=1; j<=9; j++)//列的表头递增
  {
      if (j>=i)
      {
          printf("%3d", i * j);
      }
      else
      {
          printf("   ");
      }
  }
  printf("\n");//每输出完一行后要换行
}

可以得到第三个表:

总结

以上就是本文的全部内容了,希望能够对您有所帮助,也希望您多多关注服务器之家的更多内容!

原文链接:

 
反对 0举报 0 收藏 0 打赏 0评论 0
 
更多>同类资讯
推荐图文
推荐资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报
Powered By DESTOON