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


目录
相关文章
|
28天前
|
存储 编译器 C语言
初识C语言——详细入门(系统性学习day4)
初识C语言——详细入门(系统性学习day4)
|
1月前
|
编译器 程序员 开发工具
c语言从入门到实战——在系统学习C语言之前所需要了解的知识
C语言是一种通用的、过程式的计算机编程语言,支持结构化编程、词汇变量作用域和递归等功能,其设计提供了低级别的存取权限,并且要求程序员管理所有的内存细节。C语言的基本构成包括数据类型(如整型、浮点型、字符型等)、运算符(如算术运算符、关系运算符、逻辑运算符等)、控制结构(如顺序结构、选择结构、循环结构等)以及函数等。此外,C语言还提供了指针的概念,这是其他许多编程语言所不具备的。指针是一个变量,其值为另一个变量的地址,通过指针可以间接访问和操作内存中的数据。C语言也支持数组、结构体、联合体等复合数据类型,以及文件操作、动态内存分配等高级功能。
49 0
|
1月前
|
存储 C语言
通俗易懂的学习C语言中输入一组数并找出其最大值
通俗易懂的学习C语言中输入一组数并找出其最大值
|
4月前
|
程序员 编译器 人机交互
深入学习《c语言函数》
深入学习《c语言函数》
41 0
|
4月前
|
编译器 C语言
你的函数使用对了吗?-------C语言函数学习(3)详解
你的函数使用对了吗?-------C语言函数学习(3)详解
48 1
|
4月前
|
存储 C语言
打通你学习C语言的任督二脉-函数栈帧的创建和销毁(上)
打通你学习C语言的任督二脉-函数栈帧的创建和销毁(上)
44 0
|
4月前
|
算法 C语言
你会使用函数的递归和迭代吗?----------C语言函数学习(4)详解
你会使用函数的递归和迭代吗?----------C语言函数学习(4)详解
75 1
|
30天前
|
机器学习/深度学习 人工智能 Java
学习Python语言好还是C语言好
学习Python语言好还是C语言好
20 0
|
1月前
|
C语言
###51单片机学习-----如何通过C语言运用延时函数设计LED流水灯
###51单片机学习-----如何通过C语言运用延时函数设计LED流水灯
68 0
|
1月前
|
C语言
二次学习C语言补缺(day1)
二次学习C语言补缺(day1)
17 2