✨今天,我用C语言打印世界万物✨

目录

一,写在前面

二,习题

1,线段图案

2, 正方形图案

3, 直角三角形图案

4,翻转直角三角形图案

5,带空格直角三角形图案

6,金字塔图案

7,翻转金字塔图案

8,菱形图案

9, K形图案

10,箭形图案

11,反斜线形图案

12,正斜线形图案

13,X形图案

14,空心正方形图案

15,空心三角形图案


一,写在前面

在刷牛客网习题时,突然发现了一系列打印图形的练习题,发现了其中打印的魅力和算法的精髓,世间万物,只要你能写出合理的代码,都可以顺利的打印。如果你认为此篇博客写的不错的话,求收藏,求点赞,求评论。废话不多说,让我们学习起来吧!!!

二,习题

1,线段图案

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

输入:

10

2

输出:

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

这道题还是比较简单,算是入门级别,会循环就可以了

#include
int main()
{
    int i = 0;
    int j = 0;
    while(scanf("%d",&j) != EOF)
    {
    for(i = 0; i < j; i++)
    {
     printf("*");
    }
    printf("\n");
    }
    return 0;
}

2, 正方形图案

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

输入:

4

输出:

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

输入:

5

输出:

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

和第一题一样,都是比较简单的,但要主要循环的限制,下面两道题就会从这里开始衍生。

#include
int main()
{
    int a,j;
    while(scanf("%d", &a) != EOF)
    {
        int i = 0;
        for(i = 0; i < a; i++)
        {
            for(j = 0; j < a; j++)
            {
                printf("* ");
            }
            printf("\n");
        }
    }
    return 0;
}

3, 直角三角形图案

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

输入:

4

输出:

*
* *
* * *
* * * *

输入:

5

输出:

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

当我们只打印单个图形不是拼接的图形时,我们打印就应该从两个循环嵌套开始,我们经过观察发现第二层循环列受循环控制。列随行的增加而增加* 的个数,直角三角形所占的位置相当于占了4*4正方形的一般位置,由if语句判断打印*.

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

4,翻转直角三角形图案

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

输入:

5

输出:

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

输入:

6

输出:

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

倒三角比上一道题相比还算简单,观察发现 n - i控制列的*就可以完成打印

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

5,带空格直角三角形图案

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

输入:

5

输出:

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

输入:

4

输出:

      * 
    * * 
  * * * 
* * * *

老样子,还是与完整正方形相比找*下表的规律即可,这次是先打印空格,再打印*,按部就班。

#include
int main()
{
   int n,i,j;
    while((scanf("%d",&n))!=EOF)
    {
        for(i=0;i

6,金字塔图案

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

输入:

4

输出:

   * 
  * * 
 * * * 
* * * * 

输入:

5

输出:

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

此题需要三次循环,第一次控制行数,第二次打印空格,第三次控制* 。注意,第三次控制的是* ,方便对齐。

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

7,翻转金字塔图案

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

输入:

5

输出:

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

输入:

6

输出:

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

此题有多种打印方法,我参考榜一的解法找到了j < i这个控制非常秒,打印图形就是数学找规律的问题,两次循环直接按照正方形打印,j < i控制图形。

#include
int main()
{
	int n;
	while (scanf("%d\n", &n) != EOF)
	{

		int i, j;
		for (i = 0; i < n; i++)
		{
			for (j = 0; j < n ; j++)
			{
				if (j < i)
				{
					printf(" ");
				}
				else
				{
					printf("* ");
				}
			}
			printf("\n");
		}
	}
	return 0;
}

8,菱形图案

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

输入:

2

输出:

  * 
 * * 
* * * 
 * * 
  * 

输入:

3

输出:

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

经过上面的两个练习,我们对于这种菱形打印无非就是分开打印上下两部分,具体可以参考上面的思路,注意循环控制的列数。

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

9, K形图案

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

输入:

2

输出:

* * * 
* * 
* 
* * 
* * * 

输入:

3

输出:

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

对于这种组合图形,就是再一个大循环中逐步打印,找规律,就相当于在一个循环中打印两个三角形,主要还是找规律。

#include
int main()
{
	int n;
	while (scanf("%d", &n) != EOF)
	{
		int i, j;
		for (i = 0; i < n + 1; i++)
		{
			for (j = 0; j 

10,箭形图案

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

输入:

2

输出:

    *
  **
***
  **
    *

输入:

3

输出:

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

这个算是相比与前面算复杂一点,因为它找规律的地方比较繁琐,两个大循环,里面包含打印的两个循环,我第一次做也比较困难,规律找出来打印总是错误,我也一直在练习。找准规律,自然就迎刃而解了。

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

11,反斜线形图案

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

输入:

4

输出:

*   
 *  
  * 
   *

输入:

5

输出:

*    
 *   
  *  
   * 
    *

我们发现*就是正方形的斜对角线,两个循环加一个判断语句就可解决。

#include
int main()
{
	int n;
	while (scanf("%d", &n) != EOF)
	{
		int i, j;
		for (i = 0; i < n ; i++)
		{
			for (j = 0; j < n ; j++)
			{
				if (i == j)
				{
					printf("*");
				}
				else
				{
					printf(" ");
				}
			}
			printf("\n");
		}
	}
	return 0;
}

12,正斜线形图案

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

输入:

4

输出:

   *
  * 
 *  
*   

输入:

5

输出:

    *
   * 
  *  
 *   
* 

我参考一部分博主的解法发现第二循环(j = n; j > i + 1; j--)比较好。

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

13,X形图案

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

输入:

5

输出:

*   *
 * * 
  *  
 * * 
*   *

输入:

6

输出:

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

此题就是上面两道题的结合,判断语句判读两个条件即可。

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

14,空心正方形图案

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

输入:

4

输出:

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

输入:

5

输出:

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

这道题就是找正方形的下标,循环控制即可。

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

15,空心三角形图案

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

输入:

4

输出:

*       
* *     
*   *   
* * * * 

输入:

5

输出:

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

找到三角的三条边的规律即可

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