关于循环语句打印形状的一些思考

比如要打印的图形如下
   *
  * * 
 * * *
* * * *

首先观察图形一共有四行,每行都有星号,可以考虑用一个循环语句先打印四行星号
for(i=0;i<4;i++)

{

     printf("*\n");
}
得到图形如下
*
*
*
*

星号的个数每行都不止一个,可以考虑在加一个循环,再给234列每一列打上1个星号,得到的应该是个4行4列都是星号的图形,由于循环执行的顺序,实际上第一个for循环打印星号在最后执行,第二个for循环可以看作给123列每一列打上1个星号。
for(i=0;i<4;i++)
{
        for(j=0;j<3;j++)
       {
        printf("*");
      }
    printf("*\n");

}
****
****
****
****

观察到星号之间有一个空格,并且每行星星的个数都是星星所在行数,可以在打印出来的*后添加空格,上面的程序是不管哪一行,每行都打印4列,现在只打印星星所在行数的列数,改动第二个for循环即打印列的语句,使其循环次数不得超过所在行数。
for(i=0;i<4;i++)
{
        for(j=0;j<i;j++)
       {
        printf("* ");
      }
    printf("*\n");
}
*
* *
* * *
* * * *

此时已经与所要求打印的图形十分接近了,考虑到图形右边的空格都已经打印出来,只剩图形左边的空格未打印,观察图形左边空格的规律,第1行打印3个,第2行打印2个,第3行打印1个,第4行打印0个,可以得到所在行数加上空格数等于总行数,由于i从0开始计数而不是从1开始计数,总行数相应减少1,上面说过要打印列就需多添加一条循环语句,这里打印的空格在打印的星号空格之前,因此在打印列星号循环之前加上循环。
for(i=0;i<4;i++)
{
       for(k=0;k<3-i;k++)
       {
            printf(" ");
      }
      for(j=0;j<i;j++)
       {
        printf("* ");
      }
    printf("*\n");
}

要推广到打印任意行任意列的上述图形,所需做的改动是行循环的限制条件和列循环的限制条件。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值