问题描述
- C语言简单程序调试问题
-
这是源码:#include
#includeint main()
{
double x,y,z,i;
for(x = 1;x<100000;x++)
{y = sqrt(x+100);
z = sqrt(x+268);
if((y*y == x+100)&&(z*z == x+268))
{
printf("%lfn",x);
}
}return 0;
}
不知道问题出在哪里?麻烦解答一下。
另,为什么知道设定的数值范围是1-10万,这个是不一定的?
再另,表示对for里面的不太理解PS,题目:一个整数,它加上100后是一个完全平方数,
再加上168又是一个完全平方数,请问该数是多少?
解决方案
#include<stdio.h>
#include<math.h>
int main()
{
int x = 0;
while (true)
{
if (((int)sqrt(x + 100) * (int)sqrt(x + 100) == x + 100)
&& ((int)sqrt(x + 168) * (int)sqrt(x + 168) == x + 168))
{
printf("%dn", x);
break;
}
x++;
}
return 0;
}
解决方案二:
#include
#include
int main()
{
double y,z,i;//int 型
for(int x = 1;x<100000;x++) //100000是让这个数尽量大
{
y = sqrt(x+100);//开平方后不一定是整数,可能是小数
z = sqrt(x+268);
if((y*y == x+100&&z*z == x+268))//如果满足这两个条件,说明y,z是整数,也就是说x+100和x+268是完全平方数
{
printf("%lfn",x);
}
}
return 0;
}
解决方案三:
你的y,z应该是整数,你是for里面的循环代码看不懂么?如果一个数+100或者168取平方根是整数那么这个数才是完全平方数。所以你得保证你的y,z是整数类型,如果这个数不是完全平方数,那么取平方根的时候会做精度取舍,你再平方就不会等于这个数加上100或者268,相当于检验的目的,当然这个检验的前提也是yz是整型