반복문
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 |