C++ 计算圆上的整点
我写了一个小程序,但它给出的答案总是错误的,下面是代码C++ 计算圆上的整点,c++,geometry,C++,Geometry,我写了一个小程序,但它给出的答案总是错误的,下面是代码 double radiusc; double xcenter; double ycenter; bool onthecircle(int x,int y); int main(void) { int inputwait; printf("Please enter x coordinate of your center point: "); scanf("%d",&xcenter); prin
double radiusc;
double xcenter;
double ycenter;
bool onthecircle(int x,int y);
int main(void)
{
int inputwait;
printf("Please enter x coordinate of your center point: ");
scanf("%d",&xcenter);
printf("Please enter y coordinate of your center point: ");
scanf("%d",&ycenter);
printf("Please enter the radius of the circle: ");
scanf("%d",&radiusc);
double left_x = xcenter - radiusc;
double left_y = ycenter;
double down_x = xcenter;
double down_y = ycenter - radiusc;
if(left_x >= floor(left_x))
{
left_x = floor(left_x);
int (left_x);
}
else
{
left_x = floor(left_x) + 1;
int (left_x);
}
for(left_x; left_x<=xcenter; left_x++)
{
for(left_y;left_y>ycenter-radiusc;left_y--)
{
if(onthecircle(left_x,left_y))
printf("Jest na kole: %d , %d \n", left_x,left_y);
}
}
scanf("%i",&inputwait);
return 0;
}
bool onthecircle(int x,int y)
{
double t1= x - xcenter;
double t2 = x - ycenter;
if ((t1*t1 + t2*t2) > (0,9 *radiusc*radiusc) &&
(t1*t1 + t2*t2) < (1,1 *radiusc*radiusc))
return 1;
else
return 0;
}
双半径;
双xcenter;
双中心;
圆上的布尔(整数x,整数y);
内部主(空)
{
int输入等待;
printf(“请输入中心点的x坐标:”;
scanf(“%d”和&xcenter);
printf(“请输入中心点的y坐标:”;
scanf(“%d”和&ycenter);
printf(“请输入圆的半径:”);
扫描频率(“%d”和半径);
左双_x=xcenter-radiusc;
左双y=中心;
双向下_x=xcenter;
双下y=圆心-半径;
如果(左x>=地板(左x))
{
左x=地板(左x);
int(左x);
}
其他的
{
左x=楼层(左x)+1;
int(左x);
}
用于(左x;左x中心-半径;左y--)
{
if(在椭圆上(左x,左y))
printf(“开玩笑的玩笑:%d,%d\n”,左x,左y);
}
}
scanf(“%i”、&inputwait);
返回0;
}
圆上的布尔(整数x,整数y)
{
双t1=x-xcenter;
双t2=x-中心;
如果((t1*t1+t2*t2)>(0,9*半径*半径)&&
(t1*t1+t2*t2)<(1,1*半径*半径)
返回1;
其他的
返回0;
}
当我调试时,输入0,0作为我的中心,r=1,它给我点0和一些大的数字,而不是将1保存为r的值,它得到一个随机的大数字,我不知道为什么。有什么想法吗?您对
scanf
的格式错误<代码>%d表示十进制整数。您需要将%lf
用于双
<>你说,为什么你不使用C++风格的I/O,即<代码> <代码>,<代码> cOUT <代码>,<代码> CIN < /代码>等等?这看起来像是C和C++的丑陋混合。 < P>你的格式到<代码> SCANF是错误的;代码>%d表示十进制整数。您需要将
%lf
用于双
<>你说,为什么你不使用C++风格的I/O,即<代码> <代码>,<代码> cOUT <代码>,<代码> CIN < /代码>等等?这看起来像是C和C++的一些难看的混合。 < P>除了ED发现的问题之外,<代码> 0,9< /代码>不是有效的浮点常数;您需要
0.9
。(区域设置可以影响输入和输出表示;它们不影响语言语法。)
(0,9*radiusc*radiusc)
中的逗号是逗号运算符,而不是小数点;将半径的平方乘以9
您缺少程序顶部的#include
和#include
(对于floor()
)(您的编译器可能会让您不受影响,但这不是可选的)
您的printf
调用中的格式不正确;您需要%f“
或%g”
来表示'double'
更多:
使用double
作为循环控制变量是有问题的。调用scanf(“%i”,&inputwait);
在没有提示的情况下终止程序之前等待输入是用户不友好的。不需要使用全局变量。我不知道int(左)是什么;
应该这样做;我认为它被解析为一个声明(一个你从未使用过的变量)括号是多余的。你使用类型名称<代码> BoOL 意味着你编译你的代码为C++,或者你有<代码> >包括< /C> >或“代码> BoOL < /代码>,你没有费心地告诉我们。
这差不多是我现在愿意做的调试。修复这些错误,然后重试。除了Ed发现的问题外,
0,9
不是有效的浮点常量;您需要0.9
(区域设置可以影响输入和输出表示;它们不会影响语言语法。)
(0,9*radiusc*radiusc)
中的逗号是逗号运算符,而不是小数点;您将半径的平方乘以9
您缺少程序顶部的#include
和#include
(对于floor()
)(您的编译器可能会让您不受影响,但这不是可选的)
您的printf
调用中的格式不正确;您需要%f“
或%g”
来表示'double'
更多:
使用double
作为循环控制变量是有问题的。调用scanf(“%i”,&inputwait);
在没有提示的情况下终止程序之前等待输入是用户不友好的。不需要使用全局变量。我不知道int(左)是什么;
应该这样做;我认为它被解析为一个声明(一个你从未使用过的变量)括号是多余的。你使用类型名称<代码> BoOL 意味着你编译你的代码为C++,或者你有<代码> >包括< /C> >或“代码> BoOL < /代码>,你没有费心地告诉我们。
这差不多是我现在愿意做的调试。修复这些错误并重试。@Keith:谢谢,错过了
l
。那么长浮点与双精度浮点相同?@Keith:谢谢,错过了l
。那么长浮点与双精度浮点相同?@myrkos:您可以自己定义它(例如,typedef enum{false,true})bool;
,或者在C99中你可以#包含
。它必须是C99,因为所有变量都不是在函数顶部声明的。我的问题是;int(left_x)
在做什么?@EdS:我认为它被解析为变量声明;括号是多余的。(我不知道它应该是什么。)更改将双精度设置为inti的错误括号应为(int)x而不是int(x)@myrkos:您可以自己定义它(例如,typedef enum{false,true}bool;
,或者在C99中,您可以#include
。它必须是C99,因为所有变量都不是在函数顶部声明的。我的问题是;