说明:
int sign = 1.0;,sign是整型,初始化为 1.0,其结果还是为 1。
2×i 不能写成 2i,这是数学的写法,C语言必须加上一个乘号,例如 2 * i。
输出结果要以题目的要求来完成,不能在输出结果加上多于的字符,例如结果是 0.917,那么就不能输出 sum=0.917。
保留三位小数的写法是 printf("%.3f", sum);。
分析:
求前 n 项之和,先分析序列:1 - 2/3 + 3/5 - 4/7 + 5/9 - 6/11 +...
序列中第一个数字 1 可以看成是 1/1,分子每次递增 1,分母每次递增 2。
分子与分母的关系:分子×2-1等于分母,例如 2/3,分子2×2-1=3。
分子每次递增为 1,刚好可以作为循环求出前 N 项之和。
当分子是偶数时,要减;当分子是奇数时,要加。
求解过程:
变量 sum 初始为 1,因为 第一项的值就是 1,这样可以减少一次循环,从第 2 项开始计算即可。
声明变量,输入 n 的值。
循环中从第 2 项开始,到第 n 项结束。
如果 i % 2 为真时表示 i 的值为奇数,则应该加。
否则 i 为偶数,则应该减。
输出求和变量 sum,并保留 3 位小数。
其他说明:
关于 (2.0 * i - 1),不能写成 (2 * i - 1),因为 i 和 1 都是 int 类型,而 sum 是double 类型,可以自行测试。
对于求分母的值,也可以用其他方法,例如:for (int i = 2, j = 3; i <= n; i++, j += 2)。
当然求解这题的方法肯定不止这一种,这里仅提供一种思路。下面是代码:
测试代码:
#include<stdio.h>
int main()
{
double sum = 1;
int n;
scanf("%d", &n);
for (int i = 2; i <= n; i++)
if (i % 2) sum += i / (2.0 * i - 1);
else sum -= i / (2.0 * i - 1);
printf("%.3f", sum);
return 0;
}