반복문

2015. 3. 23. 19:38엘키스공간/엘키스코딩공방

728x90
728x90

1. 작성 내용

반복문 이해하기


총 9개의 함수를 구현한다.

- 역삼각형

- 역삼각형 입력받은 만큼 출력

- 마름모

- 마름모 입력받은 만큼 출력

- 입력받은 단만 출력하기

- 입력받은 단까지 출력하기

- 입력받은 단만 제외하고 출력하기

- 3단씩 출력하기

- 중복되는 곱셈제외하고 출력

- 종료하기


2. 구현

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
#include <stdio.h>
#define TRUEFLAG 1
 
/*
작성일 : 2015.3.9
작성자 : 조민혁
1. 역삼각형
2. 역삼각형 입력받은 만큼 출력
3. 마름모
4. 마름모 입력받은 만큼 출력
5. 입력받은 단만 출력하기
6. 입력받은 단까지 출력하기
7. 입력받은 단만 제외하고 출력하기
8. 3단씩 출력하기
9. 중복되는 곱셈제외하고 출력
0. 종료하기
*/
 
void printManu();                                            // Menu
void invertTriangle();                                    // 1
void invertTriangleByInput(int num);        // 2
void diamondStar();                                        // 3
void diamondStarByInput(int num);            //4
void timesTableGetEachLine(int num);        // 5
void timesTalbeGetUntilLine(int num);        // 6
void timesTableGetExceptLine(int num);    // 7
void timesTableThreeLine();                        // 8
void timesTableExceptDuplicate();            // 9
 
void main()
{
    int i = 0;
    int input = 0//메뉴 받는 인자
    int inner_input = 0//메뉴 내부에서 받을 문자
     
    printManu();
 
    while (TRUEFLAG) // 와일 반복문을 통해 스위치문 계속 출력. 종료는 0.
    {
        scanf_s("%d", &input);
        switch (input)
        {
        case 0
            return;
        case 1
            {
                invertTriangle(); 
                break;
            }
        case 2:
            {
                printf("몇층을 출력하시겠습니까? ");
                scanf_s("%d", &inner_input);
                invertTriangleByInput(inner_input);
                break;
            }
        case 3:
            diamondStar(); 
            break;
        case 4:
            {
                printf("홀수만 입력 : ");
                scanf_s("%d", &inner_input);
                diamondStarByInput(inner_input);
                break;
            }
        case 5:
            {
                printf("출력할 단을 입력하세요 : ");
                scanf_s("%d", &inner_input);
                timesTableGetEachLine(inner_input);
                break;
            }
        case 6:
            {
                printf("몇 단까지 출력할까요? ");
                scanf_s("%d", &inner_input);
                timesTalbeGetUntilLine(inner_input);
                break;
            }
        case 7:
            {
                printf("제외할 단을 입력하시오 : ");
                scanf_s("%d", &inner_input);
                timesTableGetExceptLine(inner_input);
                break;
            }
        case 8:
            {
                printf("3단씩 출력\n");
                timesTableThreeLine();
                break;
            }
        case 9:
            {
                printf("중복수 없애고 구구단 출력\n");
                timesTableExceptDuplicate();
                break;
            }
        default:
            {
                printf("잘못입력했습니다. 다시 입력해주세요.\n");
                break;
            }
        }
        printf("입력 : ");
    }
}
 
void printManu() //메뉴 출력함수
{
    printf("제출일 : 2015.03.09 작성자 : 조민혁\n");
    printf("1. 역삼각형\n");
    printf("2. 역삼각형 입력받은 만큼 출력\n");
    printf("3. 마름모\n");
    printf("4. 마름모 입력받은 만큼 출력\n");
    printf("5. 입력받은 단만 출력하기\n");
    printf("6. 입력받은 단까지 출력하기\n");
    printf("7. 입력받은 단만 제외하고 출력하기\n");
    printf("8. 3단씩 출력하기\n");
    printf("9. 중복되는 곱셈제외하고 출력\n");
    printf("0. 종료하기\n");
    printf("입력 : \n");
}
 
