c语言求助,我这个运行出来不对,请帮我改一下,题目如图,拜托,谢谢

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

int main(int argc, char *argv[])
{
int n, k, sum,sign,item;

//输入上限n
n = 0; //防止乱输入
printf( "请输入n(正整数):" );
scanf( "%d", &n );

//循环求的和
k = 1; //k从1开始
sum = 0; //开始时和为0
while( k <= n ) {
sum += 1+pow(-1,k+1); //把k的值加到sum中
item=1/k;
if(item<0.001)break;

//输出计算结果
printf( "前%d项数列的和=%.6f\n", n, sum );
k++; //k自加1
}
return 0;
}

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

int main(int argc, char *argv[])

float k,sum,sign,item;//int是整数,后面都按整数运算了,得不到0.几的数据 
//要求中没有让输入的,是排列到item<0.001,不是输入多少,排列多少个,所以不需要输入n 
k = 1; 
sum = 0; 
item=1/k;
while( item>=0.001) {
sum += pow(-1,k+1)/k; //这个公式写的不对,不是光多个±1相加,还得除以k呢 
printf( "前%d项数列的和=%.6f\n", (int)k, sum );//输出的是k和sum,不是n和sum
k++; 
item=1/(float)k;//注意和k++的顺序,k++在后面,会多算一次。 
}
return 0;
}

如图所示,最后结果差一点点,是电脑自身精度的问题,可以忽略。望采纳。。。。。。

追问

谢谢(*°∀°)=3

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-10-24
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(){
    int n,k=1;
    float sum=0.0,item,sign=1.0;
    scanf("%d",&n);
    while(k<=n){
        item=(float)1/k;//必须强制类型转换
        if(item<0.001) break;
        sum+=sign*item;
        sign=(-1)*sign;
        printf("前%d项数列的和=%.6f\n",k,sum);
        k++;
    }
    return 0;
}

第2个回答  2018-10-24
sum += 1+pow(-1,k+1);你看你这是不是丢了什么东西,参照一下,有1,有正负号,但是1/k跑哪里去了
相似回答