2016-03-27 2 views
1

Im пытается рассчитать последовательность фибоначчи на пользовательский ввод. Таким образом, если пользователь вводит 10 программа будет выводить все числа в последовательности до 10 в этом случае его 0, 1, 1, 2, 3, 5, 8C фибоначчи с пользовательским вводом

Вот мой код:

#include <stdio.h> 
int main() 
{ 
    /* variable definition: */ 
    int a, b, usrNumber; 
    /* Initialize */ 
    a = 0; 
    b = 1; 
    usrNumber = 0; 
    /* Ask user for number */ 
    printf("Please enter a positive number\n"); 
    scanf("%d", &usrNumber); 
    /* Conduct Loop */ 
    while (b < usrNumber) 
    { 
     printf("%d \n",a); 
     a += b; 
     printf("%d \n",b); 
     b += a; 
    } 
    return(0); 
} 

Когда я запускаю его на 10 и 60, последовательность останавливает одно короткое число, ожидаемое. Когда я запускаю его на 90, или 300, последовательность работает так, как ожидалось. Любые мысли о том, почему я не могу заставить более низкие числа работать?

ответ

1

Измените цикл, чтобы выглядеть следующим образом:

while (a < usrNumber) 
{ 
    printf("%d ", a); 
    if (b < usrNumber) { 
     printf("%d ", b); 
    } 
    a = a + b; 
    b = b + a; 
} 

Если пользователь вводит 10, то к концу третьего раза ваш запускает цикл, a составляет 8 и b есть 13. Таким образом, потому что b больше затем 10, цикл останавливается и a не получает печататься, даже если это меньше, чем 10

+0

Извините, моя первая версия была неправильной, я только что обновил ее. – Addison

+0

Это то, что я искал. Я до сих пор не знаю, почему мой исходный код не работает, когда я ставлю 10 или 60, но он подходит для 90 или 300 ... – jojonac

+0

Удивительный! Я не знаю, но, вероятно, из-за небольших расстояний между цифрами при вводе меньшего числа – Addison

1

Вместо того чтобы делать два шага за цикл, вы можете использовать переменные Подсобную

while (b < usrNumber) { 
    aux=b; 
    b+=a; 
    a=aux; 
    printf("%d ",b);} 
0

Я не использовал C в то время, так что следующий код, возможно, потребуется изменить немного, но мне кажется, что с помощью рекурсивной функции будет иметь больше смысла для последовательности Фибоначчи:

int GetFibonacciSequence(int index, bool printOutput) 
    { 
     int ret = 0; 
     //Root of the function 
     if (index == 0 || index == 1) 
     { 
      ret = index; 
     } 
     //Recursive portion 
     else 
     { 
      int a = GetFibonacciSequence(index - 2, false); 
      int b = GetFibonacciSequence(index - 1, printOutput); 
      ret = (a + b); 
     } 
     //Output 
     if (printOutput) 
     { 
      printf("%d ", ret); 
     } 
     return ret; 
    } 
0

Вот быстрый и простой способ сделать это.

int main(){ 
    int a=0, c=1, b=1, sum=0, lim; 
    scan("%d", &lim); 
    while (C < lim){ printf("%d. ",c); c=a+b; a=b; b=c; } 
    return 0; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^