第6行printf改成scanf试下(>_<)
先找到数学上的通项公式 a = i/(2i-1)
再转换到代码上,注意循环检索从0开始:term = (i+1)/(2i+1)
写法不唯一,也可以是 term = a/(2a-1)
找准规律就行,可以多加点临时变量这样更容易发现。最后把每个变量和i挂钩,比如分子关系式 a = i+1。
最后根据奇偶位置加符号。
#include <stdio.h>
int main() {
int a; // 分子
int i;
int N; // 项数
double sum = 0.0;
double term; // 通项
scanf("%d", &N);
for (i = 0; i < N; i++) {
a = i + 1;
term = a * 1.0 / (2 * a - 1); // 关系式
if (i % 2 == 1)
term = -1 * term;
sum += term;
}
printf("%.3f\n", sum);
return 0;
}
这类题目本质还是数学,没有用到多少代码方面的技术。
一个知识点,
*1.0
防止除号取整。
#include<stdio.h>
int main(int argc, char *argv[])
{
int n=0;
double sum=0.0;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
i%2==0 ?
sum-=i/(2.0*i-1):sum+=i/(2.0*i-1);
}
printf("%.3lf\n",sum);
return 0;
}