【已解决】C语言输入实数x和正数eps计算多项式1-x+...

本博文源于C语言基础,一天不敲代码自己知道,代码敲得少,都感觉好生疏。还好一切都捡回来了。刚才同学问我一道C语言题目,我接过来,然后想了一下,觉得写下这个题解。如果大家有需要可以点赞收藏。也可以观望一二。

题目再现

3、 输入实数x和正数eps,计算多项式 1 − x + x 2 2 ! − x 3 3 ! + x 4 4 ! − x 4 4 ! + x 5 5 ! . . . 1-x+\frac{x^2}{2!}-\frac{x^3}{3!}+\frac{x^4}{4!}-\frac{x^4}{4!}+\frac{x^5}{5!}... 1x+2!x23!x3+4!x44!x4+5!x5...的和,直到末项的绝对值小于eps为止。

实验效果

输入1,和0.6
1-1/1+1/2=0.5结果
因此,你输入1和0.5的时候,答案会显示0.5
在这里插入图片描述

实验思想

学会用归纳思想,首先-1在变化,x上面的次数在变化,分母下面的阶乘在变化,然后分析题目最后的终止条件,就是abs(s)<eps就行。它的总结通项是:
( − 1 ) n x n n ! (-1)^n\frac{x^n}{n!} (1)nn!xn
写出这个公式后,利用输入、处理、输出,直接得出结果。

实验效果

#include<stdio.h>
#include<math.h>
//jc是求阶乘用的,比较死板

int jc(int n)
{
    
    
    int res = 1;
    for(int i = 1;i<=n;i++)
        res *= i;
    return res;
}
int main()
{
    
    
    double x;
    scanf("%lf",&x);
    double eps;
    scanf("%lf",&eps);
    int flag = -1;
    double res = 1.0;
    int n = 1;
    while(1)
    {
    
    
        double s = (pow(flag,n))*((pow(x,n))/jc(n));//他是通项,flag就是-1,n就是通项的n,其余查考通项公式

        res = res + s;//最后的累加结果
        if(abs(s)<eps){
    
    //判定结果
            break;
        }

        n++;
        flag = -flag;
    }
    printf("%lf",res);//输出
    return 0;

}

总结

一天不敲代码自己直到,一天不学英语自己知道。一天不学习数学自己知道,一直相信只有不断地看,才会有新发现,无他,唯手熟尔。以前敲代码都是看着教材敲,动脑子也不用动脑子,现在直接给我题目后,我要把它转化为几步,然后逐步实现,最终展现出结果。

猜你喜欢

转载自blog.csdn.net/m0_37149062/article/details/121042913