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

总羡慕别人的勇气,喜欢一个人就大胆表白。玫瑰和蜡烛围成的美丽的心形,就像此时主角的内心,浪漫而又炽热,不管成功与否,都一样美好。

8177bde2cc968e09da91fbc4f408bfd2.png

爱的符号

而像小猫这种不善于表达的人,平时除了埋头看书,看上去好像没有喜欢的人。其实,小猫心里面也希望自己能勇敢一些。但鲜花,蜡烛的心形是不敢摆出来了,要不然话都说不出来了。那就用C语言来输出一个心形吧。

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

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

b1d436e13eaeda0f7c8e3e1b8691a5d8.png

一种心形曲线及其数学方程

另一个问题是:怎么控制心形的大小呢?虽然可以在编程过程中边试边调整,但事先能大概确定心形大小会更好一点。小猫看了一下这个图形的坐标,横坐标范围大概在-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 #include 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('');    }    system("pause");    return 0;}

运行一下,看看结果:

37b18ccc8327c966f604f811ab868ef6.png

输出倒过来的心形

怎么倒过来了?原来是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) //这样才会正常

运行结果:

0b1390305904470b7ba4b10a6420df5d.png

调整后的心形

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

8a1c116bce0f6ffb9a658d85a10c1a35.png

减小y的步长心形被拉长

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

#include #include 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('');    }    system("pause");    return 0;}

运行结果:

fca45c17dc54aa74e926618ad44869d0.png

将周围的地方也显示出来

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

就到这里啦。开心。

72c733a6ebc7f034a43ff790a889500a.png

C语言学习日记

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值