解题思路:
把问题转化为,求前N(每个N为公式中的分数)个数的和,直到fabs(N)<1E-6结束;
用while循环控制,PI/4=+1/1   -1/3   +1/5   -1/7    +1/9 ........

定义浮点型变量denominator表示分母,分子的变化pow(-1,i)  i从0开始,逐次加1;
分母和PI定义为浮点型,若分母为整型,输出结果为4.000000;


参考代码:

c++:

#include <iostream>
#include <iomanip>
#include <math.h>
using namespace std;

int main()
{
    double PI = 0, denominator = 1;;

    int i = 0;

    while ( 1 / denominator >= 1E-6 )
    {
        PI        += (pow( -1, i ) / denominator);
        denominator    += 2;
        i++;
    }
    cout << fixed << setprecision( 6 ) << PI * 4;
    return(0);
}

c:

#include <stdio.h>
#include <math.h>

int main()
{
    double PI = 0, denominator = 1;;

    int i = 0;

    while ( 1 / denominator >= 1E-6 )
    {
        PI        += (pow( -1, i ) / denominator);
        denominator    += 2;
        i++;
    }
    printf( "%.6f", PI * 4 );
    return(0);
}

别忘点赞哦-.-

点赞(21)
 

0.0分

7 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 15 条评论

煮酒老麦 4年前 回复TA
请问楼主是怎么加上最后一项的,我的需要后补一次循环步骤
#include<stdio.h>
#include<math.h>
int main() {
	int i=0;
	double p,q=0,k;
	do {
		i++;
		p=pow(-1,i-1)/(2*i-1);
		q=q+p;
		if(p<0) {
			p=0-p;
		}
	} while(p>=pow(10,-6));
	i++;//这里增加了一次。
	p=pow(-1,i-1)/(2*i-1);
	q=q+p;
	printf("%.6f",q*4);
	return 0;
}
煮酒老麦 4年前 回复TA
@初生羊犊 我在想,循环结束加入sum=sum-i严格上可能不对吧,那样不是把最后一项加上,而是减去了倒数第二项,结果相同,但是算法不同。
初生羊犊 5年前 回复TA
@初生羊犊 谢谢!
11111 5年前 回复TA
@浅枫 没毛病,难搞
smile浅笑 5年前 回复TA
@初生羊犊 因为最后一项小于1E-6,退出循环了,在循环结束后加一步sum=sum-t就可以了
smile浅笑 5年前 回复TA
@冲冲 因为最后一项小于1E-6,退出循环了,在循环结束后加一步sum=sum-t就可以了
初生羊犊 5年前 回复TA
#include<stdio.h>
#include<math.h>
int main()
{
	int n=0;
	double i,pi,sum=0;
	while(fabs(i)>=pow(10,-6))
	{
		i=pow(-1,n)/(2*n+1);
		sum=sum+i;
		n++;
	}
	pi=sum*4;
	printf("%.6lf\n",pi);
	return 0;
}
我的为什么是3.141595?麻烦大佬帮我看一下,谢谢!
初生羊犊 5年前 回复TA
@一叶知秋 我的哪里错了?为什么是3.141595?麻烦帮看一下,谢谢!
初生羊犊 5年前 回复TA
@一叶知秋 #include<stdio.h> #include<math.h> int main() { 	int n=0; 	double i,pi,sum=0; 	while(fabs(i)>=pow(10,-6)) 	{ 		i=pow(-1,n)/(2*n+1); 		sum=sum+i; 		n++; 	} 	pi=sum*4; 	printf("%.6lf\n",pi); 	return 0; }
初生羊犊 5年前 回复TA
@冲冲 我的哪里错了?也是3.141595