怎么输出心形呢?小猫想,在纸上先画一个心形,然后再写成代码,这应该是最简单的方案了。但是这样就是一行一行的写printf,感觉很没技术含量啊。

能不能用一个表达式,一次性输出呢?小猫又想,先找一个心形曲线的数学方程,然后将它的内部填上字符‘*’,应该就可以了。小猫先搜索了一下心形曲线的数学方程,找到一个看起来比较好实现的:

另一个问题是:怎么控制心形的大小呢?虽然可以在编程过程中边试边调整,但事先能大概确定心形大小会更好一点。小猫看了一下这个图形的坐标,横坐标范围大概在-1.5到1.5之间,纵坐标范围大概在-1.0到1.5之间。小猫想:让横坐标x和纵坐标y都从-1.5到1.5按一定的步长增长,比如横坐标步长设为0.05,纵坐标步长设为0.1,设置两层循环,每次循环就将x,y代入方程,如果小于等于0,就说明这个点在心形内,此时输出‘*’字符,如果大于0,就说明这个点在心形外,此时输出空格(或者不做任何动作)。这样横向方向最多可以输出3.0/0.05=60个字符,纵向方向最多可以输出30个字符,即最多30行60列。小猫觉得大小应该合适了,不行再调整步长吧。代码如下:

include <stdio.h>
#include <stdlib.h>
int main()
{for (float y = -1.5f; y < 1.5f; y += 0.1f) //让y从-1.5变道1.5,y代表纵坐标{for (float x = -1.5f; x < 1.5f; x += 0.05f) //让x从-1.5变道1.5,x代表横坐标{float a = x * x + y * y - 1; //将x,y代入方程,先计算第一个括号的值putchar(a * a * a - x * x * y * y * y <= 0.0f ? '*' : ' '); //计算整个方程的值,与0比较决定输出什么字符}putchar('\n');}system("pause");return 0;
}

运行一下,看看结果:

怎么倒过来了?原来是y不应该从-1.5到1.5,这样会将纵坐标上下颠倒,导致图形也颠倒。稍微改一下就可以了:

将这一行 for (float y = -1.5f; y < 1.5f; y += 0.1f) //这样会导致图形上下颠倒
改为 for (float y = 1.5f; y > -1.5f; y -= 0.1f) //这样才会正常

运行结果:

如果将x的步长变小,那么横向方向上会输出更多的字符,这样心形会被拉宽。如果将y的步长变小,那么纵向方向上会输出更多的字符,这样心形会被拉长。如将y的步长从0.1变为0.05时输出的心形是这样:

如果将代码里面的输出空格改为其他可见字符,例如‘-’字符,就可以看到整个图形的背景啦。

