C语言程序设计(第五版)——谭浩强 P137页
10题:一个分数列:2/1,3/2,5/3,8/5,13/8,21/13…,求出这个数列的前20项之和
方法1(用while语句)
#include<stdlib.h>
#include<stdio.h>
int main()
{
int i;
double a=2,b=1,s=0;//a为初值分子,b为初值分母,s为该数列的和
i=1;
while(i<=20)//共20项
{
s+=a/b;//相当于s=s+a/b;如果a、b不定义为浮点型,那么s的结果会一直为零(重点)
a=a+b;
b=a-b;
i=i++;
}
printf("%f\n",s);//不要忘记打印的类型为浮点型
system ("pause");
return 0;
}
方法2(用do…while语句)
#include<stdlib.h>
#include<stdio.h>
int main()
{
int i;
double a=2,b=1,s=0;
i=1;
do
{
s+=a/b;
a=a+b;
b=a-b;
i=i++;
}
while(i<=20);//不要忘记打分号
printf("%f\n",s);
system ("pause");
return 0;
}
方法1和方法2总结:许多小白在看到b=a-b;的时候都会不知道是什么意思,一直纠结。
在这里我写了一个更通俗易懂的代码:
#include<stdlib.h>
#include<stdio.h>
int main()
{
int i;
double a=2,b=1,s=0,t;//多定义一个浮点型变量t
i=1;
while(i<=20)
{
s+=a/b;
t=a;//将a的值赋给t
a=a+b;
b=t;//再将t的值赋值给b
i=i++;
}
printf("%f\n",s);
system ("pause");
return 0;
}
如果还是不懂可以看看我的解释:
前两个代码中b=a-b;的原因是b想要的值仅仅是a=a+b;这串代码中a的值。也就是说将a的值赋值给b,即b=a。又因为a=a+b;这串代码在a赋值给b之前,如果写b=a;表达的是将a+b的值赋值给b了。
第三个代码就很好的诠释了我的意思。多拿出一个变量t,将a的值赋给t,再将t的值赋给b,即b=a。
如果还是不懂可以私聊我,我会为你解答。
方法3(用for语句)
#include<stdlib.h>
#include<stdio.h>
int main()
{
int i;
double s=0,a=2;
for(i=1;i<=20;i++)
{
s+=a;
a=1+1/a;
}
printf("%f\n",s);
system ("pause");
return 0;
}
方法3用到的a=1+1/a;这串代码许多初学者页也可能看不懂,其实这串代码是根据数学公式递推出来的。可以去看看原题中第一个数字和第二个数字的关系,就可以得出3/2=1+1/2。所以这串代码就是表示的这个意思。文章来源:https://www.toymoban.com/news/detail-759568.html
总结:这三个循环都是无条件等价的,在一定情况下可以互换,不存在高低先后之分。文章来源地址https://www.toymoban.com/news/detail-759568.html
到了这里,关于C语言程序设计——求某个数列前20项和的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!