C语言 通过for循环绘制爱心

这篇博客介绍了使用C语言编程实现绘制红色爱心的过程,包括其不同行的逻辑和优化方法。作者通过调整循环和条件判断,实现了爱心的各部分,并使用`<windows.h>`库将输出设置为红色。博客探讨了三种不同的方法来完成爱心的前三行,并展示了最终的爱心图案。作者欢迎对代码有建议和改进的人分享经验。
摘要由CSDN通过智能技术生成
#include <stdio.h>
#include <windows.h>
void sw()
{int i;system("color 0c");
for(i=1;i<=31;i++)//编写爱心的第四、五、六printf("*");
printf("\n");
}
void main()
{int i,j,k,h;
system("color 0c");
/*for(i=1;i<=26;i++)//编写爱心的第一行    //第一种(i<=5)?printf(" "):((i>=12&&i<=20)?printf(" "):printf("*"));
printf("\n");
for(i=1;i<=28;i++)//编写爱心的第二行
(i<=3)?printf(" "):((i>=14&&i<=18)?printf(" "):printf("*"));
printf("\n");
for(i=1;i<=30;i++)//编写爱心的第三行
(i==1||i==16)?printf(" "):printf("*");printf("\n");*/
/*k=2;       //第二种
for(i=20;i>=16;i-=2)//编写爱心前三行
{for(j=1;j<=46-i;j++)
(j<=i-15)?printf(" "):((j>=i-(4*k)&&j<=i)?printf(" "):printf("*"));
k--;
printf("\n");
}
*/for(j=5,k=12,h=20;j>=1,k<=16,h>=16;j-=2,k+=2,h-=2)   //编写爱心前三行
{for(i=1;i<=31-j;i++)(i<=j)?printf(" "):((i>=k&&i<=h)?printf(" "):printf("*"));printf("\n");
}
sw();
sw();
sw();
for(i=1;i<=30;i++)
(i==1)?printf(" "):printf("*");
printf("\n");
for(i=1;i<=15;i+=2)//编写爱心的底部
{for(j=-1;j<=27-i;j++)
{if(i<j)printf("*");
else printf(" ");
}
printf("\n");
}
}

void sw();为自定义函数
是为了输出爱心的第四五六行
自定义函数在主函数前在主函数中调用时可以不用再对自定义函数进行声明。

#include <windows.h>
是为了让最后的爱心变为红色
system(“color 0c”)就是调用红色
(第一次用如果用错了,还望见谅,并请各位大佬不吝赐教)。

其中爱心的前三行一共用了三种方法,不过第二种和第三种差不多
第一种在第一个/……/中
第一种方法是一个for循环中为爱心的一行, 总共为三个for循环
因为爱心为31列而第一行中的前5格和第12到20格以及26格以后为空白,所以直接管前26格。
当i<=5时,即前5格输出空白
当12=<i<=20时,即第12到20格输出空白而别的格都输出*号

其中( )?A:B 表示当括号中成立时执行A否执行B
第二三行和上面类似

第二种在第二个/……/中
从图中爱心的前三行可以看出一个规律:
第一行的第20格比第5格多15、比第12格多8第二行的第18格比第3格多15、比第14格多4第三行的第16格比第1格多15、比第16格多0而前三行每行最右端的空白格数和最左端的空白格数相同,且每行最右端的"*"比前一行往后移两位。
定义的i=20是第一行第20个空白格
i>=16是因为第一行的第20个空白格往前移两格到它第二行的位置,第三行也同样。
j<=46-i 是由31-(i-15)得来,因为若把整个爱心看成矩形网格,则有31列,(i-15)是代表每行最左端有几个空格,而最左端和最右端的空格数相等,所以这样来进行判断每行最右端的位置。
而i-(4
k) 是来表示前三行中间空格部分的最左端的空白格的位置

而四五六七行以后的部分为爱心的底部爱心的底部和上面的类似

下面就是最后绘制的爱心的效果图:
这就是最后绘制的爱心的效果图

刚学的C语言,如果哪里出错了或者有更好的方法,还望大家不吝赐教。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值