数列1,1,2,3,5,8,13,21,34..用C语言编程求第n项为?

写的这个为什么输入2却得出的结果是1?哪里错了?
算不出n项和

#include<iostream>
using namespace std;
main()
{ int s,a,b,m,n,i;
cin>>s;
a=1;
b=1;
i=1;
n=0;
if(s=1)
{cout<<"1"<<endl;
}
else
{while(i<s)
{m=a+b;
n=n+m;
a=b;
b=m;
i=i+1;
}
cout<<n<<endl;
}
}

第1个回答  推荐于2018-05-10
判断条件有问题,少写了等于,应该是:
if (s==1) {... ... ...}
else {... ... ...}追问

啊!!对!!谢谢啊。还有啊可是我输入5结果是18 正确答案应该是12 怎么回事啊。。

追答

因为求n项的和算法错了。
给你分析一下:数列为 1 1 2 3 5 8
一开始n=1+1=2
然后a和b分别往前移,变成a=1,b=2
然后问题就出现了,继续算时,n=2+1+2=(1+1)+(1+2)=5
也就是说,你这样每次前移一次就算一次n,导致,从第二个数开始,每个数都加了两遍。
程序继续运行就会变成n=(1+1)+(1+2)+(2+3)=10

追问

喔!!!我懂了!!!那应该怎么改才好呢???

追答

将n初始值设为1,也就是一个数的时候,总和为1。
(这样s==1时,也可以输出n,而不用人为输出1)
然后将n=n+m改成n=n+b
也就是说,每次只加新增的那个数
其余都不用变化

追问

真的太感谢您了!!!谢谢啊!!!好人啊!!!

本回答被提问者和网友采纳
第2个回答  2013-03-16
判断条件有问题,少写了等于,应该是:
if (s==1) {... ... ...}
else {... ... ...}
第3个回答  2013-03-16
你把if(i=1)改成if(i==1)就可以了,你一个等于号是赋值,两个等于号才是判断。

数列1,1,2,3,5,8,13,21,34..用C语言编程求第n项为?
if (s==1) {... ... ...} else {... ... ...}

数列1,1,2,3,5,8,13,21,34..用C语言编程求第n项为?
int main(void){ int arr[100] = {1,1};int n, i;printf("Please input 0 < n < 100:");scanf("%d", &n);for (i=2; i < n + 2; i++){ arr[i] = arr[i - 1] + arr[i - 2];} printf("arr[%d] = %d\\n", n, arr[n - 1]);return 0;} 试试这个 ...

c语言数组1.1.2.3.5.8.13.21.34求n个数是多少
c语言数组1.1.2.3.5.8.13.21.34求第n(n<=92)个数是多少:include<stdio.h> int main(){ long long a[100]= {0,1};int n,i;scanf("%d",&n);if(n>92)n=92;for(i=2; i<=n; i++){ a[i]=a[i-1]+a[i-2];printf("%d: %lld\\n",i,a[i]);};return 0;} ...

fib在c语言中是什么意思?
fib在c语言中为斐波那契数列,又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”。指的是这样一个数列:1、1、2、3、5、8、13、21、34,在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+...

c语言---斐波那契数列
斐波那契数列,一个以递推方式定义的数列,其前两个数字分别为 0 和 1,随后每个数字是前两个数字之和。例如,数列如下:0、1、1、2、3、5、8、13、21、34……数学上,斐波那契数列由递推公式 F(0) = 0,F(1) = 1, F(n) = F(n - 1) + F(n - 2)(n ≥ 2,n ∈ N*)...

斐波那契数列与音乐!!!
斐波那契数列指的是这样一个数列:1,1,2,3,5,8,13,21…… 这个数列从第三项开始,每一项都等于前两项之和。它的通项公式为:(1\/√5)*{[(1+√5)\/2]^n - [(1-√5)\/2]^n}(又叫“比内公式”,是用无理数表示有理数的一个范例。)【√5表示根号5】 很有趣的是:这样一个完全是自然数的数列...

输入一个整数n(1-50),输出第n个斐波拉契数。用C语言怎么 做
【解题思路】这道题首先要清楚什么是斐波接契数列,这种数列的前两项分别是0和1,然后从第三项开始,每项都等于前两项之和。比如:0,1,1,2,3,5,8,13,21,34,55,89,……所以,我们要求第n项,就得求出第n-2项和第n-1项,然后把这两项相加就得到第n项的值。因此,可以用一个循环,从3...

求用C语言表达斐波那契数列
斐波那契数列,又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,...

1, 2, 3, 5, 8, 13, 21, 34, 55, 后面一个数是前面两个的和, 用c语言...
h>#include <stdlib.h>int main(){int i = 0;int N = 0;\/\/存放元素个数long long sum =0;printf("please input the number of the array:");scanf("%d",&N);int *array = malloc(sizeof(int)*N);array[0] = 1;sum+= array[0];array[1] = 2;sum+= array[1];for(i=2...

求解:斐波那契数列通项公式及其计算过程
斐波那契数列:1,1,2,3,5,8,13,21……如果设F(n)为该数列的第n项(n∈N+)。那么这句话可以写成如下形式:F(1)=F(2)=1,F(n)=F(n-1)+F(n-2) (n≥3)显然这是一个线性递推数列。通项公式的推导方法一:利用特征方程 线性递推数列的特征方程为:X^2=X+1 解得 X1=(1+...

相似回答