C 언어로 작성된 다음 소스를 컴파일하여 실행하면 숫자 계산으로 쌓아 올린 피라미드 세 가지가 출력된다. (gcc 는 GNU C 컴파일러의 컴파일 명령이고, cl 은 Visual C++ 컴파일러의 컴파일 명령이다.)
세 함수 pyra1(int, int), pyra2(int, int), pyra3(int, int) 은 재귀호출을 사용하였고, 세 함수 pyramid1(), pyramid2(), pyramid3() 은 for 반복문을 사용하였다.
//
// 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;
}
'프로그래밍 > C' 카테고리의 다른 글
gcc 와 g++ 의 log 계산 오류 (0) | 2013.02.25 |
---|---|
부정확한 부동소수점수 계산에 대하여 (0) | 2013.01.22 |
MinGW 의 MSYS 에서 more 명령이 없다고 할 때 (0) | 2013.01.15 |
C 언어로 평방근, 입방근, n제곱근 구하는 함수를 구현하고 테스트하기 (0) | 2013.01.12 |
C 언어와 GSL 라이브러리로 역삼각함수, 역쌍곡선함수 값을 구하는 예제 (0) | 2013.01.10 |