putchar(".:-=+*#%@"[(int)(d * 5.0f)])
前两天在玩知乎时候见到有个用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)])的更多相关文章
- 用C++画心(转)
原地址https://www.zhihu.com/topic/19613730/top-answers 首先上一个动态的心 代码如下: #include <stdio.h> #includ ...
- 用C语言画一个“爱心”
/*每个main函数代表一种形状*/#include<iostream> using namespace std; #include<stdio.h> #include< ...
- 【Spec for GS5】不要嘲笑程序员不懂烂漫
// // main.cpp // 生日快乐 // // Created by wasdns on 16/11/21. // Copyright © 2016年 wasdns. All rights ...
- C++命令行画心形<转载>
#include <stdio.h> int main() { for (float y = 1.5f; y > -1.5f; y -= 0.1f) { for (float x = ...
- Gift for GS5
// // main.cpp // 生日快乐 // // Created by wasdns on 16/11/21. // Copyright © 2016年 wasdns. All rights ...
- 【C语言】用C语言输出“心形”图案
在你们的世界里,是不是觉得程序猿一点浪漫都不懂?其实不是的,程序猿的世界也是很浪漫滴! 傻瓜版 int main() { printf("❤"); ; } 高级版 //版本一:单个 ...
- 关于int类型的赋值语句正确的有
A.char a=65; 对 B.int a=12.0; C.int a=12.0f; D.int a=(int)12.0 对
- C putchar() 和 getchar()
C 库函数 int getchar(void) 从 终端输入获取一个字符 : 返回值:该函数以无符号 char 强制转换为 int 的形式返回读取的字符,如果到达文件末尾或发生读错误,则返回 EO ...
- 字符的输入和输出即:getchar和putchar
#include <stdio.h> int main(int argc, const char * argv[]) { putchar(getchar());//这种方式就是输入一个字符 ...
随机推荐
- centos7 利用mailx发送邮件
当需要服务器定时发送邮件到自己邮箱时,一个邮件服务就很重要了,以下主要是mailx的实现,主要是利用 1.安装mailx 1 yum install mailx -y 2.使用到的配置文件只有一个 ...
- RESET - 把一个运行时参数值恢复为缺省值
SYNOPSIS RESET name RESET ALL DESCRIPTION 描述 RESET 将运行时参数恢复为缺省值. RESET 是下面语句的一个变种 SET parameter TO D ...
- vim常用快捷键及操作记录
1. 安装 sudo apt-get install vim 或者 yum install -y vim-enhanced 2. 具体使用技巧如下 打开文件: 命令/操作 说明 vim + filen ...
- ubuntu16.04的一系列安装
1.安装ubuntu https://blog.csdn.net/weixin_40494464/article/details/81010256 2.ubuntu里选择简体中文 https://bl ...
- Sass-@while
@while 指令也需要 SassScript 表达式(像其他指令一样),并且会生成不同的样式块,直到表达式值为 false 时停止循环.这个和 @for 指令很相似,只要 @while 后面的条件为 ...
- java8 Stream2
new Thread(() -> System.out.println("lambda表达式,取代匿名函数......")).start(); Stream.of(" ...
- vue代理配置之二--dev方式启动的index.js配置
'use strict' // Template version: 1.3.1 // see http://vuejs-templates.github.io/webpack for document ...
- extjs6.0 treepanel设置展开和设置选中
var treePanel = { id: "treeUrl", xtype: "treepanel", useArrows: true, // 节点展开+,- ...
- Autoit脚本调用pscp上传小程序
linux上传文件用pscp上传相对麻烦,如下写了个脚本方便上传 代码如下: $fileURL=@ScriptDir & "pscp.ini" If (FileExists ...
- JMeter之Beanshell用法
1. 获取JMeter脚本中的变量 ${demoParam} String demo = vars.get("demoParam"); 2. 将数据保存到JMeter脚本中的变量 ...