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;
} 展开
#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;
} 展开
1个回答
展开全部
是这样的,设想把屏幕上建立一个平面直角坐标系。取自左向右为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,所以输出的圆稍不规则。
我是一级,不能附上图片,希望你在稿纸上建系算算。
由于一个英文字符的所占区域是矩形,且长宽比约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,所以输出的圆稍不规则。
我是一级,不能附上图片,希望你在稿纸上建系算算。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询