菜鸟刚开始学c++,求大神看看这个代码有什么问题呢?

题目是写个代码求圆周率,
l π的计算公式如下:

l 其中arctan用如下形式的级数计算:

l 直到级数某项绝对值不大于10-15为止;π和x均为double型。
我没有用答案给的方法,数学都忘得差不多了。就想当然地写了下面这样的,求大神指点。

#include "stdafx.h"
#include<iostream>
using namespace std;
double arctan(double x);
double power(double y,int n);
int _tmain(int argc, _TCHAR* argv[])
{
int PI=0;
PI=16*arctan(1/5)-4*arctan(1/239);
cout<<PI<<endl;
return 0;
}
double arctan(double x)
{
double sum=0;
for(int i=0;power(x,2*i+1)/(2*i+1)<=1/power(10,15);i++)
sum+=(power(-1,i))*(power(x,2*i+1)/(2*i+1));
return sum;
}
double power (double y,int n)
{
double val=1.0;
while(n--)
val*=y;
return val;
}

撇开效率和精度不谈,程序本身有三处错

    int PI=0;

    int应该改成double

    PI=16*arctan(1/5)-4*arctan(1/239);

    1/5和1/239是整数除法,结果都是0,应该用实数除法,比如1.0/5.0

    for(int i=0;power(x,2*i+1)/(2*i+1)<=1/power(10,15);i++)

    中间的<=改成>=,因为通项足够小是停机条件,而不是循环执行的条件

温馨提示:内容为网友见解,仅供参考
无其他回答

菜鸟新学c++。求高手鉴定这道c++题目我哪里做错了,应该怎么改怎么做...
我发现了3个问题:1、当n很大时(如99998),a1和a2的取值超出了double的范围。2、{for(b=1,a1=1,a2=2;b<=n;b++)语法错误。3、for循环中只有分子的值做了对应修改,分母的值未做对应修改。我修改了以下你看看可以不。#include <iostream> include <iomanip> using namespace std;int main(...

C++编程遇到的菜鸟问题
看这个错误提示:LINK : error LNK2001: 无法解析的外部符号 _mainCRTStartup,表示编译是没有问题,也就是说语法是正确的。错误是发生在link阶段,再看这个:“无法解析的外部符号 _mainCRTStartup”, 表示它不识别你的主函数main,由此可以判断,错误出在了你建立的工程上,你应该建立一个控制台应用...

本人菜鸟,请问这段C++代码错在哪? #include "string" #include "string...
string,string.h并且这两个头文件不是你自己定义的,只引用一个就可以了,他们是一个头文件

...谁帮我弄下,我菜鸟学C++的,自学没人教,哪位大神帮我看下
右键点工程名,选设置,然后选c\/c++属性页,再选catagory选单中选 precompiled header ,将选项置成no use 或者autometic

C++菜鸟编译过不去,求大神
你好,没有什么大问题,可能是你不小心了,改正如下:include <iostream> using namespace std;class point { private:int x;int y;public:void setpoint (int a,int b)\/\/这里,函数没有返回值,所以应该是void类型 { x=a;y=b;} int getx (){ return x;} int gety (){ return y;} }...

一个C++程序,请各位大神看看到底为啥错了,一直提示我最后一行有错 在下...
break;case'1':y=0.9*x; break;case'2':y=0.8*x; break;default:y=0.7*x;} } cout<<"支付折扣为"<<y<<endl;} \/\/double是不能用作switch的参数,因为double型的表示是不确定的范围,比如:double i=1.342;那么这个i=1.342的后面还有很多个0,所以就用隐式转换;祝你愉快 ...

求高手帮忙解决下面这个C++中的一个题目。看俺的代码哪里有错...
1.求个位数,直接用n%10就可以了,你那样子是求的最高位的值 2.既然你已经定了个位为7,直接给m赋7就可以了吧。3.你上面那样子算的时候,最后退出第一个while循环的时候,n是为0的,下面不能用这个n计算,你若是不断的用n\/=10,开始应该用个变量保存这个n的值 4.还有在main中,不能单单...

菜鸟问题:c++编译错误(急求解决)
这个不是程序的错误 估计是你工程文件建错了 或者是 工程里面没有添加进去这个文件 如果都不是的话 看下是不是软件安装有问题

c++这个标准输入输出的为什么会有错?(菜鸟级问题)
肯定错了 必须用push_back或push_head之类的函数添加。否则是没有内存分配的,你可以用size看下,它的size应该为0

vc++学习困惑,对于初学者怎么才能学好,但求高手指点。
也许对着书本敲代码会,,但是一旦 要你自己来写就不知道从何下手! 我相信这是很重要的,所以先学直接用Win32 API直接写,,从WinMain()开始,如果这个了解的差不多了,,你就可以去学MFC了,但是MFC也是比较复杂地,..到那时候就的去看看一些关于MFC内部机制的书了!比较畅销的有《深入浅出MFC...

相似回答