c 语言用 while 循环 编写程序,输入正整数n,求s=1-2!/3+3!/5+....+(-1)^(n+1)n!/(2n_1)
时间: 2023-06-26 18:06:54 浏览: 94
java代码-例子3-15 求n!+(n-1)!+(n-2)!+...+1!, 其中 n=10
以下是使用 while 循环实现的 C 语言程序:
```c
#include <stdio.h>
int main() {
int n, i = 1, j = 2, sign = 1;
long long s = 0, fact = 1;
printf("请输入一个正整数n:");
scanf("%d", &n);
while (i <= n) {
fact *= i;
if (i % 2 == 1) {
s += sign * fact / j;
sign = -sign; // 每次改变符号
}
i++;
j += 2;
}
printf("s = %lld\n", s);
return 0;
}
```
程序中使用了三个变量:i、j 和 sign。
变量 i 从 1 开始递增,表示当前计算的阶乘数,最大值为 n。
变量 j 初始值为 2,每次递增 2,表示当前计算的分母,分母是奇数,因为分母需要满足 2n+1 的形式。
变量 sign 初始值为 1,表示当前计算的项的符号。每次计算完一项后,sign 取相反数,以便计算下一项时改变符号。
在循环体中,先计算当前阶乘数 i 的阶乘,然后根据奇偶性决定是否加入到 s 中。如果 i 是奇数,则加上 sign * fact / j;否则不加。最后 i 递增 1,j 递增 2,以便计算下一项。
最后输出 s 的值。
需要注意的是,当 n 很大时,阶乘的值会很大,可能会超出 long long 类型的范围,导致程序计算错误。因此,实际应用中需要使用高精度计算或其他方法避免这种情况的出现。
阅读全文