声明:本文所用编译器为vs2022
一.以下是三种不同的心形代码方式(数学方程可以上网找,找自己喜欢的写就好了,最好有标明数值的那种,编码时初值于边界值就更好把握),各有好处;
二.最后还附有改变控制台颜色的一种方法(即改变字体或背景颜色),这玩意挺有意思看腻了黑底白字的朋友,换个颜色看看吧如:绿底蓝字,缓解眼部疲劳;
1.用双for循环构成心形:编译很快,直接出现心形 详细解释看图+实践
}*/
#include <iostream>
#include <cmath>//使用数学函数库,pow(a,b)来求a的b次方的值
using namespace std;
int main() {
for (float y = 1.3; y >=-2; y -= 0.06)//涉及函数图像的输出,一般的要用全体实数则最好数据类型为浮点型的数据
{ //双for循环遍历所有y,x的值
for (float x = -2.3; x <= 2; x += 0.025)//x的步长为0.025,用来修改长度与宽度
{
if (pow((x * x + y * y - 1), 3) - x * x * y * y * y <= 0.0)//数学心形方程
//小于等于0则说明满足在心形内的所有点
cout << '1';//填充心形的符号
else
cout << ' ';
}//在心形外的用空格填满
cout << endl;//所有方式里必不可少的一行代码,给y换行,y本身不会自动换行,但x,y都能从左到右逐个遍历出
}
//y的初值对应控台台第一行;x的初值对应第一列,且控制台每一列,每一行都代表一个数字
system("color 4");//控制输出的字符颜色为红色;本行代码.
return 0;
}//1.步长越小,在控制它经过的行列数越多,可以调整心的高矮胖瘦
//2.变量初值与边界条件差越大,那么相当于给了更大的一块画板画这个指定要求的心形,那些不满足方程的值都将成为画板的白底
// 满足呈现心
//3.注意:若要想输出一个完整的心形变量初值到边界条件的距离至少包含数学公式中自变量与因变量之间的距离
//且变量的初值与边界条件至少包含数学心形方程的定义域与值域
下图帮助理解第一个方式,下面两种方式类似
2.双for+putchar函数:更加美观,putchanr能做到逐个输出字符,每次putchar只能输出一个字符,缓冲较大,故实现视觉上的逐个输出
#include<stdio.h>
#include<Windows.h>
int main() {
float x, y, a;
for (y = 1.5; y > -4; y -= 0.1)
{
for (x = -1.5; x < 4; x += 0.05)
{
a = x * x + y * y - 1;
putchar(a * a * a - x * x * y * y * y <= 0.0 ? '*' : ' ');//这个方法可以实现逐个输出,更加美观
}
system("color 0c");
putchar('\n');//输出回车,即换行了
}
return 0;
}
3.这个比较难,因为本人初学:这种方式可以实现输出多个字符来填充心形,就像用i love you填充心形,不局限于单个字符,更美观
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
float x, y;
string s = "i love you";//定义变量s并赋给一个字符串;sting为变量的一种类型;
int l = s.length();//求出字符串长度为10,计空字符;
for (y = 1.3f; y >= -1.1f; y -= 0.06f)//+f默认为浮点型,可以直接赋值给float变量,不必经过系统类型转换,遍历y的值
{
int t = 0;//定义整型变量t
for (x = -1.1f; x <= 1.1f; x += 0.025f)//遍历x的值
{//abs求整型数据的绝对值,fabs求浮点型数据的绝对值,sqrt取根号值
double heart = x * x + (5.0 * y / 4.0 - sqrt(abs(x))) * (5.0 * y / 4.0 - sqrt(abs(x)));//定义双精度浮点型变量
if (heart <= 1)//出现心形的条件,这是数字1
{cout << s[t];//输出字符长s里的第t个字符,t=0输出第一个字符,t=9时字符串s完全输出一次
t = (t + 1)%l;//这个是局部变量l;这里简直完美啊当t=10又从i输出
}
else cout << " ";//进行换行;
}
cout << endl;//换到下一行
}
cout <<" " << " 我爱你";
long long time;//for循环里的三个表达式都没有;那么这个for成为死循环,不会停止
for (;;)//system函数加color函数可以控制控制台的前景色和背景color后面的每一个字符都代表一个颜色
{
system("color a");
for (time = 0; time <99999 ; time++);//这里的9999越大,那么上一个颜色存在时间越长下面的同理
//我觉得这是最蠢的实现颜色变化的方法
system("color 5");
for (time = 0; time < 99999999; time++);
system("color c");
return 0;
}
以上三个都能变色:利用system函数实现控制台颜色的改变
eg在主函数的函数体中加一句:1.system(“color E4”)那么运行时输出的字符变为4(红色)背景变为E(淡黄色)