C语言编程:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。

题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。#include<stdio.h>main(){inti,x,y... 题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
#include<stdio.h>
main()
{ int i,x,y,a;
float sum=0;
x=2;
y=1;
for(i=1;i<20;i++)
{
sum+=(float)(x)/y;
// printf("%d/%d\n",x,y);
a=x;
x=x+y;
y=a;
}
printf("%7.5f\n",sum);
}
答案已经做出,希望有人能帮我用文字表达出简单的思考过程,并最好能帮我做一副流程图~急用!谢谢谢谢
展开
 我来答
小星星教育知识分享
高粉答主

2019-12-05 · 用教师的智慧点燃学生的智慧火花
小星星教育知识分享
采纳数:202 获赞数:67136

向TA提问 私信TA
展开全部

public class Demo11 {

public static void main(String[] args) {

double sum=2/1;

double m=2;//定义分子

double n=1;//定义分母

for(int i=2;i<=20;i++){

m=m+n;

n=m-n;

sum+=(double) m/n;  //将分子的类型强制转换成double,否则两个int相除,结果还是int会将小数点后都舍弃。

}

System.out.println(sum);

}

}

//用数组方法来实现

public class Demo2 {

public static void main(String[] args) {

double numerator[]=new double[20];      //创建分子长度为20的浮点型数组

double denominator[]=new double[20];    //创建分母长度为20的浮点型数组

numerator[0]=2;

denominator[0]=1;

double sum=numerator[0]/denominator[0];

for(int i=0;i<19;i++){

numerator[i+1]=numerator[i]+denominator[i];

denominator[i+1]=numerator[i];

sum+=(double)numerator[i+1]/denominator[i+1];

}

System.out.println(sum);

}

}

扩展资料

Java数列求和:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。

public class QiuHe {

 public static void main(String[] args){

float total=0;

for(int i=0;i<20;i++){

float top= getTop(i+1);

float bottom=getBottom(i+1);

total+=top/bottom;//每一项的值

}

System.out.println(total);

}

//获取分子核心递归方法

public static float getTop(int position){

 if(position==1){

return (float)2;

}

 if(position==2){

return (float) 3;

}

 return getTop(position-1)+getTop(position-2);

}

 //获取分母核心递归方法

public static float getBottom(int position){ 

if(position==1){

return (float) 1;

}

if(position==2){

return (float)2;

}

return getBottom(position-1)+getBottom(position-2);

}

}

liuxinling_06
推荐于2017-11-25 · TA获得超过1289个赞
知道小有建树答主
回答量:345
采纳率:100%
帮助的人:424万
展开全部
1.首先弄清楚这组分数序列的规律:
从第二个数开始
分子=前一个数的分子+分母
分母=前一个数的分子

2.需求是前20项之和,因此循环20-1次相加是必然的.
3.第一个数初始化为x=2,y=1
4.从第二个数开始:
分子x=x+y
分母y=x
由于x的值发生变化,因此中间用变量a复制一下.
5.重复上面的操作,直到循环结束.
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Passerby_路人
2008-01-07 · TA获得超过142个赞
知道答主
回答量:18
采纳率:0%
帮助的人:0
展开全部
观察分数序列,发现分子是2,3,5... 分母是,2,3,5...实际上都是斐波那契数列的一部份.
斐波那契数列指的是这样一个数列:1,1,2,3,5,8,13,21……这个数列从第三项开始,每一项都等于前两项之和。
所以只要给出两个初始值,后面的数字就可以用前面的数的和来表示.
这里用x表示分子,y表示分母.用for循环把分数序列前20项加起来.最后打印结果.
sum+=(float)(x)/y; 用了强制类型转换,因为两个int型的数相除,结果也会是int型.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
风行子HS
2013-03-26 · TA获得超过223个赞
知道答主
回答量:2
采纳率:0%
帮助的人:2087
展开全部
刚刚重写了一个,觉得这个简单易懂,楼主可以看看
#include "stdio.h"
void main()
{
float m,n,t,sum=0;
int i;
n=1.0;
m=2.0;
for(i=1;i<=20;i++)
{
sum+=m/n;
t=n+m;
n=m;
m=t;
}
printf("前20项和是%5.2f\n",sum);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2018-06-21
展开全部
#include <stdio.h>
#include <math.h>
main()
{
int i,count=0;
double sum=0.0;
int a1,a2,b1,b2,a3,b3;
a1=2; //第1项分子
a2=3; //第2项分子
b1=1; //第1项分母
b2=2; //第2项分母
sum = sum + a1*1.0/b1;
printf("%d/%d + ",a1,b1);
sum = sum + a2*1.0/b2;
printf("%d/%d ",a2,b2);
for(i=3;i<=20;i++)
{
a3=a1+a2;
b3=b1+b2;
printf(" + %d/%d",a3,b3);
sum = sum + a3*1.0/b3;
a1=a2;
b1=b2;
a2=a3;
b2=b3;
}
printf(" = %.2lf\n",sum);

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式