Для последовательности Фибоначчи найти k-й член последовательности - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Для последовательности Фибоначчи: 1) Найти k-й член последовательности 2) Получить первые n членов последовательности 3) Верно ли, что сумма первых n членов последовательности есть четное число? не пойму как сделать 1) если пользователь введет например 0 или 1, у меня выходит ошибка. закидывать сначала в массив всю последовательность нельзя, понятное дело. хотел так, но тут проблемы с 0 и 1 элементами, можно как-то по-человечески сделать первый пункт?
fibi[0]=0;
fibi[1]=1;
 
printf("Kakkoi k chlen vuvesti1? ");
scanf("%i", &num_elem);
    
for(i=2; i<num_elem; ++i)
{
    fibi[i]=fibi[i-2]+fibi[i-1];
    re_elem=fibi[i];
}
 
printf("%i chlen = %i",num_elem,re_elem);

Решение задачи: «Для последовательности Фибоначчи найти k-й член последовательности»

textual
Листинг программы
#include <stdio.h>
 
void fib(unsigned n, int printSequence);
int isEvenFib(unsigned x);
 
int main(void)
{
    int i, x;
    do
    {
        printf("Input positive X ");
        scanf("%d",&x);
    } while (x<0);
    printf("\nZadanie #1\n");
    fib(x,0);
    printf("\n\nZadanie #2\n");
    fib(x,1);
    printf("\n\nZadanie #3");
    for (i = 0; i < x; i++)
        printf("\nSum of F[0]..F[%d] is %s", i, isEvenFib(i) ? "even" : "odd" );
    printf("\n\n\nProgram is terminated. Press any key to exit ", i);
    getchar();
    return 0;
}
 
void fib(unsigned n, int printSequence)
{
    int i;
    unsigned a = 1, b = 1, temp;
    if (n<0) return;
    if (printSequence)
        printf("%d %d ",a,b);
    for (i = 1; i < n; i++)
    {
        temp = a;
        a += b;
        b = temp;
        if (printSequence)
            printf("%d ",a);
    }
    if (!printSequence)
        printf("%d ",a);
}
 
int isEvenFib(unsigned x)
{
    int i;
    unsigned a = 1, b = 1, result = 2, temp;
    if (x < 1) return 0;
    for (i = 1; i < x; i++)
    {
        temp = a;
        a += b;
        b = temp;
        result += a;
    }
    return !(result & 1);
}

Объяснение кода листинга программы

  1. Программа начинается с функции main(), где пользователю предлагается ввести положительное число x. Это число будет использоваться для вычисления последовательности Фибоначчи.
  2. После ввода числа x, программа переходит к функции fib(), которая вычисляет k-й член последовательности Фибоначчи. В этой функции используются три переменные: a и b, которые представляют собой первые два члена последовательности, и temp, которая используется для временного хранения значения a при вычислении следующего члена.
  3. В основной функции main() после вызова функции fib() программа переходит к следующей задаче, где пользователю предлагается ввести еще одно положительное число x.
  4. Затем программа переходит к функции isEvenFib(), которая проверяет, является ли число x четным членом последовательности Фибоначчи. В этой функции используются те же три переменные a и b, что и в функции fib(), а также переменная result, которая используется для хранения суммы чисел a и b.
  5. В основной функции main() после вызова функции isEvenFib() программа переходит к следующей задаче, где пользователю предлагается ввести еще одно положительное число x.
  6. Затем программа переходит к циклу for, который вычисляет сумму первых x членов последовательности Фибоначчи и выводит сообщение о том, является ли эта сумма четной или нечетной.
  7. В конце программы пользователю предлагается нажать любую клавишу для выхода из программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4 из 5
Похожие ответы