继续C语言问题

来源:百度知道 编辑:UC知道 时间:2024/09/23 12:21:32
有一分数序列2/1,3/2,5/3,8/5,13/8,21/13,...
求出这个数列的前20项之和.

我用数组写了个程序,可是调试了好几次,总是与参考答案有一定差距(参考答案是32点多,我自己的程序的结果是19)

#include"stdio.h"
void main()
{
int i;
float sum=0;
int a[20]={1.0,1.0};
int b[20]={1.0,2.0};
for(i=2;i<=20;i++)
{
b[i]=b[i-1]+b[i-2];
a[i]=a[i-1]+a[i-2];
sum=sum+b[i]/a[i];
}
printf("%f\n",sum+2);
}

希望各位高手帮我看下是不是我的程序设计有问题.谢谢,小弟不甚感激.
我是新手,才学到数组,看到这个题目,想用数组解答,可是没有成功`
我改成double a[20]={1.0,1.0};
double b[20]={1.0,2.0};
结果是正确的,但是结果下面还出现这样一行英文;
Abnormal program termination
这是什么意思`

数组类型错误,定义为int 使得b[i]/a[i]都类型转换了,丢失了数据的准确性,比如本来是1.02 而得到是1.

#include"stdio.h"
void main()
{
int i;
float sum=0;
float a=1.0;
float b=2.0;
float temp;

for(i=1;i<=20;i++)
{
sum += b/a;
temp = a +b;
a = b;
b =temp;
}
printf("%f\n",sum);
}

补充:意思程序异常(不正常)结束的,含有某种问题。
问题出于:for循环最后一次i=20,数组出界了(double a[20];的下标是0到19的)

唉,a和b定义错了应该是浮点把
double a[20]={1.0,1.0};
double b[20]={1.0,2.0};

分子分母都是菲波那契数列,每一项都是前两项之和
for(i=3;i<=20;i++)
从第三项开始的

用double类型变量 而你用的int

不用整个数组定义成浮点,浪费内存。
int a[20]={1.0,1.0};改成普通的int a[20]=……;,.0没用的。
还有 明显写错数了,应该
int a[20]={1,2};
int b[20]={2,3};

数组超界了:for(i=2;i<=19;i++)

浮点这样处理:
sum=sum+(float)b[i]/a[i];

数组都20元了sum最后还加个2搞什么鬼。
printf("%f\n",sum);

为尽量保持原作风格,未进行过多的优化。