方法一:
#include<stdio.h>
#include<conio.h>
#include<math.h>
float fact(int a) //定义一个求阶乘的方法
{
float s = 1;
for (int i = 1; i <= a; i++)
{
s = s * i; //求一个数的阶乘,并返回
}
return s;
}
int main()
{
float x, s = 1, t = 1;
int n, i;
printf("请输入x和n的值:");
scanf("%f %d", &x, &n); //输入展开式中x和n的值
for ( i = 1; i <= n; i++) //求n次循环的值
{
t = pow(x,i) / fact(i);//调用函数
s += t; //求和
}
printf("%f\n", s);
getch(); //使运行框停留
return 0;
}
方法二:
/
//实验4.3 4.5 4.6
//4.3 求出10 ~10000之内能同时被2, 3, 7整除的数并输出
//4.5 根据级数公式前20项求e,缺1(教材错误)
//4.6 根据无穷级数公式求e,e即为自然对数的底
/
#include "stdio.h" //for printf
#include "conio.h" //for getch
#include "math.h"
double Fact(long num); //求整数 num 的阶乘
#define MAX(M, N) ((M) > (N) ? (M) : (N)) //求最大值的最简洁表达
void main()
{
//4.3
int n = 0;
for(int i = 10; i <= 10000; i ++)
{
if( ((i % 2) == 0) && ((i % 3) == 0) && ((i % 7) == 0) )
{
printf("%-7d", i);
n ++;
if((n % 10) == 0)
{
printf("\n");
}
}
}
//4.5
//前20项目 1 + 1/2! + 1/3! + 1/4! + ... + 1/n!
int n1 = 20;
double sum = 0;
for(int j = 1; j <= n1; j ++)
{
double njie = Fact(j);
sum += 1.0 / njie;
}
printf("\n循环%d次, %.10lf", j, sum);
//4.6
//e^x = 1 + x + x2 / 2! + x3 / 3! + ... + x^n/n! + ...
//前后项精度满足 1e-10
double sum1 = 0;
//double x = -3.;
double x = 1.;
double pre = 0;
for(j = 0; ; j ++)
{
double njie = Fact(j);
double cur = pow(x, j) / njie;
sum1 += cur;
if(j > MAX(3, fabs(x)) && fabs(pre - cur) <= 1e-10)
//if(j > 4 && fabs(pre - cur) <= 1e-10) //x = 5 error
//if(j > 3 && fabs(pre - cur) <= 1e-10) //x = 4 error
//if(fabs(pre - cur) <= 1e-10) //error
break;
pre = cur;
}
printf("\n循环%d次, %.10lf", j, sum1);
getch(); //暂停
}
//num >= 13 num! 用long存不下
double Fact(long num)
{
double s = 1.0;
for(int i = 2; i <= num; i ++)
{
s *= i;
}
return s;
}
最后,希望我的分享对你有所帮助,别忘为我点赞哦!愿我们一起努力,奔赴梦想!敬请关注,持续更新!