問題:用C語言編寫程序求1-1/3+1/5-1/7+...spa
示例:code
1 #include <stdio.h> 2 void main(){ 3 int n=1; 4 float sum=0,a=1; 5 while(a<=100){ 6 sum=sum+n/a; 7 n=-n; 8 a=a+2; 9 } 10 printf("%f\n",sum); 11 }
分析:blog
數列的求和問題,每一項正負交替,而且分母遞增2。io
首先,這是一個加法(累加)問題,涉及到被加數,加數,和的概念。每一次加法運算產生的和又做爲新的被加數,而後加上一個新的加數,而且新的加數之間(即每一項之間)具備規律性。這樣不斷重複作加法運算。class
計算離不開記憶,對於人,每一次運算的中間結果都要記住或者記到草稿紙上才能進行下一步計算,而且求出新結果後舊的結果無需再記憶;計算機也是如此,對於計算機來講,數據保存在存儲單元中,在程序中用變量來表示,用來暫存各類數據,包括原始數據,中間結果和最終結果。而且,變量的值能夠改變,當舊的值再也不須要而且產生新值以後,變量便更新爲新值。只從這點來看,草稿紙就毫無優點可言~基礎
對於累加問題,被加數以及和(新的被加數)能夠用同一個變量(sum)來保存,它不斷地被更新。一開始爲0,而後爲各類中間結果,直到最後爲最終結果並輸出。另外,加數也是一個變量,它每次更新爲新的值,而且這種更新是有規律可循的:做爲一個分數,每次分子更新爲相反數,分母則遞增2。分子分母都在變化,所以可分別做爲一個變量。變量
可是,咱們並無用一個真正的變量來表示加數,而是用一個含有變量的表達式n/a,這樣能夠節省一個變量。循環
而後,C代碼要作的除了聲明和初始化變量,就是根據邏輯(規律)更新變量(包括變量的引用和賦值)。而且,正由於變量的更新都是有規律可循的,都是在舊值的基礎上作運算,能夠用一個通用公式來表示,即具備相同的形式,因此能夠採用循環結構來實現(這裏,咱們只循環到分母爲99的項)。引用
小結:float
咱們從變量的角度分析了這個程序。作的事情無非是變量的聲明和初始化(有時變量的輸入取代了初始化),以及變量的屢次引用和更新(首次賦值稱爲初始化,再次賦值即是更新),最終可能還要輸出它,輸出到屏幕或磁盤等。
從形式上來看,變量出如今賦值符(=)的左邊(聲明並初始化時,賦值時),或右邊(引用)。
1 #include <stdio.h> 2 void main(){ 3 /*變量的聲明及初始化*/ 4 int n=1; 5 float sum=0,a=1; 6 /*變量的循環引用及賦值*/ 7 while(a<=100){ 8 sum=sum+n/a; 9 n=-n; 10 a=a+2; 11 } 12 /*變量的輸出*/ 13 printf("%f\n",sum); 14 }
注意:
這裏面有一個坑,就是若是n和a都是整型變量的話,n/a也會是整型,而不是浮點型,結果就會有錯誤。所以,咱們將a聲明爲浮點型。
拓展:
比較有意思的是,利用這個數列(無窮級數)能夠求得圓周率。即將其乘以4便獲得π的近似值,項數越多越精確。