#include<stdio.h>
#include<math.h>
int main()
{
int n,m;
double s;
printf("请输入一个数n:");
scanf("%d",&n);
while(n>=1000)
{
printf("输入错误,请重新输入一个整数n:");
scanf("%d",&n);
}
s=sqrt(n);
if((int)s==s)
printf("%d的平方根为整数,结果是%0.0lf",n,s);
else
printf("%d的平方根是%lf,不是整数,保留整数结果为%0.0lf",n,s=sqrt(n),s=(int)s);
}
为什么强制类型转化会将2.828427转换为3??
int 是整数, 你期待 2.8 会转换为什么样的整数你才满意呢?
这跟浮点数的编码方式有关,默认情况下应该是向最接近的整数值舍入。
强制类型转化int是向下取整,输出那里改为
printf("%d的平方根是%lf,不是整数,保留整数结果为%0.0lf",n,s,s=(int)s);
2.828427转换为2.,我也想知道为什么会有那么大的不同
改正一下,
printf("%d的平方根是%lf,不是整数,保留整数结果为%0.0lf",n,s=sqrt(n),a=(int)s);//再定义一个double a;
抱歉
刚刚测试了一下,发现输出的是double s,而不是int s。
printf("%d的平方根是%lf,不是整数,保留整数结果为%0.2lf",n,s=sqrt(n),s=(int)s);
改了那个保留的小数位数后,输出的是2.83,如果输出的是强制转化过的s,输出的应该是2.00才对,所以当小数位位数为0时,输出是经过四舍五入的,强制类型转化的值根本没有输出