Online Compiler C

// Do NOT use arrays! #include "pt4.h" double re(double p) { double cymma=1; for(double i = p; i != 1; i--) { cymma *= i; } return cymma; } double Exp1(double x,double P) { double cymma = 1, save = x; for(double i =1 ; x/re(i) > P; i++ ) { cymma += x/re(i); x *= x; } x = save; return cymma; } void Solve() { Task("ZFunc40"); double a[6]; double b; GetD(&b); for(int i = 0; i < 6; i++) { GetD(&a[i]); PutD(Exp1(b,a[i])); } }
这段代码试图计算指数函数 e^b 的近似值,用级数求和,并对 6 个精度参数分别输出结果。函数 re 想算阶乘,Exp1 想按精度 P 累加级数项。

- 阶乘函数 re 的循环从 p 递减到 1,但循环条件 i != 1 会在 i 等于 1 时提前停止,导致少乘了因子 1 之外还漏掉了某些情况;同时用 double 做循环计数和阶乘容易溢出,想想阶乘应该从哪个值开始乘、乘到哪个值结束。
- Exp1 里级数项的计算有误:x 在循环中被反复平方,而级数每一项应该是 x 的幂除以对应阶乘,注意区分“当前项的分子”和“x 本身”,并检查循环终止条件 x/re(i) > P 是否真的对应“下一项大于精度”。