C语言循环产生的数值在下一次循环累加如何解决?

问题描述:

原题是这样的:

img

我的代码是这样的:

#include <stdio.h>

int main(void)
{
    int xiangshu = 0;
    double sum1 = 0.0;
    double sum2 = 0.0;
    double half1 = 0.0;
    double half2 =0.0;
    printf("输入指定的项数:");    
    scanf("%d", &xiangshu);
    while(xiangshu>0)
    {
    for (int i = 0; i<xiangshu; i++)
    {    
        sum1 = sum1 + 1.0/(1.0+1.0*i);
            
    }
    
    for(int x =0;x<xiangshu;x = x+2)
    {
        
        
        half1= half1 + 1.0/(1.0+1.0*x);
    }
    for(int y = 1; y<xiangshu; y = y+2)
    {
        
        half2 = half2 - 1.0/(1.0 + 1.0*y);
    }
    sum2 = half1 + half2;
    printf("the %d item result of the first sequence was %lf\n", xiangshu, sum1);
    printf("the %d item result of the second sequence was %lf\n", xiangshu, sum2);
    printf("Please anthor input the item you want to check:");
    scanf("%d", &xiangshu);  
    }
    printf("End \n");    
    return 0;    
}

但是产生的值确实累加的:
img

我不知道这个问题在哪,因为这个章节理论上还没有用到判断语句,所以要用循环写,求解这个为什么两次的值为什么加到一起了,同时问如何解决该问题!?

在第13行和第14行之间加入如下内容:
sum1=0;
sum2=0;
half1=0;
half2=0;

你在while循环内开始时要将sum1,sum2,half1,half2等累加值都设置为0,不然每次循环都会在上次基础上累加的,每次循环要清零

while下面加一句

sum1 = sum2 = half1 = half2 = 0;

改了下,你参考哈

int main(void)
{
    int xiangshu;
    double sum1, sum2, half1, half2;//2个half可以不要
    int x = 1; //控制项前的+-号
    double list;//每一项的商

    printf("输入指定的项数:");
    scanf("%d", &xiangshu);
    while (xiangshu > 0)
    {

        sum1 = sum2 = list = 0;//每次计算前初始化一下

        for (int i = 1; i <= xiangshu; i++)
        {
            list = 1.0 / i;
            sum1 = sum1 + list;
            sum2 = sum2 + (list * x);
            x = x * -1;
        }

        /*
        for (int x = 0; x < xiangshu; x = x + 2)
        {

            half1 = half1 + 1.0 / (1.0 + 1.0 * x);
        }
        for (int y = 1; y < xiangshu; y = y + 2)
        {
            half2 = half2 - 1.0 / (1.0 + 1.0 * y);
        }

        sum2 = half1 + half2;
        //*/

        printf("the %d item result of the first sequence was %lf\n", xiangshu, sum1);
        printf("the %d item result of the second sequence was %lf\n", xiangshu, sum2);
        printf("Please anthor input the item you want to check:");
        scanf("%d", &xiangshu);
    }

    printf("End \n");

    return 0;
}