C语言打印圆的问题,请帮下忙写下注释,我数学很差...帮解释一下 谢谢

#include<stdio.h>#include<math.h>intmain(){intx,y,y1,y2;intR;while(scanf("%d",&R)!=EO... #include <stdio.h>
#include <math.h>
int main()
{
int x, y, y1, y2;
int R ;
while(scanf("%d",&R)!=EOF)
{
for(x = 0;x <= 2*R;x ++)
{
y1 = (R - sqrt(2.0*R*x-x*x))*2;
y2 = (R + sqrt(2.0*R*x-x*x))*2;
for ( y = 0; y < y1; ++y)
printf(" ");
printf("*");
if (y <= y2)
{
for (;y < y2; y++)
printf(" ");
printf("*");
}
printf("\n");
}
}
return 0;
}
展开
 我来答
hejiekkk
2011-12-02 · 超过11用户采纳过TA的回答
知道答主
回答量:36
采纳率:0%
帮助的人:30.6万
展开全部
是这样的,设想把屏幕上建立一个平面直角坐标系。取自左向右为Y轴,自上至下为X轴。
由于一个英文字符的所占区域是矩形,且长宽比约2:1,所以X轴一个单元长度是Y一个单元长度的2倍。(此信息关键)
取点(R,2R)为圆心,R为半径,圆的“代数关系方程”为(X-R)^2+(Y-R/2)^2=R^2;即Y1=2.0*(R-sqrt(2.0*RX-X^2))或Y2=2.0*(R+sqrt(2.0*RX-X^2);
程序意思是,对于(0,2R)的整数X值,用for循环让第 X 行均在(X,2.0*(R-sqrt(2.0*RX-X^2))和(X,1+[2.0*(R+sqrt(2.0*RX-X^2)])两处输出“*”,一行中输入两个对称的“*”后回车一次。你可以取X的几个值验证一下。由于Y1,Y2均是int型,且一字节长宽比不是严格的2:1,所以输出的圆稍不规则。
我是一级,不能附上图片,希望你在稿纸上建系算算。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式