본문 바로가기
쿤즈 Dev/C

[C언어 문제] 피보나치(Fibonacci) 수열 만들기

by :)Koon 2021. 4. 22.

C언어를 이용한 문제들은 대부분 수학적 문제들을 구해보는 것들이 좋은 것 같습니다. 지난 포스팅에서는 재귀 함수를 이용해서 팩토리얼(Factorial)을 구해보았는데요.

2021.04.17 - [쿤즈 Dev/C] - [C언어 문제] Factorial(팩토리얼: 계승) 구하기 (반복문 이용)

2021.04.20 - [쿤즈 Dev/C] - [C언어 문제] Factorial(팩토리얼: 계승) 구하기 (재귀 함수 이용)

하나의 문제에도 여러가지 방법들을 사용해서 만들어 볼 수 있었습니다.

 

 

이번 포스팅에서는 피보나치(Fibonacci) 수열을 만들어 보도록 하겠습니다.


C언어 문제. 피보나치(Fibonacci) 수열을 만드시오.

화면에 다음과 같이 출력되도록 프로그래밍하시오.

반복 횟수 입력 : 10
피보나치 수열 : 0 1 1 2 3 5 8 13 21 34

조건 1. 반복문을 이용할 것(for, while, do ... while)

조건 2. 반복 횟수를 입력받아서 받은 수 만큼 반복할 것

 

*프로그래밍 의도

피보나치수열에 대해서 알고 있는가?

사용자로부터 수를 입력받을 수 있는가?

조건문을 사용할 수 있는가?

반복문을 사용할 수 있는가?

 

*문제 해결을 위한 글

ko.wikipedia.org/wiki/피보나치_수

2020.08.10 - [쿤즈 Dev/C] - [C언어] 조건문을 사용해서 분기시켜보자(1) - if 조건문!

2020.08.06 - [쿤즈 Dev/C] - [C언어] 표준입력 표준출력 사용하기 (첫 프로그래밍 시작!)

2020.08.25 - [쿤즈 Dev/C] - [C언어] 반복문의 시작! - for 구문

2020.09.14 - [쿤즈 Dev/C] - [C언어] 반복문 두 번째 - while 구문

2020.09.15 - [쿤즈 Dev/C] - [C언어] 반복문 세 번째 - do while


C언어 문제 풀이

작성된 프로그래밍은 정답이 아닙니다. 프로그래밍 소스에 대해 정답은 없습니다. 다양한 방법으로 프로그래밍이 가능하며 한 가지 예일 뿐입니다.

소스코드 1. fibonacci_for.c

#include <stdio.h>

int main(){
    int num, i, prevNum1 = 0, prevNum2 = 1, next;
    
    printf("반복 횟수 입력 : ");
    scanf("%d", &num);
    
    for(i=0; i<num; i++) {
        printf("%d ", prevNum1);
        
        next = prevNum1 + prevNum2;
        prevNum1 = prevNum2;
        prevNum2 = next;
    }
    printf("\n");
    
    return 0;
}

소스코드 2. fibonacci_while.c

#include <stdio.h>

int main(){
    int num, i=0, prevNum1 = 0, prevNum2 = 1, next;
    
    printf("반복 횟수 입력 : ");
    scanf("%d", &num);
    
    printf("피보나치 수열 : ");
    while(i<num){
        printf("%d ", prevNum1);
        
        next = prevNum1 + prevNum2;
        prevNum1 = prevNum2;
        prevNum2 = next;
        i++;
    }
    printf("\n");
    
    return 0;
}

 

 

 

* 프로그래밍 의도 파악

피보나치수열에 대해서 알고 있는가?

피보나치수열에 대해서 알지 못해도 됩니다. 다만 검색을 해서 피보나치 수열이 어떤 원리를 가지는지 찾아보고 그 원리를 이용해서 프로그래밍을 하실 수 있으면 됩니다. 

 

피보나치 수열은 모든 항은 앞의 두 항의 합인 수열입니다. 이 특징을 이용해서 변수와 조건, 반복문의 구성을 만들 수 있습니다.

 

프로그래밍은 문제를 해결하기 위해서 방법을 찾아보는 경우가 많습니다. 그래서 모두가 코드 스타일이 다르고 사용 방법도 여러 가지 방법이 있기 때문에 정답은 없습니다. 다만 결론이 같다는 것입니다. 그리고 여러가지 방법들을 찾아보면서 더 효율적인 코드들도 만들 수 있습니다.

 

사용자로부터 수를 입력받을 수 있는가?

사용자로부터 수를 입력받기 위해서는 변수가 필요하고 표준 입력 함수가 필요합니다. 대표적인 표준입력 함수에는 scanf() 함수 입니다. 다만 윈도우에서는 이 함수를 사용할 때 에러가 발생할 수 있기 때문에(Visual studio 버전에 따라) 표준입력 장치에 관련된 포스팅을 확인해 주세요.

 

조건문을 사용할 수 있는가?

이 문제에서는 조건문 if가 별도로 등장하지 않았습니다. 다만 반복문 for 또는 while 내부에 조건이 반드시 들어갑니다. 이 조건들은 bool 값으로 true 혹은 false를 판단할 수 있는 값이어야 합니다.

 

조건문을 사용하는 방법도 있을 수 있습니다. 반복문을 무한반복으로 만들고 break문을 사용하시면 됩니다.

 

반복문을 사용할 수 있는가?

이 문제는 반복문에 관련된 문제입니다. 반복문에는 for, while, do ... while 3가지가 있어요. 이 3가지 중에서 맘에 드시는 반복문으로 프로그래밍을 하시면 됩니다. 예제에서 do ... while은 따로 올려드리지 않았으니 이 부분도 직접 만들어 보시면 도움이 되실 것 같네요.

 


이번 포스팅에서는 팩토리얼에 이에서 피보나치수열을 만드는 방법을 알아보았습니다. 수학적인 내용을 프로그래밍을 만들어서 결과를 확인해 보는 것이 재미있는 것 같습니다. 이 외에도 여러 가지 수학적인 내용들을 만들어 보시면 도움이 많이 되실 것 같습니다. 도움이 되셨으면 합니다. 이상입니다.

댓글