C语言类型转化问题!!!

来源:百度知道 编辑:UC知道 时间:2024/06/15 02:55:42
#include <math.h>
#include <stdio.h>
float fun(float num)
{
int s;
float n, t, pi;
t = 1;
pi = 0;
n = 1;
s = 1;
/********found********/
while (fabs(t) >= num)
{
pi = pi+t;
n = n+2;
s = -s;
/********found********/
t = s/n; \s不是int型么?哪为什么t能得到小数;
而我写另一个程序时,发现这个事得不到的。

}
pi = pi*4;
return pi;
}
main()
{
float n1, n2;
printf("Enter a float number: ");
scanf("%f", &n1);
n2 = fun(n1);
printf("%6.4f\n", n2);
}

因为n是一个float类型,计算的时候是往上转化的,会把s转化成float类型才计算

另一个程序中可能是n为int类型的,两个int类型的进行计算,结果是int类型的

有问题hi我

因为n是float类型的,这样“/”两边类型不同,因此会试图把int向float转化,表达式结果是float。即t=s/n在编译器内部会当作为t =(float) s/n处理。(LS,t =(int) s/n不是什么都没做么- -。。。)
这里的自动隐式强制类型转换是针对“/”运算符的。也有针对“=”运算符的,例如:float t;
int s=1,n=3;
t=s/n;
printf("%f\n",t);
看起来应该输出0.333333。
但实际输出的是0.000000。
如果按t =(float) s/n;来说,s在除法前被转换为float,s/n做浮点除法,printf的%f输出默认保留6位,结果当然是0.333333了。
但是事实上是先把s/n按整数除法计算,商0为临时变量(编译器干的,你看不见)。然后把这个临时变量赋值给s时自动转换了(因为要被赋值的s是float型的,和保存右边表达式结果的临时变量不同,所以会试图自动转换——这里当然是可以转换成功的,如果s是复杂的类型例如struct,会弹出编译错误),结果是float型的0.000000。
----
[原创回答团]

强制转换一下啊 t =(int) s/n;