c语言 用*画出一个圆

方法越容易理解越好... 方法越容易理解越好 展开
 我来答
zhccsd
2010-11-18 · TA获得超过4042个赞
知道大有可为答主
回答量:1347
采纳率:66%
帮助的人:922万
展开全部
如果你用 wintc 或者可以用 graphic.h编程的话
void circ(int x,int y,int r,int c)
{
int i,ty,tx;
for(i=x;i<=x+r;++i)
{
ty=sqrt(pow(r,2)-pow((i-x),2))+y;
putpixel(i,ty,(i+ty)%c);
putpixel(i,2*y-ty,(i+ty)%c);
putpixel(2*x-i,ty,(i+ty)%c);
putpixel(2*x-i,2*y-ty,(i+ty)%c);
}
for(i=y;i<=y+r;++i)
{
tx=sqrt(pow(r,2)-pow((i-y),2))+x;
putpixel(tx,i,(tx+i)%c);
putpixel(tx,2*y-i,(tx+i)%c);
putpixel(2*x-tx,i,(tx+i)%c);
putpixel(2*x-tx,2*y-i,(tx+i)%c);
}
}

四个变量分别是圆心坐标 xy,半径,颜色
原理是先画四分之一个圆,然后用左右上下对称画全
tx=sqrt(pow(r,2)-pow((i-y),2))+x; 也就是圆标准方程的变形

附上一个画圆的程序 wintc1.91图形模板编写的

/* WIN-TC BGI 图形编程模板 */

#include "Conio.h"
#include "graphics.h"
#include"stdlib.h"
#include"time.h"
#include"math.h"
#define closegr closegraph

void initgr(void) /* BGI初始化 */
{
int gd = DETECT, gm = 0; /* 和gd = VGA,gm = VGAHI是同样效果 */
registerbgidriver(EGAVGA_driver);/* 注册BGI驱动后可以不需要.BGI文件的支持运行 */
initgraph(&gd, &gm, "");
}

int main(void)
{
int i,k,x,y,rr;
void circ(int,int,int,int) ;
int pr();
initgr(); /* BGI初始化 */
srand(time(NULL));
for(k=0;k<50;++k)
{
rr=rand()%150+50;
x=(rand()%2)*2-1;
y=(rand()%2)*2-1;
for(i=1;i<600;++i)
circ(320+rr*x,240+rr*y,i,k+2);
}

getch(); /* 暂停一下,看看前面绘图代码的运行结果 */
closegr(); /* 恢复TEXT屏幕模式 */
return 0;
}

int pr()
{
static int m=2;
if(m>=9) m=2;
return m++;

}

void circ(int x,int y,int r,int c)
{
int i,ty,tx;
for(i=x;i<=x+r;++i)
{
ty=sqrt(pow(r,2)-pow((i-x),2))+y;
putpixel(i,ty,(i+ty)%c);
putpixel(i,2*y-ty,(i+ty)%c);
putpixel(2*x-i,ty,(i+ty)%c);
putpixel(2*x-i,2*y-ty,(i+ty)%c);
}
for(i=y;i<=y+r;++i)
{
tx=sqrt(pow(r,2)-pow((i-y),2))+x;
putpixel(tx,i,(tx+i)%c);
putpixel(tx,2*y-i,(tx+i)%c);
putpixel(2*x-tx,i,(tx+i)%c);
putpixel(2*x-tx,2*y-i,(tx+i)%c);
}
}
lovemezhoupeng
2010-11-18 · TA获得超过1187个赞
知道小有建树答主
回答量:269
采纳率:0%
帮助的人:0
展开全部
//纯用*符号输出园,园边会不整齐,园半径越大越园

#include<stdio.h>
#include<math.h>

#define rad 19 //超过19只看到部分园,不过园边整齐些

void main()
{
int i,j;
double tmp;
double knum,xnum; //计算空格数和星号数

//输出上半圆
for ( i=0; i<rad; i++)
{
tmp=rad*rad-(rad-i)*(rad-i);
knum=sqrt(tmp)+0.4;
xnum=knum+knum;//得到星号数
knum=rad-knum; //得到空格数

tmp=0;
for ( j=knum; j>0; j--)
{
if (tmp<38.0) //超过80个字符就不要输出了
{
printf(" ");//换成一个空格,出来是椭圆
}
tmp++;
}
for ( j=xnum; j>0; j--)
{
if (tmp<38.0)
{
printf("**");//换成一个*,出来是椭圆
}
tmp++;
}
printf("\n");
}

//输出下半圆
for ( i=rad; i>0; i-- )
{
tmp=rad*rad-(rad-i)*(rad-i);
knum=sqrt(tmp)+0.4;
xnum=knum+knum;
knum=rad-knum;
tmp=0;

tmp=0;
for ( j=knum; j>0; j--)
{
if (tmp<38.0)
{
printf(" ");
}
tmp++;
}
for ( j=xnum; j>0; j--)
{
if (tmp<38.0)
{
printf("**");
}
tmp++;
}
printf("\n");
}
printf("\n");
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式