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

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;

}
当循环条件判断是红字部分的时候就得不出结果,绿色就可以,请问是哪里的问题。
...全文
588 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 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!楼主是想求这个级数?但是代码不对
【为什么要学习这门课程】深度学习框架如TensorFlow和Pytorch掩盖了深度学习底层实现方法,那能否能用Python代码从零实现来学习深度学习原理呢?本课程就为大家提供了这个可能,有助于深刻理解深度学习原理。左手原理、右手代码,双管齐下!本课程详细讲解深度学习原理并进行Python代码实现深度学习网络。课程内容涵盖感知机、多层感知机、卷积神经网络、循环神经网络,并使用Python 3及Numpy、Matplotlib从零实现上述神经网络。本课程还讲述了神经网络的训练方法与实践技巧,且开展了代码实践演示。课程对于核心内容讲解深入细致,如基于计算图理解反向传播算法,并用数学公式推导反向传播算法;另外还讲述了卷积加速方法im2col。【课程收获】本课程力求使学员通过深度学习原理、算法公式及Python代码的对照学习,摆脱框架而掌握深度学习底层实现原理与方法。本课程将给学员分享深度学习的Python实现代码。课程代码通过Jupyter Notebook演示,可在Windows、ubuntu等系统上运行,且不需GPU支持。【优惠说明】 课程正在优惠中!  备注:购课后可加入白勇老师课程学习交流QQ群:957519975【相关课程】学习本课程的前提是会使用Python语言以及Numpy和Matplotlib库。相关课程链接如下:《Python编程的术与道:Python语言入门》https://edu.csdn.net/course/detail/27845《玩转Numpy计算库》https://edu.csdn.net/lecturer/board/28656《玩转Matplotlib数据绘图库》https://edu.csdn.net/lecturer/board/28720【课程内容导图及特色】

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