专题:循环输出图形

目录

前言

1.正方形

2.直角三角形(左直角边)

循环变量初始化:i=0(行),j=0(列)循环条件:外循环i;内循环j<=i循环变量改变情况:i++,>

3.直角三角形(右直角边)

(2个内循环)循环变量初始化:i=1(行),j=1(列:打印*号),k=1(列:打印空格)循环条件:外循环i<=n;内循环(注意内循环的先后顺序)k<=n-1,j<=i循环变量改变情况:i++, j++,k++

(1个内循环+if-else)循环变量初始化:i=1,j=1内循环if-else语句打印"* "条件:i>n-j(否则打印"  ");循环变量改变情况:i++, j++

4.翻转直角三角形(左直角边)

循环变量初始化:i=n(行),j=0(列)循环条件:外循环i>0;内循环j循环变量改变情况:i--,>

5.翻转直角三角形(右直角边)

循环变量初始化:(2个内循环)i=n(行),j=0(列),k=0(列)循环条件:外循环i>0;内循环k,>

6.K形图案

K形图案可以分解为两个部分:翻转直角三角形 + 直角三角形需要注意的是,翻转直角三角形的最后一行和直角三角形的第一行重合仅需翻转直角三角形少打印最后一行 或者 直角三角形从第二行开始打印即可

7.金字塔

循环变量初始化:i=0(行),j=0(列:打印*号),k=n-1(列打印空格)循环条件:外循环ii, j<=i循环变量改变情况:i++, j++,k--;内循环k>

8.翻转金字塔

循环变量初始化:i=n(行),j=0(列:打印*号),k=0(列打印空格)循环条件:外循环i>0;内循环k,>

9.菱形 

菱形可以分解为两个部分:金字塔 + 翻转金字塔

10.箭形图案

箭形可以分解为两个部分:斜三角形 + 翻转斜三角形

第一部分:

循环变量初始化:i=0(行),j=0(列:打印*号),k=0(列打印空格)循环条件:外循环i<=n;内循环k,>

第二部分:

循环变量初始化:i=n(行),j=0(列:打印*号),k=n(列打印空格)循环条件:外循环i>0;内循环k>=i, j循环变量改变情况:i--,>

11.反斜线图案

循环变量初始化:i=0(行),kk=0(列)循环条件:外循环i;内循环>

12.正斜线图案

循环变量初始化:i=0(行),k=n(列)循环条件:外循环ii+1, 内循环结束后再打印"*\n"循环变量改变情况:i++,k--;内循环>

13.X形图案

循环变量初始化:i=0(行),j=0(列)循环条件:外循环i;内循环j

14.空心正方形

