第9周项目2分数的累加

问题及代码:

———————————————————————————————————while语句—————————————————————————————————————

/* 
*Copyright (c)2014,烟台大学计算机与控制工程学院 
*All rights reserved. 
*文件名称:sum.cpp 
*作    者:单昕昕 
*完成日期:2014年10月23日 
*版 本 号:v1.0 
*
*问题描述:计算并输出1/3-3/5+5/7-7/9……+19/21的结果。 
*程序输出:一个数,代表1/3-3/5+5/7-7/9……+19/21的结果。
*/ 
#include <iostream>

using namespace std;

int main()
{
    double i=1,j=3,s=1,sum=0;
    while(i<=19)
    {
        sum=s*i/j+sum;
        i+=2;
        j+=2;
        s*=-1;
    }
    cout << "1/3-3/5+5/7-7/9……+19/21="<<sum<< endl;
    return 0;
}


————————————————————————————do-while语句——————————————————————————————————————————

/* 
*Copyright (c)2014,烟台大学计算机与控制工程学院 
*All rights reserved. 
*文件名称:sum.cpp 
*作    者:单昕昕 
*完成日期:2014年10月23日 
*版 本 号:v1.0 
*
*问题描述:计算并输出1/3-3/5+5/7-7/9……+19/21的结果。 
*程序输出:一个数,代表1/3-3/5+5/7-7/9……+19/21的结果。
*/ 
#include <iostream>

using namespace std;

int main()
{
    double i=1,j=3,s=1,sum=0;
    do
    {
        sum=s*i/j+sum;
        i+=2;
        j+=2;
        s*=-1;
    }
    while(i<=19);
    cout << "1/3-3/5+5/7-7/9……+19/21="<<sum<< endl;
    return 0;
}


 

————————————————————————————————————for语句—————————————————————————————————————

/* 
*Copyright (c)2014,烟台大学计算机与控制工程学院 
*All rights reserved. 
*文件名称:sum.cpp 
*作    者:单昕昕 
*完成日期:2014年10月23日 
*版 本 号:v1.0 
*
*问题描述:计算并输出1/3-3/5+5/7-7/9……+19/21的结果。 
*程序输出:一个数,代表1/3-3/5+5/7-7/9……+19/21的结果。
*/ 
#include <iostream>

using namespace std;

int main()
{
    double i=1,j=3,s=1,sum=0;
    for(i=1,j=3,s=1,sum=0;i<=19;i+=2,j+=2,s*=-1)
    sum=s*i/j+sum;
    cout << "1/3-3/5+5/7-7/9……+19/21="<<sum<< endl;
    return 0;
}


 

运行结果:

 

知识点总结:

三种循环语句的基本使用。

 

学习心得:

学会了巧妙的处理一正一负的情况。还可以使用pow(-1,i)处理这种情况。

<think>好的,我现在需要帮助用户用Python的for循环和Leibniz级数公式来计算π的近似值,而且不能使用函数。首先,我得回忆一下Leibniz公式的具体形式。Leibniz级数是这样的:π/4 = 1 - 1/3 + 1/5 - 1/7 + 1/9 - ...。所以,计算的时候需要不断交替加减分数项,分母每次增加2。 用户希望用for循环实现,不借助函数,这意味着代码应该直接在脚本里写循环,而不是封装成函数。那首先,我需要确定迭代的次数。通常,迭代次数越多,结果越精确。但用户没有指定次数,所以我需要设定一个变量,比如n_terms,让用户自己调整。 接下来,初始化变量。总和sum初始化为0.0,符号sign初始化为1,因为第一项是正的。然后循环中每次加上sign/(2*i +1),之后符号取反。循环结束后,总和乘以4得到π的近似值。 需要注意的是,Python中的整数除法可能会导致问题,所以分母应该转换为浮点数,或者在计算时使用1.0。不过,如果sign是整数,除以整数可能会得到0,所以应该确保分子或分母是浮点数。比如,用sign * 1.0 / denominator。 然后,我应该测试一下这个代码是否正确。例如,当迭代次数为0时,结果应该是0?或者初始项是否正确。当n_terms=1时,sum是1,乘以4得到4,但随着迭代次数增加,应该接近3.14159...。 另外,用户可能希望看到中间结果的变化,或者调整迭代次数来观察精度变化。所以代码需要允许修改n_terms的值,比如设为100000次迭代,可能得到一个较好的近似值。 最后,生成相关问题的时候,需要考虑Leibniz级数的收敛速度、误差估计、与其他方法的比较,以及可能的优化方法,比如使用向量化计算或者其他加速技巧,不过用户要求用for循环,所以优化可能涉及数学上的调整,比如增加项数或者改变公式结构。 可能的错误点:符号交替的处理是否正确,分母是否是奇数,以及是否在每次循环中正确更新符号。需要确保循环变量i从0到n_terms-1,或者从1到n_terms,这会影响分母的计算。比如,如果i从0开始,那么分母是2*i +1,这样第一项是1/1。如果i从1开始,可能需要调整分母的计算方式。 综上,代码的大致结构应该是: 初始化sum、sign和n_terms 循环n_terms次: sum += sign / (2*i +1) sign *= -1 最后sum乘以4得到pi的近似值。 然后测试几个例子,比如n_terms=1000,看看结果是否合理。可能还需要提醒用户,Leibniz级数收敛较慢,需要大量项才能得到高精度的π值。</think>好的,我将按照要求分步骤解释如何用Python的for循环通过Leibniz级数公式计算π的近似值,并确保代码不使用函数。 --- ### Leibniz级数公式 Leibniz公式为: $$ \frac{\pi}{4} = 1 - \frac{1}{3} + \frac{1}{5} - \frac{1}{7} + \frac{1}{9} - \cdots $$ 公式通过交替加减奇数的倒数逼近π/4的值,最终结果需乘以4[^1]。 --- ### 实现步骤 1. **初始化变量** - `sum`:累加器,初始为0.0以保留小数精度 - `sign`:符号位,初始为1(第一项为正) - `n_terms`:迭代次数,值越大结果越精确 2. **循环累加项** 每次循环计算当前项的值并更新符号: - 分母为奇数:`2*i + 1` - 符号在每次迭代后取反 3. **计算π值** 循环结束后,总和乘以4得到π的近似值。 --- ### 完整代码 ```python n_terms = 100000 # 迭代次数,数值越大精度越高 sum_pi = 0.0 sign = 1 for i in range(n_terms): term = sign / (2 * i + 1) sum_pi += term sign *= -1 # 符号交替 approx_pi = sum_pi * 4 print("π的近似值为:", approx_pi) ``` --- ### 关键点说明 - **精度控制**:若`n_terms=100000`,结果约为$3.1415826536$(与真实值$3.1415926535$误差约$1e-5$)[^2] - **收敛速度**:Leibniz级数收敛较慢,约需$10^6$次迭代达到5位小数精度 - **优化方向**:可通过增加迭代次数或使用加速收敛方法(如**Richardson外推法**)改进精度 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值