专题:循环输出图形

目录

前言

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张图片

专题:循环输出图形_第2张图片

专题:循环输出图形_第3张图片

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


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;
}

专题:循环输出图形_第4张图片


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

循环变量初始化:i=0(行),j=0(列)
循环条件:外循环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;
}

专题:循环输出图形_第5张图片


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;
}

专题:循环输出图形_第6张图片


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


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

专题:循环输出图形_第7张图片


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

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

专题:循环输出图形_第8张图片


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;
}

专题:循环输出图形_第9张图片


7.金字塔

循环变量初始化:i=0(行),j=0(列:打印*号),k=n-1(列打印空格)
循环条件:外循环ii, 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;
}

专题:循环输出图形_第10张图片


8.翻转金字塔

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

专题:循环输出图形_第11张图片


9.菱形 

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

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

专题:循环输出图形_第12张图片

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

我们以输入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 
#include 

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;
}

专题:循环输出图形_第13张图片


10.箭形图案

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

第一部分:

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

第二部分:

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

专题:循环输出图形_第14张图片


11.反斜线图案

循环变量初始化:i=0(行),kk=0(列)
循环条件:外循环i 循环变量改变情况: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;
}

专题:循环输出图形_第15张图片


12.正斜线图案

循环变量初始化:i=0(行),k=n(列)
循环条件:外循环ii+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;
}

专题:循环输出图形_第16张图片


13.X形图案

循环变量初始化:i=0(行),j=0(列)
循环条件:外循环i 循环变量改变情况: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;
}

专题:循环输出图形_第17张图片


14.空心正方形

循环变量初始化:i=0(行),j=0(列)
循环条件:外循环i0&&i0&&j 循环变量改变情况: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;
}

专题:循环输出图形_第18张图片


15.空心三角形

循环变量初始化:i=0(行),j=0(列)
循环条件:外循环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;
}

专题:循环输出图形_第19张图片


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;
}

专题:循环输出图形_第20张图片


总结

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

你可能感兴趣的:(c语言,学习)