c语言怎么用星星写一个正方形,用C语言编五角星.请高手指教.

纯数学方法,如果缩放很小会很难看……(其实好像一直都很难看= =)不过绝对是标准的五角星……

输入边长就能输出五角星:

21c92f7342edc52acb5684b0b88bdcec.png程序代码:

#include

#include

#define MIN(x, y) ((y) < (x) ? (y) : (x))

#define MAX(x, y) ((x) < (y) ? (y) : (x))

#define RAD(x) ((x) * M_PI / 180.0)

#define F1(x) (tan(RAD(162)) * (x) + 1 + cos(RAD(72)))

#define F2(x) (tan(RAD(18)) * (x) + 1 + cos(RAD(72)))

#define F3(x) (tan(RAD(54)) * (x) - sin(RAD(72)) * tan(RAD(54)))

#define F4(x) (tan(RAD(126)) * (x) + 2 + 2 * cos(RAD(72)) \

+ sin(RAD(72)) * tan(RAD(54)))

void draw_star(int scale)

{

int i, end = rint(scale * sin(RAD(72)) / 2), end2;

for (i = 0; i <= end; ++i)

{

int y1 = rint(F1(i*2.0/scale)*scale),

y2 = rint(F2(i*2.0/scale)*scale);

if (y1 != y2)

printf("%*c%*c\n", y1 + 1, '*', y2 - y1, '*');

else

printf("%*c\n", y1 + 1, '*');

}

for (i = 0; i < scale; ++i)

putchar('*');

end2 = rint(scale * cos(RAD(72)) * 2);

for (i = 0; i <= end2; ++i)

putchar(' ');

for (i = 0; i < scale; ++i)

putchar('*');

putchar('\n');

for (i = end + 1; ; ++i)

{

int y1 = rint(F1(i*2.0/scale)*scale),

y2 = rint(F2(i*2.0/scale)*scale),

y3 = rint(F3(i*2.0/scale)*scale),

y4 = rint(F4(i*2.0/scale)*scale);

if (y4 <= y1 || y3 >= y2)

{

printf("%*c%*c\n", y1 + 1, '*', y2 - y1, '*');

break;

}

if (y3 < y4)

{

int ymin = MIN(y1, y3);

printf("%*c%*c\n", ymin + 1, '*', MAX(y2, y4) - ymin, '*');

}

else

printf("%*c%*c%*c%*c\n", y1 + 1, '*', y4 - y1, '*',

y3 - y4, '*', y2 - y3, '*');

}

}

int main(void)

{

int scale;

while (scanf("%d", &scale) == 1)

draw_star(scale);

return 0;

}

/* - cc: flags+='-lm' */

输入13的输出结果:

13

*

* *

* *

*   *

*     *

*     *

*       *

*************         *************

*                             *

*                       *

*                 *

*            *

*             *

*               *

*     *   *     *

*    *        *   *

*  *             *  *

*                   *

[本帖最后由 StarWing83 于 2009-11-7 12:27 编辑]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值