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

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

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| (横、纵坐标差值的绝对值之和)。

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

上图示例输入为 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;
}


目录
相关文章
|
5月前
|
存储 C语言
C语言学习记录——动态内存函数介绍(malloc、free、calloc、realloc)
C语言学习记录——动态内存函数介绍(malloc、free、calloc、realloc)
326 1
ly~
|
1月前
|
存储 缓存 算法
如何使用 C 语言实现高效的图形渲染?
使用 C 语言实现高效图形渲染可从选择图形库、优化数据结构与算法及利用硬件加速等方面着手。推荐使用 OpenGL 或 SDL 进行图形绘制。OpenGL 功能强大,支持 2D 和 3D 图形,需熟悉其绘图流程;SDL 则提供简单易用的接口。优化方面,合理选择数据结构如数组、哈希表等,使用高效算法如 LOD 可提升渲染速度。利用 GPU 加速和多线程渲染亦能显著提高效率。此外,纹理映射和管理也是关键,适当加载和缓存纹理,减少不必要的绘制操作如视口裁剪和背面剔除,均可增强渲染性能。
ly~
53 5
|
1月前
|
C语言
教你快速理解学习C语言的循环与分支
教你快速理解学习C语言的循环与分支
15 0
|
3月前
|
Linux 开发工具 C语言
C语言与图形编程进阶
C语言与图形编程进阶
38 0
|
3月前
|
编译器 C语言
C语言函数的学习
掌握函数的使用是学习C语言的关键一环,理解和应用这些基本的函数概念将使你能够更有效地利用C语言的强大功能。
23 0
|
5月前
|
存储 程序员 Go
|
5月前
|
存储 编译器 C语言
c语言学习历程【1】
c语言学习历程【1】
68 1
|
5月前
|
C语言
C语言学习记录——通讯录(静态内存)
C语言学习记录——通讯录(静态内存)
32 2
|
5月前
|
存储 C语言
C语言学习记录——联合体(共用体、特点、用法、联合体大小计算)
C语言学习记录——联合体(共用体、特点、用法、联合体大小计算)
77 2
|
5月前
|
测试技术 C语言
数据结构学习记录——树习题—Tree Traversals Again(题目描述、输入输出示例、解题思路、解题方法C语言、解析)
数据结构学习记录——树习题—Tree Traversals Again(题目描述、输入输出示例、解题思路、解题方法C语言、解析)
45 1