Для последовательности Фибоначчи найти 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);
}
Объяснение кода листинга программы
- Программа начинается с функции
main(), где пользователю предлагается ввести положительное числоx. Это число будет использоваться для вычисления последовательности Фибоначчи. - После ввода числа
x, программа переходит к функцииfib(), которая вычисляетk-й член последовательности Фибоначчи. В этой функции используются три переменные:aиb, которые представляют собой первые два члена последовательности, иtemp, которая используется для временного хранения значенияaпри вычислении следующего члена. - В основной функции
main()после вызова функцииfib()программа переходит к следующей задаче, где пользователю предлагается ввести еще одно положительное числоx. - Затем программа переходит к функции
isEvenFib(), которая проверяет, является ли числоxчетным членом последовательности Фибоначчи. В этой функции используются те же три переменныеaиb, что и в функцииfib(), а также переменнаяresult, которая используется для хранения суммы чиселaиb. - В основной функции
main()после вызова функцииisEvenFib()программа переходит к следующей задаче, где пользователю предлагается ввести еще одно положительное числоx. - Затем программа переходит к циклу
for, который вычисляет сумму первыхxчленов последовательности Фибоначчи и выводит сообщение о том, является ли эта сумма четной или нечетной. - В конце программы пользователю предлагается нажать любую клавишу для выхода из программы.