2013-12-16 73 views
1

在這個程序中,我不能得到正確的輸出,在這個程序中,我必須計算輸入的點是在圓內還是在圓外,或者是在給定中心的圓的邊界上圓的半徑和圓的半徑。有時在給予正確答案的同時,有時候不給予正確答案。例如,如果我輸入(0,0)作爲中心,並將半徑= 10並檢查點(10,0),則表示該點位於圓圈之外。不知道爲什麼會發生這種情況,因爲在其他情況下檢查它是給出正確的答案。這裏是源代碼的程序 -計算關於一個圓的點時輸出不正確

#include<stdio.h> 

main() 
{ 
    float x1,y1,x2,y2,r,z; 

    printf("Please Enter The X And Y Coordinates Of The Centre Of The Circle = "); 

    scanf("%f%f",&x1,&y1); 

    printf("\nPlease Enter The Radius Of The Circle = "); 

    scanf("%f",&r); 

    printf("\nPlease Enter The Coordinates Of The Point You Want To Check"); 

    scanf("%f%f",&x2,&y2); 

    z=x1*x1+x2*x2-2*x1*x2+y1*y1+y2*y2-2*y1*y2; 

    if(z*z==r*r) 
     printf("\nThe Point Entered Lies On The Boundary Of The Circle Described"); 

    else if(z*z>r*r) 
     printf("\nThe Point Entered Is Outside The Circle Described"); 

    else 
     printf("\nThe Point Entered Lies Inside The Circle"); 

} 
+1

爲什麼不做一些調試,例如打印'z'的值? –

+0

是否有你可以使用的'math.h'函數? –

+1

@BitFiddlingCodeMonkey - 我知道有功能,但根據這本書,因爲我正在完成這本書,因爲它沒有在學期完成= = –

回答

2

更改條件

if(z*z==r*r) 

if(z==r*r) 

else if(z*z>r*r) 

else if(z>r*r) 

因爲z已經是您計算的兩點之間距離的平方。

+0

謝謝老兄。忘了那= =這是你第二次幫助我。謝謝 –

+0

你知道你在哪裏犯錯嗎? – haccks

+0

是的,這是一個邏輯錯誤,因爲它就像編譯[(x1-x2)^ 2 +(y2-y1)^]^2和半徑^ 2一樣,就數學而言是錯誤的。 –