C语言第四章课后习题10,求建筑物高度
19
Sep
0
10.有4个圆塔,圆心分别为(2,2)、(-2,2)、(-2,-2)、(2,-2),圆半径为1。这4个塔的高度为10m,塔以外无建筑物。今输入任意点的坐标,求该点的建筑高度(塔外的高度为零)。

我的代码:
1 2 3 4 5 6 7 8 9 | float x,y; printf("请输入坐标\n"); scanf("%f %f", &x, &y); if (x<0) x=x*(-1); //把坐标转换为正数 if (y<0) y=y*(-1); if ((x>=1 && x<=3) && (y>=1 && y<=3)) printf("该建筑物的高度是10cm\n"); else printf("该建筑物的高度是0cm\n"); |
高高兴兴写完,测试后发现,这根本就不是个圆……而是一个正方形。苦恼的时候搜索了一下,发现在坐标系中表示圆需要一个方程,百度百科里的解释为:
圆的标准方程:在平面直角坐标系中,以点O(a,b)为圆心,以r为半径的圆的标准方程是(x-a)^2+(y-b)^2=r^2。
上次接触这类方程是十年以前么-_-,对于文科的我来说记忆基本是个零。另外,判断园内阴影的条件是以上方程要<=半径(也就是1)有了这两个知识,在改写一下之前的代码为:
1 2 3 4 5 6 7 | float x,y; printf("请输入坐标\n"); scanf("%f %f", &x, &y); if (x<0) x=x*(-1); if (y<0) y=y*(-1); |
x-=2;
y-=2;
if (x*x+y*y<=1)
printf(“该建筑物的高度是10cm\n”);
else
printf(“该建筑物的高度是0cm\n”);
问题就可以解决了。当然我看到还有高手写出了更精简的代码:
1 2 3 4 5 6 | int getHight2(double x, double y) { if( x < 0 ) x = -x; if( y < 0 ) y = -y; x -= 2; y -= 2; return (x*x+y*y<=1)?(10):(0); |
我也能稍稍理解,但是应该写不成这样,还没有到那种程度吧,感谢现在的网络,很多问题都可以搜索得到答案。好了,下一章,循环结构!
Filed Under: 职业生涯
No Comments