关于#c语言#的问题:计算sum=1-1/2+1/4-...+1/n的值(直到1/n<0.000001)

计算sum=1-1/2+1/4-...+1/n的值(直到1/n<0.000001),并显示出来。

题目写错了? 是sum=1-1/2+1/3-1/4-...+1/n吧

img

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
int main()
{
    double sum = 0;
    int n=1;
    while (1)
    {
        double temp = 1.0 / n;
        if (n % 2 == 0) //如果n是偶数 则-  1/n
            temp = temp * -1;
        sum += temp;
        if (fabs(temp) <1e-6)
            break; //精度达到1e-6时 跳出循环
        n++;
    }
    printf("%lf", sum);
}

参考:

#include "stdio.h" 
float math(int i,int n) { 
    float s=0; 
    float k=1; 
    while(i<=n) { 
        s=s+1.0/i*k; k=0-k; i++; 
    } 
    return s; 
} 
void main() { 
    int i=1,n; 
    float m; 
    printf("请输入n的值:\n"); 
    scanf("%d",&n); 
    m=math(i,n); 
    printf("sum=%f\n",m); 
}

你题目的解答代码如下:

#include<stdio.h>
#include<math.h>

int main()
{
    double sum=1,t,x=2;
    int f=-1;
    do
    {
        t = f/x;
        sum += t;
        x+=2;
        f=-f;

    } while (fabs(t)>=0.000001);
    printf("%lf\n",sum);
    return 0;
}

> 如有帮助,请点击我的回答下方的**【采纳该答案】**按钮帮忙采纳下,谢谢!
> ![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/101342676936187.png "#left")
 


#include<stdio.h>
#include<math.h>
int main()
{
double n=1;
float term=1.0,sign=1,sum=0;
while(fabs(1/n)>=1e-6)
{
term=sign*1/n;
sum=sum+term;
sign=-sign;
n++;
}
printf("sum=%f\n",sum);
return 0;
}

题目其实有点问题,1-1/2+1/4-...+1/n这里,分母的规律是2、4、6、8...还是1、2、4、8、16..?目前这些信息无法判断到底是哪种情况。两种情况都给你写了。
(1)2、4、6、8...规律的代码(也就是分母是等差数列的情况):

#include <stdio.h>
int main()
{
    double sum = 1;
    int i=2, flag = -1;
    while (1.0 / i >= 0.000001) // 1/n<0.000001 结束循环
    {
        sum += flag * 1.0 / i;
        i = i + 2; //i从2变成4,4变成6.。。依此类推
        flag = -flag; //改变符号,i=2时时负数,i=4时为正数,依此类推
    }
    printf("%lf", sum);
    return 0;
}

运行结果:

img

(2)1、2、4、8、16....规律的代码(也就是分母是等比数列的情况):
代码如下:

#include <stdio.h>
int main()
{
    double sum = 1;
    int i=2, flag = -1;
    while (1.0 / i >= 0.000001) // 1/n<0.000001 结束循环
    {
        sum += flag * 1.0 / i;
        i = i * 2; //i从2变成4,4变成8.。。依此类推
        flag = -flag; //改变符号,i=2时时负数,i=4时为正数,依此类推
    }
    printf("%lf", sum);
    return 0;
}

运行结果:

img