Develop

[c] 단기과정[01/07] 제어문, 피보나치수열

by hooni posted Apr 23, 2003
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄
ax² + bx + c = 0     x 값의 출력

입력 a, b, c          출력(x의 값)
a=0, b=0, c=0        부정
a=0. b=0. c!=0       불능
a=0, b!=0              -c/b
a!=0                     b² - 4ac < 0 인경우 허수
                           b² - 4ac >=0 인경우 2차 방정식의 근의 해 존재

if문으로 작성
#include<stdio.h>

void main(){
    int a, b, c;

    printf("Enter a, b, c : ");
    scanf("%d %d %d", &a, &b, &c);

    if(a==0){
        if(b==0){
            if(c==0) printf("Undefined!!n");
            else printf("Impossible!!n");
        }else printf("-c/b!!n");
    }else{
        if(b*b-4*a*c>=0) printf("Possible!!n");
        else printf("Impossible!!n");
    }
}

조건연산자로 작성
#include<stdio.h>

void main(){
    int a, b, c;

    printf("Enter a, b, c : ");
    scanf("%d %d %d", &a, &b, &c);

    (a==0)?(
        (b==0)?(
            (c==0) ? printf("Undefined!!n") : printf("Impossible!!n")
        ): (
            printf("-c/b!!n")
        )                   
    ): (
        (b*b-4*a*c>=0) ? printf("Possible!!n") : printf("Impossible!!n")
    );
}

switch~case문으로 작성
#include<stdio.h>

void main(){
    int a, b, c;

    printf("Enter a, b, c : ");
    scanf("%d %d %d", &a, &b, &c);

    switch(a){
        case 0 :
            switch(b){
                case 0 :
                    switch(c){
                        case 0 :
                            printf("Undefined!!n");
                            break;
                        case !0 :
                            printf("Impossible!!n");
                            break;
                    }
                    break;
                case !0 :
                    printf("-c/b!!n");
                    break;
            }
            break;        
        case !0 :
            switch((b*b-4*a*b>>31)&1){
                case 0:
                    printf("Possible!!n");
                    break;
                case !0 :
                    printf("Impossible!!n");
                    break;
            }
            break;
    }
}

피보나치수열
#include<stdio.h>

void main(){
        int fib0=0, fib1=1;
        int fib_n, n, i;

        printf("Enter a Number : ");
        scanf("%d", &n);

        for(i=0; i<n; i++){
                fib_n = fib0 + fib1;
                fib0 = fib1;
                fib1 = fib_n;

                printf("%2d. %dn", i, fib_n);
        }
}

재귀함수와 반복함수로 작성^^
#include <stdio.h>

/* 재귀함수(recursive) */
int recur_fibonacci(int n){
    /* f(n) = f(n-2) + f(n-1) 이고 단, f(1)이하가 되면 초기값 1을 리턴 */
    if(n<2) return 1;
    else return recur_fibonacci(n-2) + recur_fibonacci(n-1);
}

/* 반복함수(iterative) */
int iter_fibonacci(int n){
    int f0=0;    /* f(1)의 초기화된 변수 */
    int f1=1;    /* f(2)의 초기화된 변수 */
    int fn;        /* f(3)부터 저장되는 변수 f(3) = f(1) + f(2) ... */

    /* f(n) = f(n-2) + f(n-1) */
    /* n-- 가 음수가 될 때 까지(n번째를 구하기 위해 n번만큼 f(1)~f(n) 까지 루프..) */
    while(n-->0){
        fn = f0 + f1;
        f0 = f1;
        f1 = fn;
    }
    return fn;
}

int main(){
    int n;    /* n번째의 피보나치수열 숫자 */
    int r;    /* 재귀함수 결과 */
    int i;    /* 반복함수 결과 */

    /* 피보나치 수열의 n번째를 구할것인지 입력 */
    printf("Enter a Number : ");
    scanf("%d",&n);
    
    /* 재귀함수 실행 */
    r = recur_fibonacci(n);

    /* 반복함수 실행 */
    i = iter_fibonacci(n);

    /* 결과 출력 */
    printf("Recursive %dth fibonacci Number : %d
", n, r);
    printf("Iterative %dth fibonacci Number : %d
", n, i);

    return 0;
}