0 1 1 2 3 5 8 13 21.....
피보나치 수열이란 해당하는 수의 앞에 두수를 더 했을때 해당하는 수가 나오는 수를 열거하여 놓은 것입니다
예)
2의 앞자리 1과 1을 더하면 2가 됩니다
5의 앞자리 3과 2를 더하면 5가 됩니다
//열 입력하면 열수 만큼 피보나치 수열을 출력하는 프로그램
think>>
1) 피보나치 수열의 식을 먼저 세운다
2) for문을 이용하여 열수만큼 돌고 계산하고 출력한다
3) 종료포인트를 만든다
피보나치 수열은 앞에서 말했듯이 2개의 수를 합하여 다음자리 수를 구합니다
그럼 변수가 3개 필요합니다
f1 = 0;
f2 = 1;
f3 = f1 + f2;
f3 계산을 마친후에는 f1과 f2를 한자리씩 밀면 다음 열을 구할수 있습니다
f1=f2
f2=f3
f3 = f1+f2 //다음열
그리고 for문에서 증감에 사용될 i와 열의 수를 나타내는 n을 변수로 선언합니다
위의 요소를 바탕으로 피보나치 수열을 C언어로 작성하면
#include<stdio.h>
int main(void)
{
int n;
int f1 = 0;
int f2 = 1;
int f3, i;
char ch;
printf("**** 피보나치 수열 ****\n");
for(;;)
{
printf("항의 개수 입력 :");
scanf("%d", &n);
if(n>0)
{
printf("피보나치 수열은 0, 1, ");
for(i=0; i<n-1; i++)
{
f3=f1+f2;
printf("%d, ", f3);
f1=f2;
f2=f3;
}
printf("입니다\n");
f1=0;
f2=1;
}
fflush(stdin);
if(n < 0)
{
printf("종료하시겠습니까?(Y/N): ");
scanf("%c", &ch);
if( ch == 'y')
{
printf("프로그램 종료!\n");
break;
}
}
return 0;
}
1)printf문중 입니다에 개행을 넣어서 반복될때에 깔끔하게 보이도록 추가하였습니다
2)수열 제일앞의 0, 1을 print 문으로 처리하였습니다 계산을 해서 구하면 식이 더욱 복잡해 집니다.
3)제일 앞에 1의 열을 구하지 않아서 i > n-1을 써주게 되었습니다
4) f1,f2를 초기화 하지 않으면 값이 계속 증가하여 버립니다
추가로 입력 받은 항 개수만큼의 피보나치 수열의 합을 구하는 프로그램도 작성하면
#include<stdio.h>
int main(void)
{
int n;
int f1 = 0;
int f2 = 1;
int f3, i;
int sum;
char ch;
printf("**** 피보나치 수열의 합 ****\n");
for(;;)
{
printf("항의 개수 입력 :");
scanf("%d", &n);
if(n>0)
{
for(i=0; i<n-1; i++)
{
f3=f1+f2;
sum += f3;
f1=f2;
f2=f3;
}
printf("피보나치 수열 %d개 항의 합은 %d\n", n, sum+1);
f1=0;
f2=1;
sum = 0;
}
fflush(stdin);
if(n < 0)
{
printf("종료하시겠습니까?(Y/N): ");
scanf("%c", &ch);
if( ch == 'y')
{
printf("프로그램 종료!\n");
break;
}
}
return 0;
}
결과>>
수열을 변수 sum에 저장하며 합하게되니 수열의 합을 구하는 프로그램이 됩니다
'Embeded C > C언어 예제' 카테고리의 다른 글
C언어로 정수의 자리수를 구하는 프로그램 (1) | 2011.05.18 |
---|---|
C언어로 대소문자 입력을 전환하는 프로그램 (0) | 2011.05.18 |
C언어로 키보드로부터 최대 세 자리의 정수를 입력 받아 자릿수들의 합계를 구하는 프로그램 (0) | 2011.05.17 |
C언어로 초 입력시 분과 초로 변환하는 프로그램 (0) | 2011.05.17 |
C언어로 주사위를 10번 던지는 난수 프로그램 (0) | 2011.05.11 |