C类型转换问题~

来源:百度知道 编辑:UC知道 时间:2024/06/14 19:30:28
#include <conio.h>
#include <math.h>
#include <stdio.h>
double fun(double eps)
{
double s, t;
int n = 1;
s = 0.0;
/********found********/
t = 1; \我给t是赋值1
/********found********/
while (t >= eps)
{
s += t; \t的值是1 哪就是整数~ 哪s会被强制转化么?
t = (t*n)/(2*n+1); \ 竟然t是 整数
(t*n)/(2*n+1)这个的值应该也被强制转化了 啊~~
printf(" %f",t); \这是我用来
检测一下t的值,竟然是double型~
n++;
}
return (s*2.0);
}
main()
{
double x;
printf("\nPlease enter a precision: ");
scanf("%lf", &x);
printf("\neps=%lf, Pi=%lf\n\n", x, fun(x));
}
请帮我解释下~~~

你这个是隐含转换,数据类型从低类型转向高类型,低到高排序为:char,unsigned char,short ,unsigned short,int,unsigned int,long,unsigned long,float,double,long double。
如果没有特殊说明,混合运算会自动把低类型转向高类型。况且t=1,t还是浮点数,并不是整数!整数和浮点数最大区别不在于数值,而是储存空间大小。(t*n)/(2*n+1)这个表达式才有隐含转换存在,n被转成了float类型。

强制转换的话可以强制从高转到低(但容易数据溢出,不稳定),也可以在你想转换的地方转换,做法为在数据前加(类型)。
例如: float t,s;
int n=1;
s=n/2+0.5;
t=(float)n/2+0.5;
printf("%f %f",s,t);
这段代码结果为:0.500000 1.000000
原因为,s的值中,n为整数,1除以2得0,加了0.5转成浮点数,最终为0.5
t的值中,n先变成了浮点,1除以2得0.5,再加0.5,最终为1
懂了吧?

没有啊 double和int混合运算得到的结果都是double 何况你的t是double的
如果要强制转化成int 要用int()