首页 > 编程知识 正文

C语言 计算e及e的次方的近似值,c语言计算e的次方的近似值

时间:2023-05-06 09:14:39 阅读:260447 作者:3223

首先考虑计算e的近似值,使用公式:e=1+1/1!+1/2!+1/3!+……("/"表示除)。

代码如下:

/*计算e的近似值*/#include<stdio.h>main(){ int i,j,a,b=1; float d=1; printf("请输入公式中的n值:"); scanf("%d",&a); for(i=1;i<=a;i++){ for(j=1;j<=i;j++){ b*=j; } d+=1.00/b; b=1; } printf("e值为:%.2fn",d); return 0;}

再考虑计算e^m的近似值,使用公式:e^m=1+m/1!+m^2/2!+m^3/3!+…… 。

代码如下:

#include<math.h>main(){ int i,j,n,m,c=1; float d=1; /*n值即慈祥的小兔子公式中的n值用于确定精确度*/ printf("请输入n值:n"); scanf("%d",&n); /*m值即次方数*/ printf("请输入m值:n"); scanf("%d",&m); for(i=1;i<=n;i++){ for(j=1;j<=i;j++){ c*=j; } d+=pow(m,i)/c; c=1; } printf("e^m的值为%.2f",d);}
对于以上两个简单的程序,注意一下几点:

1、这里都是将数学中的展开式用于程序设计中,像求e的近似值,乍一看可能觉得无从下手,但用数学式子一展开,就很清晰明了;

2、这里两个程序中的整数阶乘值的计算正常应该封装在函数中,增强代码复用性;

3、两个代码中的n值对应两个展开式中的n值,可以调控近似值的精度,n值给的越大,显示近似值时要求的小数位越多,越精确;

4、这里还有一个c语言中的类型转换的问题,像第一个程序中,"d+=1.00/b”一句就很值得玩味。左侧的d肯定设置为float类型,而右侧的1.00若改为1,当然是不行的,两个整数相除将截去计算结果的小数部分,这样最终结果将一直是2.00;而当将1改为1.00后,右侧就变成了一个浮点数除以一个整数,而c编译器只知道怎样计算操作数数据类型相同的表达式,这样这个相除的过程就会存在一个类型提升,即拷贝b的值并将拷贝值提升为float类型后再进行相除,这样得到的结果是正确的浮点数。前述的类型提升也称为隐式转换,还有一种显式转换,像此处,使用"d+=(float) 1/b”结果也是完全正确的;

5、使用4中的理论,第二个代码中的"d+=pow(m,i)/c;"一句看似有点问题,它好像没有进行显式或隐式的类型转换,但结果却是正确的。事实上,pow()函数的返回值是double类型的,因此,这里也是进行了隐式的类型转换。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。