題目
不言而喻,圓周率很重要。
不僅僅是在數學理論上,即便在千年前的古代,工程上的需求,也迫切需要我們知道圓周率的盡量精確的數值。
求圓周率,有很多種方法,級數法就是簡便易行的方法之一。
很多大牛已經把級數公式寫好,並證明清楚,我們只要按公式求值就好了。
暫舉幾例:
\[\frac{\pi^2}{6} = \frac{1}{1^2} + \frac{1}{2^2} + \frac{1}{3^2} + ... \]
\[\frac{\pi}{4}=\frac{1}{1}-\frac{1}{3}+\frac{1}{5}-\frac{1}{7}+... \]
\[\pi = 3 + \frac{4}{2\times3\times4} -\frac{4}{4\times5\times6}+\frac{4}{6\times7\times8}-... \]
請編程求 \(\pi\) 的值。
分析與提示
對每個公式單獨寫一個程序有點浪費代碼,能不能做一個類似級數框架的東東,把這個方法的共性表達出來呢?
這些算法,無外乎是: 初始值 + 若干的小項,求和,最后再處理一下,得出 \(\pi\) 的值。
示例解法
點擊查看代碼
import math
a1 = 0
def b1(n):
return 1/(n*n)
def c1(x):
return math.sqrt(x*6)
a2 = 0
def b2(n):
return (-1)**(n+1)/(2*n-1)
def c2(x):
return 4*x
a3 = 3
def b3(n):
return (-1)**(n+1)*4/(2*n*(2*n+1)*(2*n+2))
def c3(x):
return x
# a: 初始值
# b: 通項公式(函數)
# c: 后處理(函數)
# n: 累加項數
def f(a,b,c,n):
z = a
for i in range(n):
z += b(i+1)
return c(z)
####
print(f(a1,b1,c1,10000))
print(f(a2,b2,c2,10000))
print(f(a3,b3,c3,100))
需要更多的題目和題解?
其它的題目懶得貼了,自己下載吧:
《2021年新版-編程基礎訓練32題-附提示和答案》
鏈接: https://pan.baidu.com/s/1ZubWEUab1aCxEVWjBaRCDQ
提取碼: aeha
編程是靠實踐的,光看書很難提高啊。。。