输出n阶分式阶乘之和
1.0 题目
用户输入一个数字时,会输出累加项1+1/n!的值,即sum=1+1/1!+1/2!+…+1/n!;并将小数精度保持为12位。
2.0 示例
实例 1: 输入:n=1; 输出:2.000000000000; 解释:sum=1+1/1!=2.000000000000;
实例 2: 输入:n=3; 输出:2.7; 解释:sum=1+1/2!+1/3!=2.7;
3.0 题目分析
- 对于求阶乘需要我们用一个循环来输出,而累加又需要一个循环,则这个程序需要用嵌套循环来输出,可以用for循环实现。
- 对于累加需要一个变量来存放值,对于阶乘也需要一个变量来存放值,所以需要定义两个变量来存放不同数值。
- 对于题目要求小数精度要求十二位,我们可以将sum定义为double型,而且输出结果时,输出为%.12f,即可。
- 对于阶乘的运算,可以在循环中令每个数相乘并输出相乘的结果。
4.0 程序
#include<stdio.h> int main() {
int i,j,n; double sum=1; printf("请输入n:\n"); scanf("%d",&n); for(i=1;i<=n;i++){
double fac=1; for(j=1;j<=i;j++){
fac=fac*j; } sum = sum+1/fac; } printf("当n为%d时,结果:sum=%.12f\n",n,sum); }
- 程序运行如下
5.0 程序详解
- 对于定义变量,我们可以将i,j设为int型变量,而对于sum和定义的阶乘结果,我们定义为double型,而且sum开头为1+1/!,故初始值赋值为1,因为输出的为小数形式,故sum需要定义为double型,而其实fac也可以定义为int型,下面会讲解,先不解释。
- 对于第一个for循环for(i=1;i<=n;i++)就很容易理解,因为我们需要输出等于n时的值,故需要小于等于n。而for下面的double fac=1;之所以不在循环外定义是因为我们每次在i循环一次之后进行j循环都需要令fac=1,这样才能使阶乘从1到n依次相乘。
- 对于for(j=1;j<=i;j++),小于等于i是因为i进行累加,每个阶乘只需要等于它累加的那一项n大小。而fac=fac*j;是为了将fac从1乘到i的值。
- sum = sum+1/fac;对于每次j循环执行完之后得到1/j!然后加到sum中,一直加到1/n!。而上面说之所以能将fac定义为int型,是可以将1/fac写成1.0/fac的形式,1.0/fac会将fac直接转换成double形式,这样得到的结果也跟原式一样,所以用这两种方式都一样。
6.0 问题
在小编写程序时遇到一个问题,就是当把fac定义在循环外部时,但是在j循环中将fac==1,强制将fac赋值为1,但是发现没有用,还是跟没有强制赋值一样,代码如下:
#include<stdio.h> int main() {
int i,j,n; double sum=1; printf("请输入n\n"); scanf("%d",&n); double fac=1; for(i=1;i<=n;i++){
for(j=1;j<=i;j++){
fac==1; fac=fac*j; } sum = sum+1.0/fac; } printf("当n为%d时,结果:sum=%.12f\n",n,sum); }
其中程序运行图为
很明显结果与上面结果不一样,结果小了一些。然后输出fac,i,j每次变量之后会发现:
发现本来标的2中应该fac应该跟1一样在j开始新一次都为1,但是却为2.很明显是上面循环的fac为2没有清除掉。但是一直没有找到原因,希望有大佬能帮忙解惑一下。代码如下:
#include<stdio.h> int main() {
int i,j,n; double sum=1; printf("请输入n\n"); scanf("%d",&n); double fac=1; for(i=1;i<=n;i++){
//double fac=1; for(j=1;j<=i;j++){
fac==1; fac=fac*j; printf("i=%d\n",i); printf("j=%d\n",j); printf("fac=%f\n",fac); } sum = sum+1.0/fac; } printf("当n为%d时,结果:sum=%.12f\n",n,sum); }
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/148066.html