C语言有一个数列 C程序 有一个分数数列2\1 ,3\2 ,4\3 ,5\4 ,6\5 ,7\6..用编程求前二十项之和.

#include"stdio.h"
void main()
{int i;
float m,n,a,s,t;
m=1;
n=2;
a=0;
for(i=1;i<=20;i++)
{a=n/m;
s=s+a;
t=m;
m=n;
n=t+n;
}
printf("%.3f",s);
}

我就不明白哪里有问题?运行出来是错的。

#include"stdio.h"
void main()
{int i;
float m,n,a,s,t;
m=1;
n=2;
a=0;
for(i=1;i<=20;i++)
{
a=n/m+a;
m=m+1;
n=n+1;
};
printf("%.3f",a);
}
这样应该好了 。。。
你那个和原题要求也不一样啊追问

。。。问题打错了不好意思。是有一分数数列,2/1,3/2,5/3,8/5,13/8,21/13……,

追答

你那个s没有初始化 。。。 前面加句s=0;就好

追问

非常感谢!初始化之后好了。
不过貌似老师说不初始化就是0吧,我上课也没听很清楚。
请问下是个啥原理?说清楚就采纳你了。
都怪我上课睡觉太多了。

追答

不出始化就是随机值阿 = =。。。。。
不能用的 。。
必须给它赋值才能用

追问

看来我期末是挂科的节奏了,唉。。
涨姿势了。

追答

呵呵 没关心 这些都不是很难 好好学觉得挺有趣的~
尤其是弄清楚一个问题,或者自己做出题目的时候

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-01-02
算法有问题,不妨改成这个试试:
#include"stdio.h"
void main()
{
int i;
float m,n,a,s;
m=1;
n=2;
a=0;
s=0;
for(i=1;i<=20;i++)
{
a=n/m;
s=s+a;
m=m+1;
n=n+1;
}
printf("%.3f",s);
}追问

楼下说对了,是S没初始化,算法没问题,初始化之后就好了。
我也不明白为什么S要初始化。

追答

因为在你定义变量时相当于给了一个空间地地址而里面的值是随机的,所以要初始化。

第2个回答  2013-01-02
a=n/m;你这样写是不对的……
因为计算机已经计算出来不准确的值了……你要把这些值用真正的分数表达出来,然后统计之后,自动的约分什么的计算……追问

谢谢您的回答,不过不是这个原因,
是因为S没初始化,我初始化之后就好了,我也不明白为什么?
您能说清楚吗?

追答

因为你给的这几个数原因吧,或者是赶巧了用的float比较好,你想下就知道了,因为每次都会计算机自动的省略,当然目前的需求,足够了,要是精确的计算……那比较麻烦,看你没有那个需求,也没有必要讲了……

相似回答