循环变量初始化:i=0(行),j=0(列)循环条件:外循环i0&&i0&&j)(否则打印">)&&(j>;内循环j

15.空心三角形

循环变量初始化:i=0(行),j=0(列)循环条件:外循环i;内循环j<=i,内循环if-else语句打印"*"条件:(i==n-1)||(j==0)||(j==i)(否则打印">

16.数字三角形

循环变量初始化:i=1(行),j=1(列)循环条件:外循环i<=n;内循环j<=i,内循环直接打印j的值就可以了,注意空格循环变量改变情况:i++,j++

总结



前言

        看到上面这些各式各样的精美图形,你是否会有尝试一下的冲动呢 ?本专题对部分常见的简单题做了一些分析和总结。


1.正方形

多组输入,对每组输入的n,输出一个n*n的正方形

 正方形演示代码
int main() {
    int n;
    while (~scanf("%d", &n))
    {
        int i, j;
        for (i = 0; i < n; i++)
        {
            for (j = 0; j < n; j++)
                printf("* ");
            printf("\n");
        }
    }
    return 0;
}


2.直角三角形(左直角边)

循环变量初始化:i=0(行),j=0(列)
循环条件:外循环i<n;内循环j<=i
循环变量改变情况:i++, j++

直角三角形(左直角边)演示代码
int main() {
    int n;
    while (~scanf("%d", &n))
    {
        int i, j;
        for (i = 0; i < n; i++)
        {
            for (j = 0; j <= i; j++)
                printf("* ");
            printf("\n");
        }
    }
    return 0;
}


3.直角三角形(右直角边)

(2个内循环)循环变量初始化:i=1(行),j=1(列:打印*号),k=1(列:打印空格)
循环条件:外循环i<=n;内循环(注意内循环的先后顺序)k<=n-1,j<=i
循环变量改变情况:i++, j++,k++

(1个内循环+if-else)循环变量初始化:i=1,j=1
内循环if-else语句打印"* "条件:i>n-j(否则打印"  ");
循环变量改变情况:i++, j++

        实际上很多2个内循环的问题都可以用if-else语句减少一个内循环

直角三角形(右直角边)演示代码
int main() {
    int i, j, k;
    while (~scanf("%d", &k))
    {
        for (i = 1; i <= k; i++)
        {
            for (j = 1; j <= k; j++)
            {
                if (i > k - j)
                    printf("* ");
                else
                    printf("  ");
            }
            printf("\n");
        }
    }
    return 0;
}


4.翻转直角三角形(左直角边)


循环变量初始化:i=n(行),j=0(列)
循环条件:外循环i>0;内循环j<i
循环变量改变情况:i--, j++

int main() {
    int n;
    while (~scanf("%d", &n))
    {
        int i, j;
        for (i = n; i > 0; i--)
        {
            for (j = 0; j < i; j++)
                printf("* ");
            printf("\n");
        }
    }
    return 0;
}


5.翻转直角三角形(右直角边)

循环变量初始化:(2个内循环)i=n(行),j=0(列),k=0(列)
循环条件:外循环i>0;内循环k<n-i, j<i
循环变量改变情况:i++, j++,k++

int main() {
    int n;
    while (~scanf("%d", &n))
    {
        int i, j, k;
        for (i = n; i > 0; i--)
        {
            for (k = 0; k < n-i; k++)
            {
                printf("  ");
            }
            for (j = 0; j < i; j++)
            {
                printf("* ");
            }
            printf("\n");
        }
    }
    return 0;
}


6.K形图案

K形图案可以分解为两个部分:翻转直角三角形 + 直角三角形
需要注意的是,翻转直角三角形的最后一行和直角三角形的第一行重合
仅需翻转直角三角形少打印最后一行 或者 直角三角形从第二行开始打印即可

int main() {
    int n;
    int i,j;
    while(~scanf("%d",&n))
    {
        for(i=0;i<=n;i++)
        {
            for(j=0;j<=n-i;j++)
                printf("* ");
            for(j=0;j<=i;j++)
                printf(" ");
            printf("\n");
        }
        for(i=n;i>=1;i--)
        {
            for(j=0;j<=n-i+1;j++)
                printf("* ");
            for(j=1;j<=i;j++)
                printf(" ");
            printf("\n");
        }
    }
    return 0;
}


7.金字塔

循环变量初始化:i=0(行),j=0(列:打印*号),k=n-1(列打印空格)
循环条件:外循环i<n;内循环k>i, j<=i
循环变量改变情况:i++, j++,k--

int main() {
    int n;
    while (~scanf("%d", &n))
    {
        int i, j, k;
        for (i = 0; i < n; i++)
        {
            for (k = n - 1; k > i; k--)
                printf(" ");
            for (j = 0; j <= i; j++)
                printf("* ");
            printf("\n");
        }
    }
    return 0;
}


8.翻转金字塔

循环变量初始化:i=n(行),j=0(列:打印*号),k=0(列打印空格)
循环条件:外循环i>0;内循环k<n-i, j<i
循环变量改变情况:i--, j++,k++

int main() {
    int n;
    while (~scanf("%d", &n))
    {
        int i, j, k;
        for (i = n; i > 0; i--)
        {
            for (k = 0; k < n - i; k++)
                printf(" ");
            for (j = 0; j < i; j++)
                printf("* ");
            printf("\n");
        }
    }
    return 0;
}


9.菱形 

菱形可以分解为两个部分:金字塔 + 翻转金字塔

int main() {
    int n;
    int i,j;
    while(~scanf("%d",&n))
    {
        for(i=0;i<=n;i++)
        {
            for(j=0;j<n-i;j++)
                printf(" ");
            for(j=0;j<=i;j++)
                printf("* ");
            printf("\n");
        }
        for(i=n;i>=1;i--)
        {
            for(j=0;j<=n-i;j++)
                printf(" ");
            for(j=1;j<=i;j++)
                printf("* ");
            printf("\n");
        }
    }
    return 0;
}

其实菱形也可以直接打印,但是难度更高 

我们以输入n=4为例子,详细解析一下菱形图案

i<2*n+1 行
j<2*n+1 列

 012345678
0    *
1   * *
2  * * *
3 * * * *
4* * * * *
5 * * * *
6  * * *
7   * *
8    *

整个菱形图案的中心点坐标为(n,n)
以(n,n)为中心,分别是一圈空格,一圈*号;
所有*号的存在范围边界线为菱形的4条边
这4条边内(包括边界线)的坐标点满足:|i-n| + |j-n| <= n ("|"为绝对值符号);
每一行*号和空格的间隔关系,与i、j、n的奇偶相关,找到它们的关系
(i + j + n)%2 == 0 就打印*号

请看代码
#include <stdio.h>
#include <math.h>

int main() {
    int arr[100][100] = { 0 };
    int n = 0;

    while (~scanf("%d", &n))
    {
        int i, j;
        int k = 2 * n + 1;
        for (i = 0; i < k; i++)
        {
            for (j = 0; j < k; j++)
            {
                if ((abs(i - n) + abs(j - n) <= n) && (n + i + j) % 2 == 0)
                    printf("*");
                else
                    printf(" ");
            }
            printf("\n");
        }       
    }
    return 0;
}


10.箭形图案

箭形可以分解为两个部分:斜三角形 + 翻转斜三角形

第一部分:

循环变量初始化:i=0(行),j=0(列:打印*号),k=0(列打印空格)
循环条件:外循环i<=n;内循环k<n-i, j<i+1
循环变量改变情况:i++, j++,k++

第二部分:

循环变量初始化:i=n(行),j=0(列:打印*号),k=n(列打印空格)
循环条件:外循环i>0;内循环k>=i, j<i
循环变量改变情况:i--, j++,k--

int main()
{
    int n;
    while (~scanf("%d", &n))
    {
        int i, j, k;
        for (i = 0; i <= n; i++)
        {
            for (k = 0; k < n - i; k++)
                printf("  ");
            for (j = 0; j < i + 1; j++)
                printf("*");
            printf("\n");
        }

        for (i = n; i > 0; i--)
        {
            for (k = n; k >= i; k--)
                printf("  ");
            for (j = 0; j < i; j++)
                printf("*");
            printf("\n");
        }
    }
    return 0;
}


11.反斜线图案

循环变量初始化:i=0(行),kk=0(列)
循环条件:外循环i<n;内循环 k<i, 内循环结束后再打印"*\n"
循环变量改变情况:i++,k++

int main()
{
    int n;
    while (~scanf("%d", &n))
    {
        int i, k;
        for (i = 0; i < n; i++)
        {
            for (k = 0; k < i; k++)
                printf(" ");
            printf("*\n");
        }
    }
    return 0;
}


12.正斜线图案

循环变量初始化:i=0(行),k=n(列)
循环条件:外循环i<n;内循环 k>i+1, 内循环结束后再打印"*\n"
循环变量改变情况:i++,k--

int main() {
    int n, i, k;
    while (~scanf("%d", &n))
    {
        for (i = 0; i < n; i++)
        {
            for (k = n; k > i + 1; k--)
                printf(" ");
            printf("*\n");
        }
    }
    return 0;
}


13.X形图案

循环变量初始化:i=0(行),j=0(列)
循环条件:外循环i<n;内循环j<n,内循环if-else语句打印"*"条件:i==j || i+j==num-1(否则打印" ")
循环变量改变情况:i++,j++

int main()
{
    int n;
    while (~scanf("%d", &n))
    {
        int i, j;
        for (i = 0; i < n; i++)
        {
            for (j = 0; j < n; j++)
            {
                if (i == j || i + j == n - 1)
                    printf("*");
                else
                    printf(" ");
            }
            printf("\n");
        }

    }
    return 0;
}


14.空心正方形

循环变量初始化:i=0(行),j=0(列)
循环条件:外循环i<n;内循环j<n,内循环if-else语句打印"*"条件:(i>0&&i<n-1)&&(j>0&&j<n-1)(否则打印" ")
循环变量改变情况:i++,j++

int main() {
    int n;
    while (~scanf("%d", &n))
    {
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < n; j++)
            {
                if ((i > 0 && i < n - 1) && (j > 0 && j < n - 1))
                    printf("  ");
                else
                    printf("* ");
            }
            printf("\n");
        }
    }
    return 0;
}


15.空心三角形

循环变量初始化:i=0(行),j=0(列)
循环条件:外循环i<n;内循环j<=i,内循环if-else语句打印"*"条件:(i==n-1)||(j==0)||(j==i)(否则打印" ")
循环变量改变情况:i++,j++

int main() {
    int n;
    while (~scanf("%d", &n))
    {
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j <= i; j++)
            {
                if ((i==n-1)||(j==0)||(j==i))
                    printf("* ");
                else
                    printf("  ");
            }
            printf("\n");
        }
    }
    return 0;
}


16.数字三角形

循环变量初始化:i=1(行),j=1(列)
循环条件:外循环i<=n;内循环j<=i,内循环直接打印j的值就可以了,注意空格
循环变量改变情况:i++,j++

int main() {
    int n;
    while (~scanf("%d", &n))
    {
        for (int i = 1; i <= n; i++)
        {
            for (int j = 1; j <= i; j++)
            {
                printf("%d ", j);
            }
            printf("\n");
        }
    }
    return 0;
}


总结

        循环输出图形的专题就到这里了,希望能够对你有所帮助,感谢你的阅读!

  • 18
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 17
    评论
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

φ冰霰ξ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值