C语言程序设计——求某个数列前20项和

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。所以这串代码就是表示的这个意思。

总结:这三个循环都是无条件等价的,在一定情况下可以互换,不存在高低先后之分。

  • 10
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值