形参 double err:精度要求
形参 char mode:选择的级数类型(输入其他字符错误)
返回值:计算出的圆周率近似值,double 型
#include<iostream>
#include<cmath>
#include<stdlib.h>
#include<iomanip>
using namespace std;
double pi(double err,char mode);//函数声明
int main()
{
double f,g,j;
char h;
int i=1;
cout<<"输入精度,和模式类型(a,b或c):";
cin>>f;
cin>>h;
if (h!='a'&&h!='b'&&h!='c')//确保mode有定义
{
cout<<"输入错误";
return 0;
}
else
g=pi(f,h);
j=f;
for(i;i<10;i++)
{
if(j==1)
break;
else
{
j=j*10;
}
}
cout<<"pi的值是:";
cout<<setprecision(i)<<g;
return 0;
}//主函数
double pi(double err,char mode)//定义函数,两个形参
{
switch (mode){
case'a':
{
int n_1=0;
double sum_1=0.0,d_1,e_1;
while(1)
{
d_1=pow(-1,n_1)/(2*n_1+1);
e_1=abs(d_1)*4;
if(e_1>err)
{
sum_1=sum_1+d_1;
n_1++;
}
else
break;
}
sum_1=sum_1*4;
return sum_1;
}
break;//mode a
case'b':
{
int n_2=0;
double sum_2=0.0,d_2,e_2;
while(1)
{
d_2=1/pow((2*n_2+1),2);
e_2=sqrt(d_2*8);
if (e_2>err)
{
sum_2=sum_2+d_2;
n_2++;
}
else
break;
}
sum_2=sqrt(sum_2*8);
return sum_2;
}
break;//mode b
case'c':
{
int n_3=1;
double sum_3=0.0,d_3,e_3;
while(1)
{
d_3=1/pow(n_3,4);
e_3=pow(d_3*90,1.0/4);
if(e_3>err)
{
sum_3=sum_3+d_3;
n_3++;
}
else
break;
}
sum_3=pow(sum_3*90,1.0/4);
return sum_3;
}
break;//mode c
default:
{
return 0;
}
break;//确保函数正常运行
}
}
统计比较三种级数达到相同精度所用的项数
#include<iostream>
#include<cmath>
#include<stdlib.h>
#include<iomanip>
using namespace std;
int main()
{double err;
cout<<"输入精度要求:";
cin>>err;
int n_1=0;
double d_1,e_1;
while(1)
{
d_1=pow(-1,n_1)/(2*n_1+1);
e_1=abs(d_1)*4;
if(e_1>err)
{
n_1++;
}
else
break;
}
int n_2=0;
double d_2,e_2;
while(1)
{
d_2=1/pow((2*n_2+1),2);
e_2=sqrt(d_2*8);
if (e_2>err)
{
n_2++;
}
else
break;
}
int n_3=1;
double d_3,e_3;
while(1)
{
d_3=1/pow(n_3,4);
e_3=pow(d_3*90,1.0/4);
if(e_3>err)
{
n_3++;
}
else
break;
}
cout<<"n_1的值是:"<<n_1<<endl;
cout<<"n_2的值是:"<<n_2<<endl;
cout<<"n_3的值是:"<<n_3<<endl;
return 0;
}