3条回答 默认 最新
- 亡心灵 2021-12-04 13:29关注
第一个问题
我想了半天终于明白为什么代码中
s
的初值为2而且n
从2计数了,原来是将左边的2分之1乘到右边去了。乘的时候是每一项乘以2,而代码中变成每一个乘数都乘以2了:所以这个2还得是最后再乘。现在
s
初值为1,n
初值为1后,分母就是分子的2倍加1了:// 初值n=1 x = x * n / (2 * n + 1) // 每次n++
第二个问题
最后可能会写出这样的代码:
for (float n = 1; x >= e; n++) { x = x * n / (2 * n + 1); s += x; }
但是题目中有个小细节,当某一项小于给定精度为止。也就是说某一项小于精度后,这一项不加。上面代码里面最后一次判断了
x>=e
,然后进循环,x
到了下一项,但此时x
已经小于精度了,但依然还是加了。所以最终的答案还是不对,因此要改变一下代码的结构:for (float n = 1; x >= e; n++) { s += x; x = x * n / (2 * n + 1); }
每次判断不小于精度后进入循环,马上就加上去,然后
x
再变换。这样一来还得改变一下
s
和x
的初值,我们可以设s=0, x=1
,这样第一次循环就是0+1
,没有问题。第三个问题
题目要求编写函数实现上面的功能,然后输入输出是放在主函数的。也就是说输入和输出之间夹了个函数调用,大概是这个样子:
float func(float e) { float s = 0, x = 1; ... return 2 * s; } int main() { float e; scanf("%f", e); float pi = func(e); printf("%f", e); return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥15 关于用pyqt6的项目开发该怎么把前段后端和业务层分离
- ¥30 线性代数的问题,我真的忘了线代的知识了
- ¥15 有谁能够把华为matebook e 高通骁龙850刷成安卓系统,或者安装安卓系统
- ¥188 需要修改一个工具,懂得汇编的人来。
- ¥15 livecharts wpf piechart 属性
- ¥20 数学建模,尽量用matlab回答,论文格式
- ¥15 昨天挂载了一下u盘,然后拔了
- ¥30 win from 窗口最大最小化,控件放大缩小,闪烁问题
- ¥20 易康econgnition精度验证
- ¥15 msix packaging tool打包问题