一、三角形
例题:若底边长为 n,层高为 n / 2 + 1,n必定为奇数
输入:三角形底边长
输出:三角形
这个题目很简单,只要循环几次,每次先打印空格,在打印符号,空格每次少一个,符号每次多一个就可以了
代码如下:
int main()
{
while(scanf("%d",&n)!=EOF)
{
for(int i = 0;i <= n / 2;i++)
{
for(int j = n / 2 + 1 - i;j >= 1;j--)
{printf(" ");}
for(int k = n / 2 + 2 - i;k <= n / 2 + 2 + i;k++)
{printf("*");}
printf("\n");
}
}
return 0;
}
二、圆形
例题: 画个圆形(不考虑行高和行间距带来的影响了)
输入:圆形半径
输出:圆形
公式:(x-r)^ + (y-r)^ = r^
这个题目原理和上面一样,就不停循环,判断点在不在圆上,如果在的话,输出符号,不然输出空格
难点在于调距离
我建议是调成r^ - r <=(x-r)^ + (y-r)^ <= r^ + r
代码如下:
for(int i = 0;i < 2 * r + 2;i++)
{
for(int j = 0;j < 2 * r + 2;j++)
{
if(((i - r - 1) * (i - r - 1) + (j - r - 1) * (j - r - 1) <= r * r + r )&& ((i - r - 1) * (i - r - 1) + (j - r - 1) * (j - r - 1) >= r * r - r))
{printf(" *");}
else
{printf(" ");}
}
printf("\n");
}
三、心形
例题:
输入:无
输出:爱心
心型线方程为x^ + y^ + ay = a√(x^ +y^)
此题比第二题复杂一点,因为x和y小于2大于等于-1
所以要把点微化,原来一个点代表0.1
再调一下距离,就可以了
还要注意循环的方向和循环结构,不然图形可能方向不朝上了
代码如下:
for(int i = 18;i >= -12;i--)
{
double y = i * 0.1;
for(int j = 36;j >= -24;j--)
{
double x = j * 0.05;
double pl = pow(x * x,1.0 / 3);
if(x * x + (y - pl) * (y - pl) <= 1.5&&x * x + (y - pl) * (y - pl) >= 0)
{printf("*");}
else
{printf(" ");}
}
printf("\n");
}
四、总结
c语言打印图形问题,一般是先找出图形方程,再绘图,再调距离。当然你也可以直接把图形的样子输入到代码中,直接打印出来,不过要注意换行符。