#include <stdio.h>
然後把main()改成void main()
可以在vc 6.0下通過
lz是用turbo c的吧
turbo c下好像是默認引用了stdio.h,默認main為void
但是其他的編譯器有的是不壹樣的
tc我沒有用過……所以,分就不用給了
------------------------------------------------
#include "math.h"
#include <stdio.h>
void main()
{
long int i,x,y,z;
for (i=1;i<100000;i++)
{ x=sqrt(i+100); /*x為加上100後開方後的結果*/
y=sqrt(i+268); /*y為再加上168後開方後的結果*/
if(x*x==i+100&&y*y==i+268)/*如果壹個數的平方根的平方等於該數,這說明此數是完全平方數*/
printf("\n%ld\n",i);
}
}
--------------------------------------------------------
以下是我修改的答復,不過是想說這樣壹句話:請大家解答問題的時候負責任的將修改後的源程序編譯執行然後確定沒錯再放上來說(如果確實已經這樣了,那麽我很欣賞這種態度)
合理地使用強制轉換是沒有任何問題的,正如原代碼中
y = sqrt(i + 268)//是“再+168”不是“+168”!
如果sqrt的結果從double -> int中出現了數值誤差,那麽當然就不可能滿足y*y == i + 268這個條件,就不是完全平方數。
自然就不會有什麽所謂轉換誤差導致錯誤的事情了
還有,所謂的重載這裏當然不會發生,如果編譯器不知道使用哪壹個重載函數,就會編譯錯誤,不能執行。但是我確定可以在vc下正確執行,我將修改後的程序和結果貼在這裏,如果大家發現錯誤,歡迎扔雞蛋
#include "math.h"
#include <stdio.h>
void main()
{
long int i,x,y,z;
for (i=1;i<100000;i++)
{ x=sqrt(i+100); /*x為加上100後開方後的結果*/
y=sqrt(i+268); /*y為再加上168後開方後的結果*/
if(x*x==i+100&&y*y==i+268)/*如果壹個數的平方根的平方等於該數,這說明此數是完全平方數*/
printf("%d,%d,%d,%d,%d,%d,%d\n",x,y,x*x,y*y,i,i+100,i+268);
}
}
---------- Run ----------
11,17,121,289,21,121,289
19,23,361,529,261,361,529
41,43,1681,1849,1581,1681,1849
Output completed (0 sec consumed) - Normal Termination
最後還是那句話,如果lz使用的是tc,我沒用過,我記得tc是默認引用stdio.h,但是其他的編譯器卻不是默認的,真的是因為這個原因,分可以不給