C语言中的一题
题目是这样的:小甲鱼老师提供的答案如下:
#include <stdio.h>
#include <math.h>
int main()
{
int sign = 1; // 表示符号
double pi = 0.0, n = 1, term = 1.0; // n表示分母,term表示当前项的值
while (fabs(term) >= 1e-8) // 1e-8表示10^(-8)
{
pi = pi + term;
n = n + 2;
sign = -sign;
term = sign / n;
}
pi = pi * 4;
printf("pi = %10.7f\n", pi);
return 0;
}
一开始的答案如下:
#include <stdio.h>
#include <math.h>
int main()
{
double a=1;//储存每次分数的值
int zi=1; //分子
double mu=1; //分母
double cnt=0;// 计数器
int b;
for(b=1;fabs(a)>=pow(10,-8);b++)
{
cnt=cnt+a;
a=(pow(-1,b))*(zi/(mu+2)); /*这里把 zi=-zi用pow(-1,b)来代替,
一开始是这么想的。 */
mu=mu+2;
}
printf("%10.7f\n",4*cnt);
return 0;
}
可能想复杂了吧,但是思路是对的,就是搞不明白为什么算不出 3.1415926 ,直接卡住了。
然后看了答案,修改了一下
#include <stdio.h>
#include <math.h>
int main()
{
double a=1;//储存每次分数的值
int zi=1; //分子
double mu=1; //分母
double cnt=0;// 计数器
int b;
for(b=1;fabs(a)>=pow(10,-8);b++)
{
cnt=cnt+a;
zi=-zi; //修改的地方
a=(zi/(mu+2));
mu=mu+2;
}
printf("%10.7f\n",4*cnt);
return 0;
}
然后成功算出了3.1415926
我第一次写的代码,为什么算不出来呢?求大神解答。{:5_100:}
只是运行久了点。
3.1415926
Press any key to continue ba21 发表于 2017-10-9 20:34
只是运行久了点。
3.1415926
Press any key to continue
确实是这样的,谢谢版主。{:5_92:}
页:
[1]