问题:用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便获得π的近似值,项数越多越精确。