C 언어로 작성된 다음 소스를 컴파일하여 실행하면 숫자 계산으로 쌓아 올린 피라미드 세 가지가 출력된다. (gcc 는 GNU C 컴파일러의 컴파일 명령이고, cl 은 Visual C++ 컴파일러의 컴파일 명령이다.)

세 함수 pyra1(int, int), pyra2(int, int), pyra3(int, int) 은 재귀호출을 사용하였고, 세 함수 pyramid1(), pyramid2(), pyramid3() 은 for 반복문을 사용하였다.

 

//  Filename: pyramidOfDigits2.c
//
//   Compile: gcc -o pyramidOfDigits2 pyramidOfDigits2.c
//   Execute: ./pyramidOfDigits2
//
//     Or
//
//   Compile: cl pyramidOfDigits2.c
//   Execute: pyramidOfDigits2
//
//     See: http://darvish.wordpress.com/2008/03/16/the-beauty-of-mathematics-and-the-love-of-god/
//
//  Date: 2013. 1. 22.
//  Copyright (c) 2013 PH Kim  (pkim __AT__ scripts.pe.kr)


#include <stdio.h>

#define TEN    10
#define NINE   9
#define EIGHT   8

// initial calling: pyra1(1, 1)
void pyra1(int n, int i)
{
    if (i <= NINE) {
        printf("%9d x %d + %d = %d\n", n, EIGHT, i, n*EIGHT + i);
        if (i < NINE) {
            pyra1(n*TEN + (i + 1), i + 1);
        }
    }
}

// initial calling: pyra2(9, 7)
void pyra2(int n, int i)
{
    if (i >= 0) {
        printf("%8d x %d + %d = %d\n", n, NINE, i, n*NINE + i);
        if (i > 0) {
            pyra2(n*TEN + (i + 1), i - 1);
        }
    }
}

// initial calling: pyra3(1, 2)
void pyra3(int n, int i)
{
    if (i <= TEN) {
        printf("%9d x %d + %2d = %d\n", n, NINE, i, n*NINE + i);
        if (i < TEN) {
            pyra3(n*TEN + i, i + 1);
        }
    }
}

void pyramid1()
{
    int i, n;
    char s[TEN];

    for (i = 1; i < TEN; i++) {
        s[i - 1] = (char) (48 + i);
        s[i] = '\0';
        sscanf(s, "%d", &n);
        printf("%9d x %d + %d = %d\n", n, EIGHT, i, n*EIGHT + i);
    }
}

void pyramid2()
{
    int i, n;
    char s[TEN];

    for (i = NINE; i > 1; i--) {
        s[NINE - i] = (char) (48 + i);
        s[NINE - i + 1] = '\0';
        sscanf(s, "%d", &n);
        printf("%8d x %d + %d = %d\n", n, NINE, i - 2, n*NINE + (i - 2));
    }
}

void pyramid3()
{
    int i, n;
    char s[TEN];

    for (i = 1; i < TEN; i++) {
        s[i - 1] = (char) (48 + i);
        s[i] = '\0';
        sscanf(s, "%d", &n);
        printf("%9d x %d + %2d = %d\n", n, NINE, i + 1, n*NINE + (i + 1));
    }
}

int main()
{
    printf("Use for loops\n");
    printf("Pyramid 1\n");
    pyramid1();
    printf("\n");

    printf("Pyramid 2\n");
    pyramid2();
    printf("\n");

    printf("Pyramid 3\n");
    pyramid3();
    printf("\n");


    printf("Use recursively called functions\n");
    printf("Pyramid 1\n");
    pyra1(1, 1);
    printf("\n");

    printf("Pyramid 2\n");
    pyra2(9, 7);
    printf("\n");

    printf("Pyramid 3\n");
    pyra3(1, 2);
    printf("\n");

    return 0;
}

 

 

 

Posted by Scripter

댓글을 달아 주세요