请问这个代码哪里有问题?

weixin_39393548 2017-12-06 09:50:10
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
int fac(int n)
{
if(n < 0)
return 0;
if(n == 0 || n == 1)
return 1;
else
return n * fac(n - 1);
}
int main()
{
double x;
double factor = 1;
double numerator = x;
double denominator ;
double item = x, sum = 1;
const double error = 1e-8;
int n = 1;
cin >> x;
for(;abs(item) > error(n <= n0;);n++)
{
sum += item;
item = factor*numerator/fac(n);
factor = pow(-1,n+1);
numerator = pow(x,n);
denominator = fac(n);
cout.precision(10);
cout << left;
}
//cout << sum << endl;

}
当循环条件判断是红字部分的时候就得不出结果,绿色就可以,请问是哪里的问题。
...全文
473 19 点赞 打赏 收藏 举报
写回复
19 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
引用 14 楼 weixin_39393548 的回复:
引用 12 楼 DelphiGuy 的回复:
你那是什么编辑器,我猜是conTEXT
我新手上路 用的是codeblocks 编译器 应该是minGW吧
我是问的老赵#11链接里贴的图,没引用造成了误解。
  • 打赏
  • 举报
回复
引用 8 楼 zhao4zhong1 的回复:
把代码贴图是为了保护版权不让别人轻易复制粘贴吗?
难道你以为是为了炫耀配色吗?
  • 打赏
  • 举报
回复
自信男孩 2017-12-07
//1+x-x^2/2!+x^3/3!-…………(-1)^(n+1)x^n/n!



#include <iostream>
#include <cmath>
//#include <iomanip>

using namespace std;

/*
int fac(int n)
{
    if(n < 0)
        return 0;
    if(n == 0 || n == 1)
        return 1;
    else
        return n * fac(n - 1);
}
int main()
{
    double x;
    double factor = 1;
    double numerator;
    double denominator ;
    double item, sum = 1;
    const double error = 1e-8;
    int n = 1;
    cin >> x;
    numerator = x;
    item = x;

    for(;abs(item) > error;n++)
    {
        sum += item;
        item = factor*numerator/fac(n);
        factor = pow(-1,n+1);
        numerator = pow(x,n);
        denominator = fac(n);
        cout.precision(10);
        cout << left;
    }
    //cout << sum << endl;

}
*/

#define MIN     1e-8

long fac(long n)
{
    if (n == 0 || n == 1)
        return 1;
    else
        return (n * fac(n-1));
}


int main(void)
{
    double sum = 1.0, item;
    int n, x, sign = 1;

    while (cin>>x && x < 0)
        ;

    n = 1;
    item = pow(-1, n+1) * pow(x, n) / fac(n);

    while (fabs(item) >= MIN) {
        sum += item;
        n++;
        item = pow(-1, n+1) * pow(x, n) / fac(n);
        cout.precision(9);
        cout<<fabs(item)<<"\t";
    }

    cout.precision(9);
    cout<<"sum = "<<sum<<endl;

    return 0;
}
参考一下吧~
  • 打赏
  • 举报
回复
赵4老师 2017-12-07
把代码贴图是为了保护版权不让别人轻易复制粘贴吗?
  • 打赏
  • 举报
回复
自信男孩 2017-12-07
引用 3 楼 wodexiaojidan 的回复:
注意用fabs代替abs,abs是对整型数取绝对值,fabs是对double浮点数取绝对值。
  • 打赏
  • 举报
回复
自信男孩 2017-12-07
代码本身就有问题,因此不要纠结一个判断为什么不能输出,先要检测到代码的其他部分的问题; 在使用numerator和item时,这两个数是随机数,没有初始化就在for循环里使用了。但是,楼主可能会说,我上面对这两个变量初始化了,初始化位x了,但是初始化这两个变量时x是什么值呢,也是随机值。因此这两个值也是随机值。
  • 打赏
  • 举报
回复
赵4老师 2017-12-07
  • 打赏
  • 举报
