
实心的:
#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)坐标不会是边缘,打印空格,否则是边缘,打印星号
最终结果如图
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)