zoukankan      html  css  js  c++  java
  • 【C语言】用C语言输出“心形”图案

    在你们的世界里,是不是觉得程序猿一点浪漫都不懂?其实不是的,程序猿的世界也是很浪漫滴!

    傻瓜版

    int main()
    {
        printf("");
        return 0;
    }

    高级版

    //版本一:单个字符的心形图案
    #include <stdio.h>
     
    int main(void)
    {
        float a,x,y;
        for(y=1.5f; y>-1.5f; y-=0.1f)
        {
            for(x=-1.5f; x<1.5f; x+=0.05f)
            {
                a = x*x+y*y-1;
                //这里的@符号即为打印出的心形图案符号,可更改
                char ch = a*a*a-x*x*y*y*y<=0.0f?'@':' '; 
                putchar(ch);  
                //或者putchar(a*a*a-x*x*y*y*y<=0.0f?'*':' ');
            }
            printf("
    ");
        }
        
        return 0;
    }

    //空心版
    #include <stdio.h>
    #include <math.h>
    
    // The first heart shape in hollow
    // (x^2+y^2-1)^3 - x^2*y^3 = 0
    // y ~ (-1.1 , 1.3 )
    // x ~ (-1.2 , 1.2 )
    int main() {
    
        for (float y = 1.3; y >= -1.1; y -= 0.06)
        {
            for (float x = -1.2; x <= 1.2; x += 0.025)
            {
                if (pow((x * x + y * y - 1.0), 3) - x * x * y * y * y <= 0.0)
                    printf(" ");
                else
                    printf("*");
            }
            printf("
    ");
        }
    
        return 0;
    }

    //版本二:可用多个字符组成打印
    #include <stdio.h>
    
    int main(void)
    {
        float f, x, y, z;
        for (y = 1.5f; y > -1.5f; y -= 0.1f)
        {
            for (x = -1.5f; x < 1.5f; x += 0.05f)
            {
                z = x * x + y * y - 1;
                f = z * z * z - x * x * y * y * y;
                putchar(f <= 0.0f ? "lihuan"[(int)(f * -8.0f)] : ' ');
                //这里的lihuan字符可更改成符号或其他字母,汉字不行,图案会变形
            }
            printf("
    ");
        }
    
        return 0;
    }

    //加颜色版
    #include <stdio.h> int main(int argc, char* argv[]) { float f, x, y, z; for (y = 1.5f; y > -1.5f; y -= 0.1f) { for (x = -1.5f; x < 1.5f; x += 0.05f) { z = x * x + y * y - 1; f = z * z * z - x * x * y * y * y; // =================================== printf("33[47m"); char buf[100] = { "lihuan" };
    //这里的“lihuan”可以改为其他字符,注意,中文不行哦!
    if (f <= 0.0f) { printf("33[1;31m%c33[0m", buf[(int)(f * -8.0f)]); } else { printf("%c", ' '); } printf("33[0m"); // ===================================== } printf(" "); } return 0; }

     加强版:

    #include <stdio.h>
    #include <math.h>
     
    float f(float x, float y, float z) 
    {
        float a = x*x + 9.0f/4.0f*y*y + z*z - 1;
        return a*a*a - x*x*z*z*z - 9.0f/80.0f*y*y*z*z*z;
    }
     
    float h(float x, float z) 
    {
        for (float y = 1.0f; y >= 0.0f; y -= 0.001f)
        {
            if (f(x, y, z) <= 0.0f)
                return y;
        }
        return 0.0f;
    }
     
    int main(int argc, char *argv[]) 
    {
        for (float z = 1.5f; z > -1.5f; z -= 0.05f) 
        {
            for (float x = -1.5f; x < 1.5f; x += 0.025f) 
            {
                float v = f(x, 0.0f, z);
                if (v <= 0.0f) 
                {
                    float y0 = h(x, z);
                    float ny = 0.01f;
                    float nx = h(x + ny, z) - y0;
                    float nz = h(x, z + ny) - y0;
                    float nd = 1.0f / sqrtf(nx*nx + ny*ny + nz*nz);
                    float d = (nx + ny - nz)*nd*0.5f + 0.5f;
                    putchar(".:-=+*#%@"[(int)(d * 5.0f)]);
                }
                else
                    putchar(' ');
            }
            putchar('
    ');
        }
    }

     变形版:

    #include <stdio.h>
     
    int main()
    {
        int  i, j, k, l, m;    
        char c = '*';    //ASCII码里面 3 就是一个字符小爱心 
        
        for (i=1; i<=5; i++)                printf("
    ");    //开头空出5行 
        
        for (i=1; i<=3; i++) 
        {    //前3行中间有空隙分开来写 
            for (j=1; j<=32-2*i; j++)        
                printf(" ");    //左边的空格,每下一行左边的空格比上一行少2个 //8*n-2*i 
            for (k=1; k<=4*i+1; k++)        
                printf("%c", c);//输出左半部分字符小爱心 
            for (l=1; l<=13-4*i; l++)        
                printf(" ");    //中间的空格,每下一行的空格比上一行少4个 
            for (m=1; m<=4*i+1; m++)        
                printf("%c", c);//输出右半部分字符小爱心
            printf("
    ");        //每一行输出完毕换行 
        }
        
        for (i=1; i<=3; i++) 
        {    //下3行中间没有空格 
            for (j=1; j<=24+1; j++)            
                printf(" ");    //左边的空格 //8*(n-1)+1
            for (k=1; k<=29; k++)            
                printf("%c", c);//输出字符小爱心
            printf("
    ");        //每一行输出完毕换行
        }
        
        for (i=7; i>=1; i--) 
        {    //下7行 
            for (j=1; j<=40-2*i; j++)        
                printf(" ");    //左边的空格,每下一行左边的空格比上一行少2个//8*(n+1)-2*i
            for (k=1; k<=4*i-1; k++)        
                printf("%c", c);//每下一行的字符小爱心比上一行少4个(这个循环是i--) 
            printf("
    ");        //每一行输出完毕换行
        }
        
        for (i=1; i<=39; i++)                
            printf(" ");    //最后一行左边的空格 
        
        printf("%c
    ", c);        //最后一个字符小爱心 
        
        for (i=1; i<=5; i++)                
            printf("
    ");    //最后空出5行 
        
        return 0;
    }

    #include <stdio.h>
    #include <math.h>
    
    #define A 3
    
    void print(void)
    {
     double x,y;
    
     for(y=-4;y<=0;y+=0.3)
     {
         for(x=-4;x<=4;x+=0.2)
             if(fabs(sqrt(x*x+y*y)-A*sin(2*atan(y/x)))<=1 ||fabs(sqrt(x*x+y*y)-A*sin(2*atan(-y/x)))<=1)
             printf("*");
         else    printf(" ");
         printf("
    ");
     }
     for(y=-1;y<=0;y+=0.2)
     {
         for(x=-4;x<=4;x+=0.2)
            if(fabs(y)-0.65*x*x>=0.2)
             printf("*");
         else     printf(" ");
         printf("
    ");
     }
    }
    
    int main(void)
    {
     print();
     getchar();
     return 0;
    }

    算法链接:http://mathworld.wolfram.com/HeartSurface.html

    代码主要参考网址:https://www.zhihu.com/question/20187195

  • 相关阅读:
    win7网络共享原来如此简单,WiFi共享精灵开启半天都弱爆了!
    JQUERY UI Datepicker Demo
    Official online document, install svn server in centOS
    JAVE not work in linux
    AMR 转mp3 失败
    XD, XR, DR 股票
    Linux 下MySql 重置密码
    Difinition Of Done
    Apache, Tomcat, JK Configuration Example
    Linux 安装tomcat
  • 原文地址:https://www.cnblogs.com/HGNET/p/12053561.html
Copyright © 2011-2022 走看看