用C语言编一个程序,使之用“*”打印出一个爱心的图案

用C语言编一个程序,使之用“*”打印出一个爱心的图案,第1张

个人认为还行,7以上效果较好,不知道你要空心的还是实心的,都附上吧(百度知道好像把两个空格的位置上传后变成了一个空格,你自己要改一下,输出位置为一个空格的全部改成两个,其他的不用改):

实心的:

#include<stdio.h>

int n

void draw(int n)

{

int i,j

for (i=1-(n>>1)i<=ni++)

if (i>=0)

{

for (j=0j<ij++) printf(" ")

for (j=1j<=2*(n-i)+1j++) printf(" *")

printf("\n")

}

else

{

for (j=ij<0j++) printf(" ")

for (j=1j<=n+2*i+1j++) printf(" *")

for (j=1j<=-1-2*ij++) printf(" ")

for (j=1j<=n+2*i+1j++) printf(" *")

printf("\n")

}

}

int main()

{

printf("Please input the size (n>=4):")

scanf("%d",&n)

draw(n)

return 0

}

空心的:

#include<stdio.h>

int n

void draw(int n)

{

int i,j

for (i=1-(n>>1)i<=ni++)

if (i>0)

{

for (j=0j<ij++) printf(" ")

for (j=1j<=2*(n-i)+1j++)

if (j==1||j==2*(n-i)+1) printf(" *")

else printf(" ")

printf("\n")

}

else

if (i==0)

{

printf(" *")

for (j=1j<nj++) printf(" ")

printf(" *")

for (j=1j<nj++) printf(" ")

printf(" *\n")

}

else

{

for (j=ij<0j++) printf(" ")

for (j=1j<=n+2*i+1j++)

if (i==1-(n>>1)) printf(" *")

else if (j==1||j==n+2*i+1) printf(" *")

else printf(" ")

for (j=1j<=-1-2*ij++) printf(" ")

for (j=1j<=n+2*i+1j++)

if (i==1-(n>>1)) printf(" *")

else if (j==1||j==n+2*i+1) printf(" *")

else printf(" ")

printf("\n")

}

}

int main()

{

printf("Please input the size (n>=4):")

scanf("%d",&n)

draw(n)

return 0

}

用方程的话肯定输出不会和你的图完全一致

心形线方程如图

用上面行第二个比较简单,程序如下

#include <stdio.h>

bool draw(float x, float y)

{

 float a = x * x + y * y - 1.0

 float b = x * x * y * y * y

 return a * a * a - b <= 0

}

int main(int argc, char* argv[])

{

 for (float y = 1.5 y >= -1.5 y -= 0.1)

 {

  for (float x = -1.2 x <= 1.2 x += 0.05)

  {

   if (draw(x, y))

   {

    bool left = draw(x - 0.05, y)

    bool right = draw(x + 0.05, y)

    bool up = draw(x, y + 0.1)

    bool down = draw(x, y - 0.1)

    if (left && right && up && down)

     printf(" ")

    else

     printf("*")

   }

   else

    printf(" ")

  }

  printf("\n")

 }

 return 0

}

draw函数是判断(x,y)坐标是否在心形范围内

主函数循环,y取值±1.5之间,步长0.1,x取值±1.2之间,步长0.05

如果(x,y)坐标在心形范围外打印空格

如果(x,y)坐标在心形范围内,由于这个心是空心的,要继续判断是不是心形边缘,判断周围4个点坐标,如果都在范围内,表示(x,y)坐标不会是边缘,打印空格,否则是边缘,打印星号

最终结果如图


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12162766.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-21
下一篇2023-05-21

发表评论

登录后才能评论

评论列表(0条)

    保存