C语言计算π的值求改错

题目是输入一个精度,根据一个算法求出派的值,算法我已经写好了是对的。只有一个地方有疑问,在程序中我标注出来了求大神解答。
#include <stdio.h>
#include <math.h>
double fun ( double eps)
{
double s = 1.0,t = 1.0;
int i;
for (i = 1;t >= eps;i++)
{
t = t * (i / (2 * i + 1)); //注意就是这个地方有错误,如果改成t = t * i / (2 * i + 1); 即去掉一个括号就是对的,这是为什么!!多加一个括号直接输出2.00000了,不加那个括号就可以正确运行。
s = s + t;
}
return 2*s;
}

main( )
{ double x;void NONO ();
printf("Input eps:") ;
scanf("%lf",&x); printf("\neps = %lf, PI=%lf\n", x, fun(x));
NONO();
}
是C语言中不能计算双括号吗?我是菜鸟。

t = t * i / (2 * i + 1); 这样 运算时,先算t*i ,因为t是浮点数,所以t*i结果就是浮点数 再除以整数,结果是浮点数

而:
t = t * (i / (2 * i + 1)); 这样,先算括号中的,i / (2 * i + 1) i是整数,所以,结果还是整数,小数部分会被丢弃,因此,结果总是0
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-09-27
此处变量i是int型的,故子表达式i / (2 * i + 1)必然也是一个int型的数据,故而子表达式i / (2 * i + 1)的值必然始终都是0
而表达式t * i / (2 * i + 1)根据运算符结合性可知即(t * i) / (2 * i + 1),由于t是double型,故子表达式(t * i)必然是double型,不会产生上述问题
或者你可以直接改成t = t * (i / (2.0 * i + 1)); 也可以,这个地方就是隐式类型转换的问题而已本回答被提问者采纳
第2个回答  2015-02-08
不是括号的问题,是整数相除的问题。
整数相除的时候会直接舍去小数部分,比如3/2=1
去掉括号后,因为先计算t*i,其中t为浮点型,相除结果是也会是浮点,最后能得到正确的值。
加上括号,那么就会先进行括号中运算,i/(2*i+1)无论i是什么值,其结果都是0

C语言计算π的值求改错
t = t * i \/ (2 * i + 1); 这样 运算时,先算t*i ,因为t是浮点数,所以t*i结果就是浮点数 再除以整数,结果是浮点数 而:t = t * (i \/ (2 * i + 1)); 这样,先算括号中的,i \/ (2 * i + 1) i是整数,所以,结果还是整数,小数部分会被丢弃,因此,结果...

C语言,求π的值,怎么得不出正确答案呢?求大神帮忙找错!
include <stdio.h>#include <math.h>void main(){int i, n;double pi, sum = 0;printf("please input a number");scanf("%d", &n);for (int i = 1;i <= n;i++)sum += 1.0 \/ (i*i);pi = sqrt(6 * sum);printf("pi=%f,n=%d", pi, n);} ...

改错题,c语言编程求π近似值,可是运行结果是2.00000,应该的结果是3.14159...
int main(void){ int i;double sum, item=10; \/\/ 初始时为item赋一个较大的值,不然第一次循环就是非法使用item sum = 1;for(i = 1;item >= 1e-6; i++){ item = fact(i) \/ multi(2*i+1);sum = sum + item;} printf("PI=%0.5lf\\n", sum * 2);system("pause");r...

c语言用for语句求π的近似值结果是4.000000 而不是3.14159 哪里需要改 ...
if("1.0\/j<1e-6")改成 if(1.0\/j<1e-6)这里不能带引号的 否则就是字符串了。第一次循环就会退出。

二级C语言的题,题目是求π的近似值,麻烦看一下,代码错在哪
k=k*(2*i+1); \/\/printf("执行到这里2"); \/\/printf("%f,%f",m,k); } d=(double)m\/k; s+=d; } return 2*s;}int main( ){ double x; printf("Input eps:") ; scanf("%lf"

帮忙看一下我的程序哪里错了,用C语言写的,题目是求解π的近似值
n=1.0\/(2*i-1); \/\/这里改一下就好了,因为整数相除结果还是整数,1\/3结果是0,没有小数,想要小数部分,就需要有浮点数参与

c语言 计算π的值
π\/4 = 1-1\/3+1\/5-1\/7……要是这样的话,就我下面的代码 include <stdio.h> include <math.h> main(){ int i,j=1;float pi=0;for(i=1;1.0\/i>=1e-6;i+=2){ pi+=j*1.0\/i;j*=-1;} printf("PI的近似值为%d",4*pi);} 看我的代码,有什么感想?

C语言求PI值,哪出错了?
你的 n 在 (tfact() fact())两个函数里面都没有赋初值啊...

C语言求π的值的问题
pi=pi+fenzi\/fenmu;fenzi=-1*fenzi;} printf("π=%lf\\n",4*pi);getchar();return 0;} 输出:π=3.121595 另外,再推荐个类似的程序:π\/2的近似值公式为:π\/2=(2\/1)*(2\/3)*(4\/3)*(4\/5)*...(2n\/2n-1)*(2n\/2n+1)...其中n=1、2、3...程序如下:include<stdio.h>...

c语言 计算π的近似值
include <stdio.h> include <stdlib.h> int main(){ float sum=0.0;float i=1,d=1;while(1\/i>=1e-6){ sum=sum+d\/i;d=d*(-1);i=i+2;} sum=sum*4;printf("%10.8f\\n",sum);system("pause");return 0;} 输出结果为:3.14159369 ...

相似回答