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

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;

}
当循环条件判断是红字部分的时候就得不出结果,绿色就可以,请问是哪里的问题。
...全文
669 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!楼主是想求这个级数?但是代码不对
源码下载地址: https://pan.quark.cn/s/a4b39357ea24 【运算单元构造实验报告】运算单元是计算机硬件系统中的关键构成部分,主要承担执行算术运算和逻辑运算的任务。在本次实验中,我们着重探讨了带有累加器的运算单元的设计,涵盖了溢出识别、有符号数值与无符号数值运算的差异性,以及采用补码方式进行的加法与减法运算的实现机制。 一、实验目标 1. 掌握运算单元的基本构造,理解带有累加器的运算单元的具体实现途径。 2. 学习并领会溢出检测的机制,能够设计并构建溢出检测电路,用以判定运算结果是否超出了数据类型的表示范畴。 3. 明辨有符号数值和无符号数值运算的不同特性,把握它们在运算过程中各自的处理方法。 4. 熟练掌握基于补码方式的加法与减法运算的执行,理解补码形式下的溢出判定准则。 5. 熟悉运算单元内部的数据传输路线,明晰数据在运算过程中的流转路径。 6. 设计一个能够支持有符号数值与无符号数值运算、补码加法/减法运算以及有符号数值溢出检测的运算单元电路。 二、实验仪器 采用JZYL—Ⅱ型计算机组成原理实验装置,配备2片74181运算单元芯片作为算术逻辑单元(ALU),2片74LS373用作八位D型锁存器,并辅以一些基础门电路和多路选择器来完成电路设计。 三、实验内容 1. 运用片74181构建一个8位运算单元,负责处理数据的高4位与低4位。 2. 设计并实现溢出检测电路,确保在有符号数值与无符号数值的加法运算中均能准确识别溢出状况。 3. 通过74LS373增加累加器功能,使运算结果得以保存。 4. 将所有设计整合,利用多路选择器来支持有符号数值与无符号数值的加法/减法运算。 四、实验电路 1. 8位运算单元由2片74181构成,通过控制...

65,211

社区成员

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

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