前两天在玩知乎时候见到有个用C语言画心的小代码感觉还是蛮好玩的,不过,里面有行代码看了好久才懂: putchar(".:-=+*#%@"[(int)(d * 5.0f)]); ,先来看看putchar这个函数,用man查看一下其原型: int putchar(int c)

然后我们写个例程看看:

 #include <stdio.h>
int main(int argc, char const *argv[])
{
/*int putchar(int c)等价于int putc(int c, FILE *stream)*/
putchar(".:-=+*#%@"[]);
return ;
}

输出是下面这样的,就只有一个@这个字符

再多写几行把那串字符串里的'@'这个字符改一下再输出:

 #include <stdio.h>
int main(int argc, char const *argv[])
{
/*int putchar(int c)等价于int putc(int c, FILE *stream)*/
putchar(".:-=+*#%@"[]);
putchar(".:-=+*#%3"[]);
putchar(".:-=+*#%s"[]);
putchar(".:-=+*#%h"[]);
return ;
}

输出:

仔细看看貌似输出的字符都是我们改过来的,我们再数数发现那个'@'字符正好是".:-=+*#%@"这个字符串的第9个元素……

我天,这其实就相当于str[8]嘛……真的是蠢到家!!!

最后把原始代码贴出来吧,知乎在这里:如何用 C 语言画「心形」?

 #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 - ;
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 const *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, ny + z) - 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('\n');
}
return ;
}

putchar(".:-=+*#%@"[(int)(d * 5.0f)])的更多相关文章

  1. 用C++画心(转)

    原地址https://www.zhihu.com/topic/19613730/top-answers 首先上一个动态的心 代码如下: #include <stdio.h> #includ ...

  2. 用C语言画一个“爱心”

    /*每个main函数代表一种形状*/#include<iostream> using namespace std; #include<stdio.h> #include< ...

  3. 【Spec for GS5】不要嘲笑程序员不懂烂漫

    // // main.cpp // 生日快乐 // // Created by wasdns on 16/11/21. // Copyright © 2016年 wasdns. All rights ...

  4. C++命令行画心形<转载>

    #include <stdio.h> int main() { for (float y = 1.5f; y > -1.5f; y -= 0.1f) { for (float x = ...

  5. Gift for GS5

    // // main.cpp // 生日快乐 // // Created by wasdns on 16/11/21. // Copyright © 2016年 wasdns. All rights ...

  6. 【C语言】用C语言输出“心形”图案

    在你们的世界里,是不是觉得程序猿一点浪漫都不懂?其实不是的,程序猿的世界也是很浪漫滴! 傻瓜版 int main() { printf("❤"); ; } 高级版 //版本一:单个 ...

  7. 关于int类型的赋值语句正确的有

    A.char a=65;          对 B.int a=12.0; C.int a=12.0f; D.int a=(int)12.0     对

  8. C putchar() 和 getchar()

    C 库函数 int getchar(void)   从 终端输入获取一个字符 : 返回值:该函数以无符号 char 强制转换为 int 的形式返回读取的字符,如果到达文件末尾或发生读错误,则返回 EO ...

  9. 字符的输入和输出即:getchar和putchar

    #include <stdio.h> int main(int argc, const char * argv[]) { putchar(getchar());//这种方式就是输入一个字符 ...

随机推荐

  1. Linux ct6.5安装rabbitmq

    yum install gcc glibc-devel make ncurses-devel openssl-devel xmlto 1.Erlang安装配置 下载安装包,地址http://www.e ...

  2. 【串线篇】spring boot配置文件大全【上】

    一.配置文件 SpringBoot使用一个全局的配置文件,配置文件名是固定的: • application.properties • application.yml 配置文件的作用:修改SpringB ...

  3. MyCat(1.2)Mycat的安装

    [0]基本环境 OS:CentOS7.5 Software envireonment:JDK1.7.0 Master Software:Mycat1.6.5 Linux Client:CRT 8.0 ...

  4. 【leetcode】472. Concatenated Words

    题目如下: Given a list of words (without duplicates), please write a program that returns all concatenat ...

  5. Delphi Win API 函数 [ ShellAPI ] ShellExecute 函数

    引用单元:uses ShellAPI; 函数原型:function ShellExecute(hWnd: HWND; Operation, FileName, Parameters,Directory ...

  6. python3运行报错:TypeError: Object of type 'type' is not JSON serializable解决方法(详细)

    返回结果先转成str 字符创

  7. Cloudera Hadoop 环境搭建(离线安装)

    关于CDH和Cloudera Manager CDH (Cloudera's Distribution, including Apache Hadoop),是Hadoop众多分支中的一种,由Cloud ...

  8. shell脚本学习(6)awk 编排字段

    awk能取出文本字段重新编排 1 awk的用法 awk ‘program’ [file] 2 其中program 可以写成 ‘parrtern {action}’    pattern 或 actio ...

  9. window使用

    运行命令 regedit #注册表编译器 firewall.cpl #打开防火墙配置 powershell #打开powershell control #打开控制面版 cnpa.cpl #打开网络设置 ...

  10. 防止NSTimer和调用对象之间的循环引用

    防止NSTimer和调用对象之间的循环引用 @interface NSTimer (EOCBlocksSupport) + (NSTimer *)eoc_scheduledTimerWithTimeI ...