#include <stdio.h>
#include <stdlib.h>
int main()
{for (float y = 1.5f; y > -1.5f; y -= 0.1f){for (float x = -1.5f; x < 1.5f; x += 0.05f){float a = x * x + y * y - 1;putchar(a * a * a - x * x * y * y * y <= 0.0f ? '*' : '-'); //在这里改一下}putchar('\n');}system("pause");return 0;
}

运行结果:

这样就能更好的理解这段代码的原理啦。不知道用这个表白有没有用呢?如果对你有用,就拿去吧。

C语言学习日记(9)——用C语言写一个爱心相关推荐

  1. 语言余一个负数_C语言学习日记(8)——整数溢出

    小时候喜欢玩电子计算器,觉得很神奇,想要算什么数,立刻就能算出来.当时看着计算器的液晶屏幕就想,如果算一个很大的数,超过了屏幕上面数字的位数,会怎么样呢?试了以后结果是INF,那就是无穷大了.虽然当时 ...

  2. const 指针_C语言学习日记(11)——const与指针

    对于一个普通指针typet *p.p有三个最基本的能力,第一就是可以通过p = &obj来指向一个type类型对象,并随意切换指向对象.第二就是通过value = *p来读取它指向的对象的值. ...

  3. c语言实训自我总结报告日记,C语言学习日记(1)-准备好工具

    小猫开始学习C语言啦,首先选个喜欢的工具吧.C语言开发工具真多啊,什么C-Free,Code Lite,Code::Blocks,DevC++,VisualStudio,CLion等,这些工具里面Vi ...

  4. c语言代码表白_C语言学习日记(9)——用C语言写一个爱心吧

    总羡慕别人的勇气,喜欢一个人就大胆表白.玫瑰和蜡烛围成的美丽的心形,就像此时主角的内心,浪漫而又炽热,不管成功与否,都一样美好. 爱的符号 而像小猫这种不善于表达的人,平时除了埋头看书,看上去好像没有 ...

  5. C语言学习(十)C语言中的小数

    C语言学习(十)C语言中的小数 小数的表示方式 小数分为整数部分和小数部分,他们之间用点号.分隔,如0.0.7.5.4.098.0.27.-987.333等都是合法小数,这是最常见的小数形式,我们称为 ...

  6. C语言学习笔记-P1 初识C语言(2)

    C语言学习笔记-P1 初识C语言(2) C语言学习笔记-P1 初识C语言(2) 一.常量 1.字面常量 2.const修饰的常变量 3.#define定义的标识符常量 3.枚举常量 二.字符串+转义字 ...

  7. C语言学习笔记-P1 初识C语言(1)

    C语言学习笔记-P1 初识C语言(1) P1 初识C语言(1) 一.什么是C语言 1.定义 2.发展 二.第一个C语言程序 Hello World 三.数据类型 四.变量,常量 未完待续!!! P1 ...

  8. c语言学习宝典老版,C语言学习宝典APP最新版下载_C语言学习宝典APP官方版5.6.7下载_QQ下载站...

    C语言学习宝典APP简介 C语言学习宝典是一款网上学习APP,这儿包括了C语言学习培训各环节专业知识,给你轻轻松松该把握C语言的关键专业知识,提升自己的工作能力,出示来C语言基本知识,让学员从入门学习 ...

  9. Rust学习日记番外篇——代码写诗

    Rust学习日记番外篇--代码写诗 中秋节即将来临啦~~提前祝大家月饼节快乐.今天看到了掘金的文章,有个代码写诗的活动,那我就小露一手了. 0x01 选定诗句 在掘金有下面几句诗可选. 举头望明月,低 ...

  10. C语言学习日记(2)——写个Hello,World测试一下

    感觉工具已经安装好了,但到底怎么样还要试过才知道.那就写一个经典的Hello,World程序测试一下吧! 首先打开vscode,新建一个文件,输入代码.代码字体颜色全都是白色的,看到状态栏右下角,原来 ...

最新文章

  1. Zbrush2021写实人物肖像雕刻学习教程
  2. 记一次大规模数据迁移和加密
  3. element UI 选择器 踩的坑 获取到了value 显示不出对应的 value
  4. 写给计算机的大学生!
  5. 深入理解 Python 中的上下文管理器
  6. mysql自增长主键_MySQL数据库8(九)列属性之主键、自增长
  7. 中标麒麟/NeoKylin 安装QT开发环境
  8. 【牛客 - 2B】树(思维,dp,有坑)
  9. mie散射理论方程_腾讯游戏学院专家:PBR渲染模型的理论及具体应用
  10. 内大计算机学院研究生奖学金,通知 | 【研究生评奖评优】关于做好浙江大学2017-2018学年计算机学院研究生学年小结及评奖评优工作的通知...
  11. linux svn官网,linux svn
  12. [UWP开发]NavigationView基础使用方法
  13. 《HTML5 2D游戏编程核心技术》——第3章,第3.8节绘制动画帧
  14. 【SQL语句】 - Ctrl+3 查询表属性的存储过程 [sp_select_talberowName]
  15. Python之仓库管理系统
  16. 74HC595芯片单颗与级联的万能代码|2021-09-03
  17. matlab imfilter与fft,imfilter与fspecial
  18. 平面变压器的设计(翻译)(1)
  19. 大学计算机思维导论第一讲测验答案,第一讲导论习题.doc
  20. Revit:放置标高和轴网方法总结

热门文章

  1. 美国J1签证面签需要准备哪些材料?
  2. 北大SQL数据库视频教程
  3. C语言数码管节日灯,硬件课程设计报告可编程节日彩灯(C语言).pdf
  4. windows录屏html文件,win7系统自带的屏幕录制工具如何打开使用
  5. Qt用SVG图片作为背景图
  6. matmul product(一般矩阵乘积),hadamard product(哈达玛积)、kronecker product(克罗内克积)
  7. 组播IP地址和MAC地址的映射关系
  8. mysql 数据库里查询语句中不等于的两种写法
  9. fgets函数的使用
  10. Mac系统Safari浏览器快捷键大全