Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 什么';怎么了?我怎样才能更改“的”;sum1“;点菜?_C++ - Fatal编程技术网

C++ 什么';怎么了?我怎样才能更改“的”;sum1“;点菜?

C++ 什么';怎么了?我怎样才能更改“的”;sum1“;点菜?,c++,C++,我试图用泰勒级数公式计算cos x的值 infinity ---- 2k \ k x cos(x) = / (-1) * ------------- ---- (2k)! k=0 以图形方式显示在 这是我的节目 #include "stdafx.h

我试图用泰勒级数公式计算cos x的值

             infinity
             ----                  2k
             \            k      x
 cos(x) =    /        (-1)  * -------------
             ----                (2k)!
             k=0
以图形方式显示在

这是我的节目

#include "stdafx.h"
#include <iostream>
#include <string>
#include <cmath>
using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
    double sum=0.0,sum1=0.0;
 double x;
 cin>>x;
 for(int i=0 ; i<=10 ; i=i+1 )
 {
  for(int i=1 ; i<=20 ; i=i+1)
  {
   sum1=i*sum1+sum1;
  }
     sum=pow(-1,(double)i)*pow(x,(double)(2*i))/sum1+sum;
 }
 cout<<"Sum : "<<sum<<endl;
 system("pause");
 return 0;
}
#包括“stdafx.h”
#包括
#包括
#包括
使用名称空间std;
int _tmain(int argc,_TCHAR*argv[]
{
双和=0.0,sum1=0.0;
双x;
cin>>x;

for(int i=0;i您正在使用
i
作为嵌套在彼此内部的两个for循环的控制变量的名称。这不会按您预期的方式工作

接下来,
sum1
是0。不管你用零乘以多少次,再加上零,它仍然是零。然后你除以零,这就是为什么你的最终答案是
NaN
(不是数字)


您需要修复阶乘的计算。为什么不先编写一个阶乘函数并自己测试它呢?

您正在使用
i
作为嵌套在彼此内部的两个for循环的控制变量的名称。这不会按您预期的方式工作

接下来,
sum1
是0。不管你用零乘以多少次,再加上零,它仍然是零。然后你除以零,这就是为什么你的最终答案是
NaN
(不是数字)


您需要修复阶乘的计算。为什么不先编写一个阶乘函数并自己测试它呢?

您正在重新定义内部循环中的i

for(int i=0 ; i<=10 ; i=i+1 )
 {
  for(int i=1 ; i<=20 ; i=i+1)

for(inti=0;i您正在内部循环中重新定义i

for(int i=0 ; i<=10 ; i=i+1 )
 {
  for(int i=1 ; i<=20 ; i=i+1)

for(int i=0;i您似乎没有正确计算阶乘。应该是

sum1 = 1.0;
for(int k=1 ; k<=i*2 ; k=k+1) 
{ 
    sum1 *= k; 
} 
sum1=1.0;

对于(int k=1;k来说,您似乎没有正确计算阶乘。应该是

sum1 = 1.0;
for(int k=1 ; k<=i*2 ; k=k+1) 
{ 
    sum1 *= k; 
} 
sum1=1.0;

对于(intk=1;k许多事情都有点奇怪。 首先:请写ANSI C++,尽量不要采用微软的东西,我不知道,但我想那些是为专业的。让我们坚持基本的东西。 以下是您应该做的:

#include <iostream>
#include <string>
#include <cmath>

using namespace std;

double factorial(double fac)
{
    if(fac == 0)
        return 1;
    return fac * factorial(fac - 1);
}

int main(int argc, char* argv[])
{
    double sum=0.0;
    double x;
    cin >> x;

    for ( int i = 0 ; i <= 10 ; i++ )
    {
        double divisor = factorial ( 2 * i );
        if(divisor != 0.0)
        {
            sum += (double)( (pow( -1 , i ) * pow (x , 2*i )) / divisor );
        }
    }
    cout<<"Sum : "<<sum<<endl;
    //system("pause");
    return 0;
}
#包括
#包括
#包括
使用名称空间std;
双阶乘(双fac)
{
如果(fac==0)
返回1;
返回fac*阶乘(fac-1);
}
int main(int argc,char*argv[])
{
双和=0.0;
双x;
cin>>x;

对于(inti=0;i许多事情都有点奇怪。 首先:请写ANSI C++,尽量不要采用微软的东西,我不知道,但我想那些是为专业的。让我们坚持基本的东西。 以下是您应该做的:

#include <iostream>
#include <string>
#include <cmath>

using namespace std;

double factorial(double fac)
{
    if(fac == 0)
        return 1;
    return fac * factorial(fac - 1);
}

int main(int argc, char* argv[])
{
    double sum=0.0;
    double x;
    cin >> x;

    for ( int i = 0 ; i <= 10 ; i++ )
    {
        double divisor = factorial ( 2 * i );
        if(divisor != 0.0)
        {
            sum += (double)( (pow( -1 , i ) * pow (x , 2*i )) / divisor );
        }
    }
    cout<<"Sum : "<<sum<<endl;
    //system("pause");
    return 0;
}
#包括
#包括
#包括
使用名称空间std;
双阶乘(双fac)
{
如果(fac==0)
返回1;
返回fac*阶乘(fac-1);
}
int main(int argc,char*argv[])
{
双和=0.0;
双x;
cin>>x;

对于(int i=0;i当除以0时,结果变成无穷大(打印为
-1.#IND

给出了一个很好的简单方法,每次重新计算整个阶乘,并使用
pow
函数来计算公式中的交替符号。但是,您可以更快地对该代码进行改进

  • 循环的一次迭代中的阶乘函数可以利用这样一个事实:在循环的先前迭代中,您已经将所需的大部分项相乘

  • 指数
    (-1)^k
    只是一种在加法和减法之间交替的方法——你可以用一个变量来代替它,这个变量在循环中的每次迭代中都会改变它的符号。(除了我在这里介绍的方法外,还有其他方法可以做到这一点,关键是你不需要调用
    pow()
    函数来实现它。)

  • 另一个幂函数
    x^(2k)
    也可以以相同的方式展开

  • 我消除了循环的第一次迭代,因为我可以在头脑中计算它(对于任何
    x
    ,它都是1.0),并将
    sum
    的初始值设置为
    1.0
    。这样
    阶乘
    就永远不会乘以0

  • 试试这个

    #include "stdafx.h"
    #include <iostream>
    #include <string>
    #include <cmath>
    using namespace std;
    
    int _tmain(int argc, _TCHAR* argv[])
    {
     double x;
     cin>>x;
     double sum=1.0, factorial=1.0, sign=-1.0, power=1.0;
     for(int i=1 ; i<=10 ; i=i+1 )
     {
         factorial*= (2*i-1) * 2*i;
         power *= x * x; 
         sum += sign * power/factorial;
         sign = -sign;
     }
     cout<<"Sum : "<<sum<<endl;
     system("pause");
     return 0;
    }
    
    #包括“stdafx.h”
    #包括
    #包括
    #包括
    使用名称空间std;
    int _tmain(int argc,_TCHAR*argv[]
    {
    双x;
    cin>>x;
    双和=1.0,阶乘=1.0,符号=1.0,幂=1.0;
    
    对于(int i=1;i当除以0时,结果变成无穷大(打印为
    -1.#IND

    给出了一个很好的简单方法,每次重新计算整个阶乘,并使用
    pow
    函数来计算公式中的交替符号。但是,您可以更快地对该代码进行改进

  • 循环的一次迭代中的阶乘函数可以利用这样一个事实:在循环的先前迭代中,您已经将所需的大部分项相乘

  • 指数
    (-1)^k
    只是一种在加法和减法之间交替的方法——你可以用一个变量来代替它,这个变量在循环中的每次迭代中都会改变它的符号。(除了我在这里介绍的方法外,还有其他方法可以做到这一点,关键是你不需要调用
    pow()
    函数来实现它。)

  • 另一个幂函数
    x^(2k)
    也可以以相同的方式展开

  • 我消除了循环的第一次迭代,因为我可以在头脑中计算它(对于任何
    x
    ,它都是1.0),并将
    sum
    的初始值设置为
    1.0
    。这样
    阶乘
    就永远不会乘以0

  • 试试这个

    #include "stdafx.h"
    #include <iostream>
    #include <string>
    #include <cmath>
    using namespace std;
    
    int _tmain(int argc, _TCHAR* argv[])
    {
     double x;
     cin>>x;
     double sum=1.0, factorial=1.0, sign=-1.0, power=1.0;
     for(int i=1 ; i<=10 ; i=i+1 )
     {
         factorial*= (2*i-1) * 2*i;
         power *= x * x; 
         sum += sign * power/factorial;
         sign = -sign;
     }
     cout<<"Sum : "<<sum<<endl;
     system("pause");
     return 0;
    }
    
    #包括“stdafx.h”
    #包括
    #包括
    #包括
    使用名称空间std;
    int _tmain(int argc,_TCHAR*argv[]
    {
    双x;
    cin>>x;
    双和=1.0,阶乘=1.0,符号=1.0,幂=1.0;
    
    对于(int i=1;i您希望我们先下载资料,以了解您试图解决的问题到底是什么?您真的需要所有Windows-y资料来做家庭作业吗?您能向我们展示您的输出吗?请详细说明