回复
wodexiaojidan 2017-12-07
引用 8 楼 zhao4zhong1 的回复:
把代码贴图是为了保护版权不让别人轻易复制粘贴吗?
[code=c]#include <iostream>
#include <cmath>
#include <iomanip>
#include <cassert>

using namespace std;

int Factorial(int n, int result = 1)
{
   assert(n >= 0);

   if(n == 0 || n == 1){
	   return result;
   } else{
	   return Factorial(n - 1, n * result);
   }
}

int main()
{
	double x, factor, numerator, denominator, item, sum = 0.0;
    const double epsilon = 1e-8;
    int n = 0;
	
    cin >> x;
    do{
		factor = pow(-1, n + 1);
		numerator = pow(x, n);
		denominator = Factorial(n);

		item = factor * numerator / denominator;
		sum += item;

		cout << "item = " << item << endl;
	}while(fabs(item) >= epsilon && ++n);

	cout.precision(10);
	cout << "sum = " << sum << endl;
}
[/code] 。。。
  • 打赏
  • 举报
回复
自信男孩 2017-12-07
引用 15 楼 weixin_39393548 的回复:
[quote=引用 9 楼 cfjtaishan 的回复:]
//1+x-x^2/2!+x^3/3!-…………(-1)^(n+1)x^n/n!



#include <iostream>
#include <cmath>
//#include <iomanip>

using namespace std;

/*
int fac(int n)
{
    if(n < 0)
        return 0;
    if(n == 0 || n == 1)
        return 1;
    else
        return n * fac(n - 1);
}
int main()
{
    double x;
    double factor = 1;
    double numerator;
    double denominator ;
    double item, sum = 1;
    const double error = 1e-8;
    int n = 1;
    cin >> x;
    numerator = x;
    item = x;

    for(;abs(item) > error;n++)
    {
        sum += item;
        item = factor*numerator/fac(n);
        factor = pow(-1,n+1);
        numerator = pow(x,n);
        denominator = fac(n);
        cout.precision(10);
        cout << left;
    }
    //cout << sum << endl;

}
*/

#define MIN     1e-8

long fac(long n)
{
    if (n == 0 || n == 1)
        return 1;
    else
        return (n * fac(n-1));
}


int main(void)
{
    double sum = 1.0, item;
    int n, x, sign = 1;

    while (cin>>x && x < 0)
        ;

    n = 1;
    item = pow(-1, n+1) * pow(x, n) / fac(n);

    while (fabs(item) >= MIN) {
        sum += item;
        n++;
        item = pow(-1, n+1) * pow(x, n) / fac(n);
        cout.precision(9);
        cout<<fabs(item)<<"\t";
    }

    cout.precision(9);
    cout<<"sum = "<<sum<<endl;

    return 0;
}
参考一下吧~
10^-8精度下 x=2出不来结果 无限往下循环 增加到10^-5才可以算出来 这样是我的电脑的问题 还是编译器的问题[/quote] 我测试的是1,2,3都能出结果,但是4可能精度位10^-8太小了,一直处于计算中。
  • 打赏
  • 举报
回复
weixin_39393548 2017-12-07
引用 9 楼 cfjtaishan 的回复:
//1+x-x^2/2!+x^3/3!-…………(-1)^(n+1)x^n/n!



#include <iostream>
#include <cmath>
//#include <iomanip>

using namespace std;

/*
int fac(int n)
{
    if(n < 0)
        return 0;
    if(n == 0 || n == 1)
        return 1;
    else
        return n * fac(n - 1);
}
int main()
{
    double x;
    double factor = 1;
    double numerator;
    double denominator ;
    double item, sum = 1;
    const double error = 1e-8;
    int n = 1;
    cin >> x;
    numerator = x;
    item = x;

    for(;abs(item) > error;n++)
    {
        sum += item;
        item = factor*numerator/fac(n);
        factor = pow(-1,n+1);
        numerator = pow(x,n);
        denominator = fac(n);
        cout.precision(10);
        cout << left;
    }
    //cout << sum << endl;

}
*/

