#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-(4k) 是来表示前三行中间空格部分的最左端的空白格的位置
而四五六七行以后的部分为爱心的底部爱心的底部和上面的类似
下面就是最后绘制的爱心的效果图:
刚学的C语言,如果哪里出错了或者有更好的方法,还望大家不吝赐教。
|