通过循环控制打印图案总结出的两种方法

“明月岂能怀悲风,唯现微光指其路。”

要想通过循环控制打印图案,且不使用数组可以大概分为两种情况。

第一种每一行要打印的图案如‘*’是在三个以内时,在双层循环中找到第一层和第二层控制循环的数字的联系用等或不等条件语句控制字符输出。

如题

KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的X形图案。

输入描述:

多组输入,一个整数(2~20),表示输出的行数,也表示组成“X”的反斜线和正斜线的长度。

输出描述:

针对每行输入,输出用“*”组成的X形图案。

示例1

输入:

5

输出:

*   *
 * * 
  *  
 * * 
*   *
​
#include<stdio.h>
int main()
{
    int x = 0;
    while (scanf("%d", &x) != EOF)
    {
        int j = 0;
        int i = x;
        int n = x;
        for (; j < i; j++, n--)
        {
            x = i;
            for (; x > 0; x--)
            {
                if (x == j + 1 && j + 1 != n)//在此找到i,j,x等或不等的关系打印即可
                {
                    printf("*");
                }
                else if (x == n)
                    printf("*");
                else
                    printf(" ");

            }
            printf("\n");
        }
    } return 0;
}

​

再如题

描述

KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的“空心”三角形图案。

输入描述:

多组输入,一个整数(3~20),表示输出的行数,也表示组成三角形边的“*”的数量。

输出描述:

针对每行输入,输出用“*”组成的“空心”三角形,每个“*”后面有一个空格。

示例1

输入:

4

输出:

*       
* *     
*   *   
* * * * 
#include<stdio.h>
int main()
{
    int x = 0;
    int i = 1;
    int j = 1;
    int n = 1;
    while (scanf("%d", &x) != EOF)
    {
        i = 1;
        for (; i <= x; i++)
        {
            j = 1; n = 1;
            if (i != x)
            {
                for (; j < 2 * x; j++)
                {
                    if (j == 1 || j == 2 * i - 1)//在这里找到i,j的联系
                        printf("*");
                    else
                        printf(" ");
                }
                printf("\n");
            }
            else
                for (; n <= x; n++)//当然最后一行全满了,就不能用这个方法
                    printf("* ");

        }
        printf("\n");
    }

    return 0;
}

总结:其实就是找控制循环变量的相等关系,可以多带几种情况进去,列出方程求解,或者用矩阵找联系。

第二种则是在第二层循环中再加一个变量使第二层循环有两个变量控制打印,一个控制打印前面的空格一个负责控制打印字符。

描述

KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的金字塔图案。

输入描述:

多组输入,一个整数(2~20),表示金字塔边的长度,即“*”的数量,,也表示输出行数。

输出描述:

针对每行输入,输出用“*”组成的金字塔,每个“*”后面有一个空格。

示例1

输入:

4

输出:

   * 
  * * 
 * * * 
* * * * 
#include<stdio.h>
int main()
{
    int x=0;
    int i=1;
    int j=1;
    int k=0;
    while(scanf("%d",&x)!=EOF)
    {i=1;
        for(;i<=x;i++)
    {j=1;k=0;
        for(;j<=x;j++)//控制打印空格
        {
            if(j<=x-i)
                printf(" ");
            
        }
       for(;k<i;k++)//控制打印*
           printf("* ");
        printf("\n");
    }
    }
    
    return 0;
}

再如这部分比较难的一题,也就是打印出一颗圣诞树。其实逻辑跟上面的三角形完全一致,控制打空格的循环变量甚至不用怎么改变只要把打“*”分成三种不同的情况打印了三次。

情况一:“*     ”格三行就打。个数即用一个循环变量控制跟上面三角行逻辑一致

情况二:”**   “格三行打。个数逻辑同上。

情况三:”*** “格三行打。个数逻辑同上。

描述

今天是圣诞节,牛牛要打印一个漂亮的圣诞树送给想象中的女朋友,请你帮助他实现梦想。

输入描述:

输入圣诞树的高度h,1<= h <= 1001<=h<=100

输出描述:

输出对应的圣诞树

示例1

输入:

1

输出:

  *  
 * * 
* * *
  *

说明:

 

示例2

输入:

2

输出:

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

说明:

 

#include<stdio.h>
int main()
{
    int x = 0;
    int i = 0;
    int j = 0;
    int k = 0;
    int w = 0;
    while (scanf("%d", &x) != EOF)
    {
        i = 0;
        for (; i <4 * x; i++)
        {
            if (i < 3 * x)
            {
                    j = 0; k = 0; int n = 0; w = 0;
                    for (; j < 3 * x; j++)
                    {
                        if (j < 3 * x - i - 1)//打印空格
                            printf(" ");

                    }
                    if (i % 3 == 0)
                    {
                        for (; k <=(i/3); k++)//打印第一种情况
                            printf("*     ");
                        
                    }
                    else if (i % 3 == 1)
                    {
                        for (; n <=(i/3); n++)//第二种情况
                            printf("* *   ");
                   
                    }
                    else if (i % 3 == 2)
                    {
                        for (; w<=(i/3); w++)//第三种情况
                            printf("* * * ");
                        
                    }printf("\n");
                
    
            }
            else
            {
                w = 0;
                for (; w <3*x; w++)//下面的树干
                {
                    if (w == 3 * x-1)
                        printf("*");
                    else
                        printf(" ");
                    
                }printf("\n");
            }
        }
    }

    return 0;
}

在此,祝好。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值