C语言学习——打印各种图形

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站:人工智能教程 

目录

1.打印直角三角形

2.打印翻转金字塔

3.打印菱形

4.打印K形

5.打印箭形

6.打印空心正方形

7.打印“空心”三角形图案

8.打印数字三角形

9.打印X形

10.打印空心菱形

11. 打印杨辉三角

1.打印直角三角形


老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的带空格直角三角形图案。  输入描述: 多组输入,一个整数(2~20),表示直角三角形直角边的长度,即“*”的数量,也表示输出行数。  输出描述: 针对每行输入,输出用“*”组成的对应长度的直角三角形,每个“*”后面有一个空格。

示例1

输入:
5

输出:
        * 
      * * 
    * * * 
  * * * * 
* * * * *

示例2

输入:
4

输出:
      * 
    * * 
  * * * 
* * * *
 

#include <stdio.h>

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

2.打印翻转金字塔

老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的翻转金字塔图案。 输入描述: 多组输入,一个整数(2~20),表示翻转金字塔边的长度,即“*”的数量,也表示输出行数。 输出描述: 针对每行输入,输出用“*”组成的金字塔,每个“*”后面有一个空格。

示例1

输入:
5

输出:
* * * * * 
 * * * * 
  * * * 
   * * 
    * 

示例2

输入:
6

输出:
* * * * * * 
 * * * * * 
  * * * * 
   * * * 
    * * 
     * 

#include <stdio.h>

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

3.打印菱形

老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的菱形图案。 输入描述: 多组输入,一个整数(2~20)。  输出描述: 针对每行输入,输出用“*”组成的菱形,每个“*”后面有一个空格。

示例1

输入:
2

输出:
  * 
 * * 
* * * 
 * * 
  * 

示例2

输入:
3

输出:
   * 
  * * 
 * * * 
* * * * 
 * * * 
  * * 
   * 

示例3

输入:
4

输出:
    * 
   * * 
  * * * 
 * * * * 
* * * * * 
 * * * * 
  * * * 
   * * 
    * 

#include <stdio.h>

int main() 
{
    int n=0;
    int i=0,j=0;
    while(~scanf("%d",&n))
    {
           	//打印上三角
	    for(i=1;i<n;i++)
	    {
		    for(j=1; j<=n-i; j++)
		    {
		    	printf(" ");
		    }
		    for(j=1; j<=2*i-1; j++)
		    {
		    	printf("*");
		    }
		 printf("\n");
	   }
	
	    //打印倒三角
	    for(i; i>=1; i--)
	    {
		    for(j=1; j<=n-i; j++)
		    {
		    	printf(" ");
		    }
		    for(j=1; j<=2*i-1; j++)
		    {
			    printf("*");
		    }
		    printf("\n");
	    }

            
    }
    return 0;
}

4.打印K形

老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的K形图案。 输入描述: 多组输入,一个整数(2~20)。  输出描述: 针对每行输入,输出用“*”组成的K形,每个“*”后面有一个空格。

示例2

输入:
2

输出:
* * * 
* * 

* * 
* * * 

示例2

输入:
3

输出:
* * * * 
* * * 
* * 

* * 
* * * 
* * * * 


示例3

输入:
4

输出:
* * * * * 
* * * * 
* * * 
* * 

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

#include <stdio.h>

int main()
{
    int n=0;
    while(~scanf("%d",&n))
    {
        int i=0,j=0;
        //打印上一行
        for(i=0;i<n;i++)
        {
            for(j=0;j<n+1-i;j++)
            {
                printf("* ");
            }
            printf("\n");
        }
        //打印下一行
        for(i=0;i<n+1;i++)
        {
            for(j=0;j<i+1;j++)
            {
                printf("* ");
            }
            printf("\n");
        }

    }
    return 0;
}

5.打印箭形

老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的箭形图案。 输入描述: 本题多组输入,每行一个整数(2~20)。 输出描述: 针对每行输入,输出用“*”组成的箭形。

示例1

输入:
2


输出:
    *
  **
***
  **
    *


示例2

输入:
3


输出:
      *
    **
  ***
****
  ***
    **
      *


示例3

输入:
4


输出:
        *
      **
    ***
  ****
*****
  ****
    ***
      **
        *

#include <stdio.h>

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

        //下层
          for(i=0;i<n+1;i++)
        {
            for(j=0;j<i;j++)
            {
                printf("  ");
            }
            for(j=0;j<n+1-i;j++)
            {
                printf("*");
            }
            printf("\n");
        }

    }

}

6.打印空心正方形

老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的“空心”正方形图案。 输入描述: 多组输入,一个整数(3~20),表示输出的行数,也表示组成正方形边的“*”的数量。 输出描述: 针对每行输入,输出用“*”组成的“空心”正方形,每个“*”后面有一个空格。

示例1

输入:
4

输出:
* * * * 
*     * 
*     * 
* * * * 


示例2

输入:
5


输出:
* * * * * 
*       * 
*       * 
*       * 
* * * * *

#include <stdio.h>


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

7.打印“空心”三角形图案

