1-1/2+1/3+1/4-1/5+1/6+1/7+1/8-1/9……1/n 用C语言写出代码

1-1/2+1/3+1/4-1/5+1/6+1/7+1/8-1/9……1/n 用C语言写出代码 求大神指教

#include <stdio.h>

int main()
{
int n;
int x = 1;
double i;
double sum = 0.0;
printf("请输入 n: ");
scanf("%d", &n); //输入n
for(i = 1; i <= n; i++)
{
sum = sum + (x)*1/i;
x = x*(-1); //用来控制表达式的正负
}
printf("%f\n", sum);
return 0;
}追问

这个不是吧 这个不是1-1/2+1/3—1/4……

这是书上的答案 我觉得不对

追答

sorry 我看错了。你书上的确实不对。我改了下。

#include

int main()
{
int n;
int step = 2;
int develop = 3;
double i;
double sum = 0.0;
printf("请输入 n: ");
scanf("%d", &n); //输入n
for(i = 1; i <= n; i++)
{
if((int)i%step == 0) //能被step整除时第i项就为负数
{
sum = sum + (-(1/i));
step = step + develop;
develop++;
continue;
}
sum = sum + 1/i;
}
printf("%f\n", sum);
return 0;
}

追问

不好意思哈 太感谢你了~~~可是已经采纳了 只能感谢了

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-10-21
找出加减号的规律即可追问

~~这个知道 想知道怎么用循环结构表示~

追答

OK,只要你找到了规律那就容易了, 先把他们全部看做加法运算,带减号的就相当于乘以-1, 假如规律是第1.3.5.7.....个数前面是减号,只需要给他们乘以-1即可

追问

不是的 是2 5 9 依次加2加3加4......我用C语言写不出来

追答

比如for(int i=0;i<n;i++)
{ if(i%2!=0)

i=i*(-1);

sum+=i;

追问

恩纳 这道题呢

追答

OK,明白

你可以发现他们之间的差值是2.3.4.5.....利用这个就可以方便的找到哪一项应该乘以-1.

追问

可是 我觉得我用for while 我写不出来 老师也说不会 就不用想了

追答

可以写出来,你要相信自己,我给你提示,也就是你现在的任务只要确保第2.3.5.9....项可以乘以-1即可

追问

…~~我都不信了 因为我都想两天了 C语言都开始学数组了~~

追答

额,好吧,这样吧,你先学习新知识,这个先不要想了,有时间了你再问我我给你再提示,这个还是你自己动手写出来比较好

本回答被提问者采纳
第2个回答  2014-10-21
相邻减号间距递增,速度为1追问

~~这个知道 想知道怎么用循环结构表示~

相似回答