c语言??? 40

哪里错了??... 哪里错了?? 展开
 我来答
DavidCai0316
2020-03-25 · TA获得超过974个赞
知道小有建树答主
回答量:311
采纳率:85%
帮助的人:107万
展开全部

说明:

  1. int sign = 1.0;,sign是整型,初始化为 1.0,其结果还是为 1。

  2. 2×i 不能写成 2i,这是数学的写法,C语言必须加上一个乘号,例如 2 * i。

  3. 输出结果要以题目的要求来完成,不能在输出结果加上多于的字符,例如结果是 0.917,那么就不能输出 sum=0.917。

  4. 保留三位小数的写法是 printf("%.3f", sum);。

分析:

  1. 求前 n 项之和,先分析序列:1 - 2/3 + 3/5 - 4/7 + 5/9 - 6/11 +...

  2. 序列中第一个数字 1 可以看成是 1/1,分子每次递增 1,分母每次递增 2。

  3. 分子与分母的关系:分子×2-1等于分母,例如 2/3,分子2×2-1=3。

  4. 分子每次递增为 1,刚好可以作为循环求出前 N 项之和。

  5. 当分子是偶数时,要减;当分子是奇数时,要加。

求解过程:

  1. 变量 sum 初始为 1,因为 第一项的值就是 1,这样可以减少一次循环,从第 2 项开始计算即可。

  2. 声明变量,输入 n 的值。

  3. 循环中从第 2 项开始,到第 n 项结束。

  4. 如果 i % 2 为真时表示 i 的值为奇数,则应该加。

  5. 否则 i 为偶数,则应该减。

  6. 输出求和变量 sum,并保留 3 位小数。

其他说明:

  1. 关于 (2.0 * i - 1),不能写成 (2 * i - 1),因为 i 和 1 都是 int 类型,而 sum 是double 类型,可以自行测试。

  2. 对于求分母的值,也可以用其他方法,例如:for (int i = 2, j = 3; i <= n; i++, j += 2)。

  3. 当然求解这题的方法肯定不止这一种,这里仅提供一种思路。下面是代码:

测试结果

测试代码:

#include<stdio.h>

int main()

{

     double sum = 1;

     int n;

     scanf("%d", &n);

     for (int i = 2; i <= n; i++)

         if (i % 2) sum += i / (2.0 * i - 1);

         else sum -= i / (2.0 * i - 1);

     printf("%.3f", sum);

     return 0;

}

一变班爱麻啊堡0J
高粉答主

2020-07-03 · 醉心答题,欢迎关注
知道答主
回答量:11.4万
采纳率:2%
帮助的人:5710万
展开全部
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
shine1991
科技发烧友

2020-03-25 · 智能家居/数码/手机/智能家电产品都懂点
知道顶级答主
回答量:4.7万
采纳率:82%
帮助的人:2.3亿
展开全部
sum+=sign*i/(2.0*i-1)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式