老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的“空心”三角形图案。 输入描述: 多组输入,一个整数(3~20),表示输出的行数,也表示组成三角形边的“*”的数量。 输出描述: 针对每行输入,输出用“*”组成的“空心”三角形,每个“*”后面有一个空格。

示例1:

4

输出:
*       
* *     
*   *   
* * * * 

示例2

输入:
5

输出:
*         
* *       
*   *     
*     *   
* * * * *
 

#include <stdio.h>

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

8.打印数字三角形

老师给他出了一系列打印图案的练习,该任务是打印用数字组成的数字三角形图案。 输入描述: 多组输入,一个整数(3~20),表示数字三角形边的长度,即数字的数量,也表示输出行数。 输出描述: 针对每行输入,输出用数字组成的对应长度的数字三角形,每个数字后面有一个空格。

示例1:

输入:
4


输出:
1
1 2
1 2 3
1 2 3 4


示例2

输入:
5


输出:
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
 

#include <stdio.h>


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

    }
    return 0;
}

9.打印X形

老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的X形图案。 输入描述: 多组输入,一个整数(2~20),表示输出的行数,也表示组成“X”的反斜线和正斜线的长度。 输出描述: 针对每行输入,输出用“*”组成的X形图案。

示例1

输入:
5

输出:
*   *
 * * 
  *  
 * * 
*   *

示例2

输入:
6

输出:
*    *
 *  * 
  **  
  **  
 *  * 
*    *


 

#include <stdio.h>

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

10.打印空心菱形

输入一个奇数 n,输出一个由 * 构成的 n 阶空心菱形。

输入格式:一个奇数 n。

输出格式:输出一个由 * 构成的 nn 阶实心菱形。

输入样例:
5
输出样例:
  *
 * *
*   *
 * *
  * 
输入样例:
11
输出样例:
     *
    * *
   *   *
  *     *
 *       *
*         *
 *       *
  *     *
   *   *
    * *
     *

算法:

到中心单元的曼哈顿距离
在二维空间中 i,ji,j 两点的曼哈顿距离可以表示为 d(i,j)=|xi−xj|+|yi−yj|d(i,j)=|xi−xj|+|yi−yj| (横、纵坐标差值的绝对值之和)。

此题目可认为是使得到中心单元的曼哈顿距离满足一定条件即打印星号。

34854d9ae3834ce2a15c86f6b5ea7d3c.png

上图示例输入为 n=5时的情况,使用不同颜色区分各单元到中心单元的曼哈顿距离。输入奇数 nn,坐标 (n/2,n/2)表示 n∗n方阵中的中心单元。

对于满足题目条件的任意菱形,总是会出现相似的结构。菱形即为与此 n∗n 方阵中心的曼哈顿距离不超过 n/2的所有单元的集合。

因此,打印‘*’的判断条件是 abs(i−n/2)+abs(j−n/2)<=n/2。

#include<iostream>
#include<cmath>

using namespace std;

int main()
{
	int n;
	cin>>n;
	int x=n/2,y=n/2;//中心坐标 
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n;j++)
		{
			if ( abs(i-x) + abs(j-y) == n / 2 ) cout << "*";
            else cout << " ";
		}	
		cout<<endl;
	}
	 
	return 0;
}

11. 打印杨辉三角

KiKi知道什么叫杨辉三角之后对杨辉三角产生了浓厚的兴趣,他想知道杨辉三角的前n行,请编程帮他解答。杨辉三角,本质上是二项式(a+b)的n次方展开后各项的系数排成的三角形。其性质包括:每行的端点数为1, 一个数也为1;每个数等于它左上方和上方的两数之和。

输入描述:

第一行包含一个整数数n。 (1≤n≤30)

输出描述:

包含n行,为杨辉三角的前n行,每个数输出域宽为5。

示例1

输入:

6

输出: 

    1
    1    1
    1    2    1
    1    3    3    1
    1    4    6    4    1
    1    5   10   10    5    1
#include <stdio.h>

int main() 
{
    int n=0;
    scanf("%d",&n);
    int arr[30][30]={0};
    int i=0,j=0;
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
          if(j==0||i==j)//控制俩边为1
            {
                arr[i][j]=1;
            }
            if(i>1&&j>0)//控制中间内容
            {
                arr[i][j]=arr[i-1][j-1]+arr[i-1][j];
            } 
        }
    } 
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
        	if(i>=j)//打印下三角部分
			{
				 printf("%5d",arr[i][j]);//注意域宽
			} 
           
        }
        printf("\n");
    }
    return 0;
}

12.打印爱心

效果:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char* argv[])
{
    float x, y, a;
    for (y = 1.5; y > -1.5; y -= 0.1) 
    {
        for (x = -1.5; x < 1.5; x += 0.05) 
        {
            a = x * x + y * y - 1;
            putchar(a * a * a - x * x * y * y * y <= 0.0 ? '*' : ' ');
        }
        //效果:
        system("color 0c");
        putchar('\n');
    }
    printf("\t\t\t  打印爱心");
    printf("\n\n");
return 0;
}

  • 21
    点赞
  • 204
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

妄北y

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

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

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

打赏作者

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

抵扣说明:

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

余额充值