大一新生,求帮找错,哭了

img

img


答案一直是很大的一个值,能不能帮我找错,谢谢各位,真的不会c语言

第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 防止除号取整。

img


#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;    
}