我是编程新手,我正在编写一个基于两个输入(x和n)来计算系列总和的代码
这是我到目前为止所做的:
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int k,n;
double x, sn=0;
cout<<"enter n:";
cin>>n;
cout<<"enter x:";
cin>>x;
for(k=1;k<=n;k++)
{
sn+=(pow(-1, (1+k)))*((pow(x, k))/k);
}
cout<<sn;
cout<<endl;
return 0;
}
我不确定我的代码中是否存在一些基本错误,或者数学表达式中是否存在错误。我一直都是0
答案 0 :(得分:1)
将main()
更改为int main()
。 C ++需要所有函数的类型说明符(尤其是main
)。
说实话,我不确定如何在没有它的情况下编译它。
正如另外一个“fyi”,您也可以进行这两项更改(但它们没有必要):
将main()
更改为int main(int argc, char const *argv[])
。这是main
的完整函数头,它允许您处理命令行参数。您的程序不会采用任何命令行参数,因此在这种情况下,简单的int main()
更清晰(因此更可取)。
将return 0;
作为main
函数体中的最后一行。无论程序在结束时返回什么值,操作系统都能以某种方式知道程序是成功还是失败。从技术上讲,如果你不做任何其他事情并且你的程序正常终止,C ++会隐式返回0
。尽管如此,在某些圈子中,明确地return 0;
(或#include <stdlib.h>
和return EXIT_SUCCESS;
)被认为是好的风格,而不是让返回的函数从块的末尾掉下来。
编辑:
在回复您的编辑和评论时,问题可能在于其他地方。我会强烈建议查看Basile Starynkevitch对你的问题的评论中的链接。为了做到正确,浮点运算可能是一个棘手的问题。
此外,请说明您正在使用的输入值。无论何时,只要您向其他人寻求帮助,这是一种通用做法,但在这种情况下,由于上述浮点运算问题,这一点尤为重要。
答案 1 :(得分:0)
删除昂贵的pow
功能
即
double xk = 1;
for(k=1;k<=n;k++)
{
xk *= x;
if (k%2 == 0) { // k is even -> -1 ^ (1+k) = -1 * -1^even number = -1
sn -= xk/k;
} else {
sn += xk/k;
}
}
PS:这应该是一个评论 - 但评论使代码不可读