void invertTriangle() // 1
{
    //*의 수 9-2i, ' '의 수 i-1
    int layer = 5;
    int i = 0;
    int j = 0;
    int k = 0;
 
    for ( i = 0; i < layer; i++// 층수만큼 루프
    {
        for ( j = 0; j < i ; j++)
        {
            printf(" ");
        }
        for ( k = 0; k < 9-2*i; k++)
        {
            printf("*");
        }
        printf("\n");
    }
}
void invertTriangleByInput(int num) // 2
{
    //*의 수 9-2i, ' '의 수 i-1
    int layer = num;
    int i = 0;
    int j = 0;
    int k = 0;
 
    for (i = 0; i < layer; i++)
    {
        for (j = 0; j < i; j++// 공백이 0개 1개 2개 씩 늘어나므로 반복 횟수를 i로 잡아준다.
        {
            printf(" ");
        }
        for (k = 0; k < 2*layer -1 - 2 * i; k++
        // 별의 수는 층수에 따라 2*layer-1개가 최대값으로 시작하여 -i 개 만큼 줄어들어 출력된다.
        {
            printf("*");
        }
        printf("\n");
    }
}
void diamondStar() // 3
{
    int i = 0;
    int j = 0;
    int k = 0;
    int center = 3;
 
    for (i = 0; i < 5; i++)
    {
        if (i < center) // 마름모 상단부터 중앙
        { 
            for (j = 0; j < center - i - 1; j++)
            {
                printf(" ");
            }
            for (k = 0; k < 2 * i + 1; k++){
                printf("*");
            }
            printf("\n");
        }
        else // 마름모 하단
        { 
            for (j = 0; j < i - center + 1; j++)
            {
                printf(" ");
            }
            for (k = 0; k < 2 * center - 5 - 2 * (i - 1 - center); k++)
            {
                /* 센터에서 다음 항의 *의 갯수는 2center - 5개(초기항),
                별의 갯수는 -2의 등비수열 이므로 등비 수열의 첫 항이 0이 되게끔 i-center를 통해 첫항 구함.
                */
                printf("*");
            }
            printf("\n");
        }
    }
}
void diamondStarByInput(int num) //4
{
    int i = 0;
    int j = 0;
    int k = 0;
    int center = 0;
 
    if (num%2 == 0// 들어오는 값이 짝수일 때
    {
        num = num/2;
        printf("짝수를 입력하셨습니다. %d개 만큼 출력됩니다.\n"2*num - 1);
    }
    else // 들어오는 값이 홀수일 때
    {
        num = num/2 + 1;
    }
 
    center = num;
 
    for (i = 0; i < 2*num - 1; i++)
    {
        if (i < center) // 마름모 상단부터 중앙
        { 
            for (j = 0; j < center - i - 1; j++)
            {
                printf(" ");
            }
            for (k = 0; k < 2 * i + 1; k++)
            {
                printf("*");
            }
            printf("\n");
        }
        else // 마름모 하단
        { 
            for (j = 0; j < i - center + 1; j++)
            {
                printf(" ");
            }
            for (k = 0; k < 2 * center - 5 - 2 * (i - 1 - center); k++)
            {
                /* 센터에서 다음 항의 *의 갯수는 2center - 5개(초기항),
                별의 갯수는 -2의 등비수열 이므로 등비 수열의 첫 항이 0이 되게끔 i-center를 통해 첫항 구함.
                */
                printf("*");
            }
            printf("\n");
        }
    }
}
 
void timesTableGetEachLine(int num) // 5
{
    int i = 0;
    for ( i = 0; i < 9; i++)
    {
        printf("%dx%d = %d\n", num, i+1 , (i+1)*num); // 구구단 출력
    }
    printf("\n");
}
 
void timesTalbeGetUntilLine(int num) // 6
{
    int i = 0;
    int j = 0;
    for ( i = 0; i < num; i++//해당 넘버까지 모든 구구단 출력
    {
        for ( j = 0; j < 9; j++)
        {
            printf("%dx%d = %d\n", i+1, j + 1, (i + 1)*(j+1));
        }
        printf("\n");
    }
}
void timesTableGetExceptLine(int num) // 7
{
    int i = 0;
    int j = 0;
    for (i = 0; i < 9; i++)
    {
        for (j = 0; j < 9; j++)
        {
            if ((i+1== num) // 해당 단이 제외할 인수 num과 같으면 출력하지 않고 continue
            {
                continue;
            }
            printf("%dx%d = %d\n", i + 1, j + 1, (i + 1)*(j + 1));
        }
        printf("\n");
    }
}
void timesTableThreeLine() // 8
{
    int i = 0;
    int j = 0;
    for (i = 0; i < 9 ;i = i +3//j for문에 3개씩 출력했으므로 i는 3씩 증감
    {
        for (j = 0; j < 9; j++//3단씩 출력
        {
            printf("%2d x%2d = %2d ", i + 1, j + 1, (i + 1)*(j + 1));
            printf("%2d x%2d = %2d ", i + 2, j + 1, (i + 2)*(j + 1));
            printf("%2d x%2d = %2d ", i + 3, j + 1, (i + 3)*(j + 1));
            printf("\n");
        }
        printf("\n");    
    }
}
void timesTableExceptDuplicate()// 9
{
    int i = 0;
    int j = 0;
    for (i = 0; i < 9; i++)
    {
        for (j = i; j < 9; j++// i가 곱셈의 앞수인 것을 제외하면 중복을 제거할 수 있다.
        {
            printf("%2dx%-d=%2d ", i + 1, j + 1, (i + 1)*(j + 1)); 
        }
        printf("\n");
    }
}
cs


3. 결과

- 메뉴 출력


- 1. 역삼각형 출력

- 2. 역삼각형 입력받은 만큼 출력

- 3. 마름모 출력


- 4. 마름모 입력받은만큼 출력

홀수 입력 시 알아서 처리였는데, +1을 더한 홀수만큼 나오게 구현하였다.



- 5. 출력할 구구단 정해서 출력하기.



- 6. 출력할 단을 정해 출력하기



- 7. 특정 단을 제외하고 출력하기.

8단을 제외한 출력 결과이다.



- 8. 3단씩 출력하기



- 9. 중복 없앤 구구단 출력하기.


728x90
반응형

'엘키스공간 > 엘키스코딩공방' 카테고리의 다른 글

큐로 메시지 큐 구현하기  (0) 2015.06.10
큐 구현하기  (0) 2015.06.10
[코딩] 스택 구현하기  (1) 2015.06.10
가위바위보 게임 만들기  (0) 2015.03.24
베스킨라빈스 31 게임  (0) 2015.03.24
발전하는 성적표 관리 시스템  (0) 2015.03.24
문자열 함수 구현해보기  (2) 2015.03.10