다음은 Java용으로 만들어 둔 소스파일 TestForForApp.java(참조: 80컬럼 컨솔에 19단표 출력하기 예제 for Java )를 C용 소스로 고쳐본 것이다.
스트링을 처리하고 전달하기 위해 메모리 할당(allocation)과 해제(free)를 하면서 동적 메모리(dynamic memory)를 이용하고 있다.
소스 변경 없이 Ch 로도 실행시킬 수 있다.
- /*
- * Filename: testForFor.c
- *
- * Compile: cl testForFor.c
- * Execute: testForFor
- *
- * Execute without compiling: ch testForFor.c
- *
- * Date: 2008. 3. 3.
- */
- #include <stdio.h>
- #include <string.h>
- #include <memory.h>
- // 매개변수 dan으로 지정된 한 단의 결과를 매개변수 t로 전달한다.
- // 중요!! t로 전달된 메모리는 사용 후 반드시 해제(free)하여야 한다.
- void getDan(char *t[19], int dan) {
- char sa[10], sb[10], sval[10];
- int j;
- // t[0], ... , t[18]에 각각 동적 메모리를 할당한다.
- for (j = 0; j < 19; j++) {
- t[j] = (char *) calloc(21, sizeof(char));
- }
- for (j = 0; j < 19; j++) {
- sprintf(sa, "%d", dan);
- if (strlen(sa) < 2)
- sprintf(sa, " %d", dan);
- sprintf(sb, "%d", j + 1);
- if (strlen(sb) < 2)
- sprintf(sb, " %d", j + 1);
- sprintf(sval, "%d", dan*(j + 1));
- if (strlen(sval) < 2)
- sprintf(sval, " %d", dan*(j + 1));
- else if (strlen(sval) < 3)
- sprintf(sval, " %d", dan*(j + 1));
- strcpy(t[j], sa);
- strcat(t[j], " x ");
- strcat(t[j], sb);
- strcat(t[j], " = ");
- strcat(t[j], sval);
- }
- }
- // 19단표를 모두 80컬럼 컨솔에 출력한다.
- void printAllNineteenDan() {
- int d[4] = { 2, 7, 11, 16 }; // 각 줄단위 블럭의 첫단
- int counter[4] = { 5, 4, 5, 4 }; // 각 줄단위 블럭에 속한 단의 개수
- char *lines[19];
- char *v[19];
- int i, j, k;
- char arr[18][19][21];
- for (i = 2; i < 20; i++) {
- getDan(v, i);
- for (j = 0; j < 19; j++) {
- strcpy(arr[i - 2][j], v[j]);
- }
- }
- // lines[0], ... , lines[18]에 각각 동적 메모리를 할당한다.
- for (j = 0; j < 19; j++) {
- lines[j] = (char *) malloc(81 * sizeof(char));
- }
- for (k = 0; k < (sizeof(d)/sizeof(int)); k++) {
- // 80 바이트 길이의 한 줄씩 완성
- for (i = 0; i < 19; i++) {
- strcpy(lines[i], arr[d[k]-2][i]);
- for (j = 1; j < counter[k]; j++) {
- strcat(lines[i], " ");
- strcat(lines[i], arr[d[k]-2+j][i]);
- }
- }
- // 80 바이트 길이의 한 줄씩 출력
- for (i = 0; i < 19; i++) {
- printf("%s\n", lines[i]);
- }
- printf("\n");
- }
- // lines[0], ... , lines[18]로 할당받은 모든 동적 메모리를 해제한다.
- for (j = 0; j < 19; j++) {
- free(lines[j]);
- }
- // v[0], ... , v[18]로 할당받은 모든 동적 메모리를 해제한다.
- for (j = 0; j < 19; j++) {
- free(v[j]);
- }
- }
- // C 언어의 main 함수 : 실행 시작 지점
- int main(void) {
- printAllNineteenDan(); // 객체에 속하는 메소드 printDan()을 호출한다.
- return 0;
- }
실행> ch testForFor.c
또는
컴파일> cl testForFor.c
실행> testForFor
2 x 1 = 2 3 x 1 = 3 4 x 1 = 4 5 x 1 = 5 6 x 1 = 6 2 x 2 = 4 3 x 2 = 6 4 x 2 = 8 5 x 2 = 10 6 x 2 = 12 2 x 3 = 6 3 x 3 = 9 4 x 3 = 12 5 x 3 = 15 6 x 3 = 18 2 x 4 = 8 3 x 4 = 12 4 x 4 = 16 5 x 4 = 20 6 x 4 = 24 2 x 5 = 10 3 x 5 = 15 4 x 5 = 20 5 x 5 = 25 6 x 5 = 30 2 x 6 = 12 3 x 6 = 18 4 x 6 = 24 5 x 6 = 30 6 x 6 = 36 2 x 7 = 14 3 x 7 = 21 4 x 7 = 28 5 x 7 = 35 6 x 7 = 42 2 x 8 = 16 3 x 8 = 24 4 x 8 = 32 5 x 8 = 40 6 x 8 = 48 2 x 9 = 18 3 x 9 = 27 4 x 9 = 36 5 x 9 = 45 6 x 9 = 54 2 x 10 = 20 3 x 10 = 30 4 x 10 = 40 5 x 10 = 50 6 x 10 = 60 2 x 11 = 22 3 x 11 = 33 4 x 11 = 44 5 x 11 = 55 6 x 11 = 66 2 x 12 = 24 3 x 12 = 36 4 x 12 = 48 5 x 12 = 60 6 x 12 = 72 2 x 13 = 26 3 x 13 = 39 4 x 13 = 52 5 x 13 = 65 6 x 13 = 78 2 x 14 = 28 3 x 14 = 42 4 x 14 = 56 5 x 14 = 70 6 x 14 = 84 2 x 15 = 30 3 x 15 = 45 4 x 15 = 60 5 x 15 = 75 6 x 15 = 90 2 x 16 = 32 3 x 16 = 48 4 x 16 = 64 5 x 16 = 80 6 x 16 = 96 2 x 17 = 34 3 x 17 = 51 4 x 17 = 68 5 x 17 = 85 6 x 17 = 102 2 x 18 = 36 3 x 18 = 54 4 x 18 = 72 5 x 18 = 90 6 x 18 = 108 2 x 19 = 38 3 x 19 = 57 4 x 19 = 76 5 x 19 = 95 6 x 19 = 114 7 x 1 = 7 8 x 1 = 8 9 x 1 = 9 10 x 1 = 10 7 x 2 = 14 8 x 2 = 16 9 x 2 = 18 10 x 2 = 20 7 x 3 = 21 8 x 3 = 24 9 x 3 = 27 10 x 3 = 30 7 x 4 = 28 8 x 4 = 32 9 x 4 = 36 10 x 4 = 40 7 x 5 = 35 8 x 5 = 40 9 x 5 = 45 10 x 5 = 50 7 x 6 = 42 8 x 6 = 48 9 x 6 = 54 10 x 6 = 60 7 x 7 = 49 8 x 7 = 56 9 x 7 = 63 10 x 7 = 70 7 x 8 = 56 8 x 8 = 64 9 x 8 = 72 10 x 8 = 80 7 x 9 = 63 8 x 9 = 72 9 x 9 = 81 10 x 9 = 90 7 x 10 = 70 8 x 10 = 80 9 x 10 = 90 10 x 10 = 100 7 x 11 = 77 8 x 11 = 88 9 x 11 = 99 10 x 11 = 110 7 x 12 = 84 8 x 12 = 96 9 x 12 = 108 10 x 12 = 120 7 x 13 = 91 8 x 13 = 104 9 x 13 = 117 10 x 13 = 130 7 x 14 = 98 8 x 14 = 112 9 x 14 = 126 10 x 14 = 140 7 x 15 = 105 8 x 15 = 120 9 x 15 = 135 10 x 15 = 150 7 x 16 = 112 8 x 16 = 128 9 x 16 = 144 10 x 16 = 160 7 x 17 = 119 8 x 17 = 136 9 x 17 = 153 10 x 17 = 170 7 x 18 = 126 8 x 18 = 144 9 x 18 = 162 10 x 18 = 180 7 x 19 = 133 8 x 19 = 152 9 x 19 = 171 10 x 19 = 190 11 x 1 = 11 12 x 1 = 12 13 x 1 = 13 14 x 1 = 14 15 x 1 = 15 11 x 2 = 22 12 x 2 = 24 13 x 2 = 26 14 x 2 = 28 15 x 2 = 30 11 x 3 = 33 12 x 3 = 36 13 x 3 = 39 14 x 3 = 42 15 x 3 = 45 11 x 4 = 44 12 x 4 = 48 13 x 4 = 52 14 x 4 = 56 15 x 4 = 60 11 x 5 = 55 12 x 5 = 60 13 x 5 = 65 14 x 5 = 70 15 x 5 = 75 11 x 6 = 66 12 x 6 = 72 13 x 6 = 78 14 x 6 = 84 15 x 6 = 90 11 x 7 = 77 12 x 7 = 84 13 x 7 = 91 14 x 7 = 98 15 x 7 = 105 11 x 8 = 88 12 x 8 = 96 13 x 8 = 104 14 x 8 = 112 15 x 8 = 120 11 x 9 = 99 12 x 9 = 108 13 x 9 = 117 14 x 9 = 126 15 x 9 = 135 11 x 10 = 110 12 x 10 = 120 13 x 10 = 130 14 x 10 = 140 15 x 10 = 150 11 x 11 = 121 12 x 11 = 132 13 x 11 = 143 14 x 11 = 154 15 x 11 = 165 11 x 12 = 132 12 x 12 = 144 13 x 12 = 156 14 x 12 = 168 15 x 12 = 180 11 x 13 = 143 12 x 13 = 156 13 x 13 = 169 14 x 13 = 182 15 x 13 = 195 11 x 14 = 154 12 x 14 = 168 13 x 14 = 182 14 x 14 = 196 15 x 14 = 210 11 x 15 = 165 12 x 15 = 180 13 x 15 = 195 14 x 15 = 210 15 x 15 = 225 11 x 16 = 176 12 x 16 = 192 13 x 16 = 208 14 x 16 = 224 15 x 16 = 240 11 x 17 = 187 12 x 17 = 204 13 x 17 = 221 14 x 17 = 238 15 x 17 = 255 11 x 18 = 198 12 x 18 = 216 13 x 18 = 234 14 x 18 = 252 15 x 18 = 270 11 x 19 = 209 12 x 19 = 228 13 x 19 = 247 14 x 19 = 266 15 x 19 = 285 16 x 1 = 16 17 x 1 = 17 18 x 1 = 18 19 x 1 = 19 16 x 2 = 32 17 x 2 = 34 18 x 2 = 36 19 x 2 = 38 16 x 3 = 48 17 x 3 = 51 18 x 3 = 54 19 x 3 = 57 16 x 4 = 64 17 x 4 = 68 18 x 4 = 72 19 x 4 = 76 16 x 5 = 80 17 x 5 = 85 18 x 5 = 90 19 x 5 = 95 16 x 6 = 96 17 x 6 = 102 18 x 6 = 108 19 x 6 = 114 16 x 7 = 112 17 x 7 = 119 18 x 7 = 126 19 x 7 = 133 16 x 8 = 128 17 x 8 = 136 18 x 8 = 144 19 x 8 = 152 16 x 9 = 144 17 x 9 = 153 18 x 9 = 162 19 x 9 = 171 16 x 10 = 160 17 x 10 = 170 18 x 10 = 180 19 x 10 = 190 16 x 11 = 176 17 x 11 = 187 18 x 11 = 198 19 x 11 = 209 16 x 12 = 192 17 x 12 = 204 18 x 12 = 216 19 x 12 = 228 16 x 13 = 208 17 x 13 = 221 18 x 13 = 234 19 x 13 = 247 16 x 14 = 224 17 x 14 = 238 18 x 14 = 252 19 x 14 = 266 16 x 15 = 240 17 x 15 = 255 18 x 15 = 270 19 x 15 = 285 16 x 16 = 256 17 x 16 = 272 18 x 16 = 288 19 x 16 = 304 16 x 17 = 272 17 x 17 = 289 18 x 17 = 306 19 x 17 = 323 16 x 18 = 288 17 x 18 = 306 18 x 18 = 324 19 x 18 = 342 16 x 19 = 304 17 x 19 = 323 18 x 19 = 342 19 x 19 = 361
'프로그래밍 > C' 카테고리의 다른 글
GMP 사용 예제 for C (0) | 2008.03.19 |
---|---|
조립제법(Horner의 방법) 예제 for C and Ch (0) | 2008.03.14 |
(최대공약수 구하기) while... 반복문 예제 for C (0) | 2008.02.21 |
if...else... 조건문 사용 예제 for C (0) | 2008.02.19 |
맹령행 인자 처리 예제 for C (0) | 2008.02.18 |