#define MIN     1e-8

long fac(long n)
{
    if (n == 0 || n == 1)
        return 1;
    else
        return (n * fac(n-1));
}


int main(void)
{
    double sum = 1.0, item;
    int n, x, sign = 1;

    while (cin>>x && x < 0)
        ;

    n = 1;
    item = pow(-1, n+1) * pow(x, n) / fac(n);

    while (fabs(item) >= MIN) {
        sum += item;
        n++;
        item = pow(-1, n+1) * pow(x, n) / fac(n);
        cout.precision(9);
        cout<<fabs(item)<<"\t";
    }

    cout.precision(9);
    cout<<"sum = "<<sum<<endl;

    return 0;
}
参考一下吧~
10^-8精度下 x=2出不来结果 无限往下循环 增加到10^-5才可以算出来 这样是我的电脑的问题 还是编译器的问题
  • 打赏
  • 举报
回复
weixin_39393548 2017-12-07
引用 12 楼 DelphiGuy 的回复:
你那是什么编辑器,我猜是conTEXT
我新手上路 用的是codeblocks 编译器 应该是minGW吧
  • 打赏
  • 举报
回复
weixin_39393548 2017-12-07
引用 6 楼 自信男孩的回复:
代码本身就有问题,因此不要纠结一个判断为什么不能输出,先要检测到代码的其他部分的问题; 在使用numerator和item时,这两个数是随机数,没有初始化就在for循环里使用了。但是,楼主可能会说,我上面对这两个变量初始化了,初始化位x了,但是初始化这两个变量时x是什么值呢,也是随机值。因此这两个值也是随机值。
我修改了语句的顺序,然后可以计算了,但是精度不能到10^-8 当x=2的时候精度最多到10^-5,在小就开始无限往下循环,直到崩溃。这是为什么啊
  • 打赏
  • 举报
回复
你那是什么编辑器,我猜是conTEXT
  • 打赏
  • 举报
回复
赵4老师 2017-12-07
引用 10 楼 DelphiGuy 的回复:
[quote=引用 8 楼 zhao4zhong1 的回复:] 把代码贴图是为了保护版权不让别人轻易复制粘贴吗?
难道你以为是为了炫耀配色吗? [/quote] 这才是“炫耀配色”:http://bbs.csdn.net/topics/390467268
  • 打赏
  • 举报
回复
wodexiaojidan 2017-12-06
你可以试下2^n 和 n!的关系 用归纳证明法 我记得高中数学压轴题做过这类
  • 打赏
  • 举报
回复
weixin_39393548 2017-12-06
引用 3 楼 wodexiaojidan的回复:
我想知道为什么我写了当某一项的值大于10^-8的时候就运行不了,然后写当n<=10的时候就可以出结果。谢谢大神了,刚开始学纯小白,问题比较多,不好意思啊。
  • 打赏
  • 举报
回复
wodexiaojidan 2017-12-06
  • 打赏
  • 举报
回复
weixin_39393548 2017-12-06
引用 1 楼 wodexiaojidan的回复:
f(x) = -1 + x - x^2/1 * 2 +...+ (-1)^(2n + 1) * x^n/n!楼主是想求这个级数?但是代码不对
不是这个级数 是1+x-x^2/2!+x^3/3!-…………(-1)^(n+1)x^n/n!。要求把所有绝对值不小于10^(-8)的数都包含在内,而且输出精度为10^-8。
  • 打赏
  • 举报
回复
wodexiaojidan 2017-12-06
f(x) = -1 + x - x^2/1 * 2 +...+ (-1)^(2n + 1) * x^n/n!楼主是想求这个级数?但是代码不对
  • 打赏
  • 举报
回复
相关推荐
发帖
C++ 语言
加入

6.0w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
申请成为版主
帖子事件
创建了帖子
2017-12-06 09:50
社区公告
暂无公告