Unit 29. do while 반복문으로 최소 한 번은 실행하기
while 반복문은 조건식이 만족하지 않으면 반복을 하지 않고 넘어간다. do while 반복문은 조건이 만족하지 않아도 코드를 최소 한 번은 실행한다.
do while 반복문은 초기식이 반복문 바깥에 있고, do로 시작하여 중괄호 안에 반복할 코드와 변화식이 들어가고, 중괄호가 끝나는 부분에 조건식을 지정한다.
초기식
do
{
반복할 코드
변화식
} while (조건식);
초기식의 값과는 상관없이 중괄호 안의 코드와 변화식을 한번 실행하고, 조건식을 판단하여 참이면 코드를 계속 반복하고, 거짓이면 반복문을 끝낸 뒤 다음 코드를 실행한다.
29.1 do while 반복문 사용하기
#include <stdio.h>
int main()
{
int i = 0;
do
{
printf("Hello, world! %d\n", i);
i++;
} while (i < 100);
return 0;
}
반복문에 사용할 변수를 선언한 뒤 0으로 초기화 한다. do 아래에 중괄호를 열고, 반복할 코드와 변화식을 넣는다. 중괄호를 닫은 뒤 while에 조건식을 지정하고 세미클론을 붙여준다.
do 다음에 오는 코드는 조건식과 관계 없이 무조건 한 번은 실행한다. 따라서 printf가 실행되고 i++가 실행된다. 이후 조건식에서 i가 100보다 작은지 검사한다. 100보다 작으면 계속 반복하고, 100이되면 i < 100은 거짓이 되므로 반복문이 종료된다.
중괄호 안에는 반드시 변화식이 있어야 한다. 변화식이 없으면 무한루프 현상이 발생하므로 주의해야 한다.
29.2 초깃값을 1부터 시작하기
#include <stdio.h>
int main()
{
int i = 1;
do
{
printf("Hello, world! %d\n", i);
i++;
} while (i <= 100);
return 0;
}
i를 1로 초기화 했기 때문에 조건식을 i <= 100으로 지정하여 100번 반복하도록 하였다. i가 101이 되면 i<=100이 거짓이 되므로 반복문이 종료된다.
29.3 초깃값을 감소시키기
#include <stdio.h>
int main()
{
int i = 100;
do
{
printf("Hello, world! %d\n", i);
i--;
} while (i > 0);
return 0;
}
i를 100으로 초기화하고, i--로 i를 1씩 감소시키면서 i > 0으로 100번 반복시켰다. i가 0 이되면 반복문을 끝낸다.
29.4 입력한 횟수대로 반복하기
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int count;
scanf("%d", &count);
int i = 0;
do
{
printf("Hello, world! %d\n", i);
i++;
} while (i < count);
return 0;
}
scanf 함수로 입력값을 받아 count변수에 저장하여 조건식에서 i < count로 count의 값만큼 반복하도록 하였다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int count;
scanf("%d", &count);
do
{
printf("Hello, world! %d\n", count);
count--;
} while (count > 0);
return 0;
}
위 코드와 같이 입력 받은 값을 초기식으로 사용할 수 도 있다. 변화식을 count--로 하여 반복할 때마다 count값을 1씩 감소시키고, 조건식에서 count 가 0보다 클때까지 반복하여 count에 들어있는 값만큼 반복하였다.
29.5 반복 횟수가 정해지지 않은 경우
while 반복문처럼 do while 반복문도 반복 횟수가 정해지지 않았을 경우에 주로 사용한다. do while반복문은 최소 한번은 반드시 실행한다는 점에서 차이가 있다.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
srand(time(NULL));
int i = 0;
do
{
i = rand() % 10;
printf("%d\n", i);
} while (i != 3);
return 0;
}
위 코드는 0~9까지 무작위로 생성되는 숫자중 조건식 i != 3에 따라 3이 생성되면 반복을 종료하고 3이 생성되지 않으면 계속 반복하는 코드이다.
29.6 do while 반복문으로 무한루프 만들기
#include <stdio.h>
int main()
{
do
{
printf("Hello, world!\n");
} while (1);
return 0;
}
do 다음에 반복할 코드를 작성하고 조건식 부분에 1을 지정하면 된다. 조건식이 없으므로 변화식도 필요 없다.
stdbool.h 헤더를 사용하고, 조건식에 true를 지정해도 된다.
29.7 코드를 한 번만 실행하기
#include <stdio.h>
int main()
{
do
{
printf("Hello, world!\n");
} while (0);
return 0;
}
조건식에 0을 지정하면 do부분의 코드가 한 번만 실행된다. 조건식이 거짓이므로 반복을 하지 않고 끝내기 때문이다.
stdbool.h 헤더를 사용하고, 조건식에 false를 지정해도 된다.
29.8 퀴즈
정답은 b, c, e이다.
정답은 c 이다.
정답은 c이다.
29.9 연습문제 : do while 반복문 사용하기
정답은 c1 != 'q' 이다. 입력값이 q가 아니면 코드를 계속 반복한다.
29.10 심사문제 : 숫자의 합 구하기
정답은 다음 코드와 같다.
sum += i;
i++;
Unit 30. break, continue로 반복문 제어하기
break는 for, while, do while, switch 문법에서 제어 흐름을 벗어나기 위해 사용한다. switch의 경우로 예를 들면 다음과 같다.
continue는 break와 비슷하지만 break는 제어 흐름을 중단하고 빠져나오지만, continue는 제어 흐름을 유지한 상태에서 코드의 실행만 건너뛰는 역할을 한다.
30.1 break로 반복문 끝내기
#include <stdio.h>
int main()
{
int num1 = 0;
while (1)
{
num1++;
printf("%d\n", num1);
if (num1 == 100)
break;
}
return 0;
}
while에 1을 지정하여 무한루프를 만들고 반복하는 코드에서 num1의 값을 1씩 증가시킨후 num1의 값을 출력하고, if를 이용하여 num1 이 100이 되면 break로 반복문을 종료시킨다. break를 실행하게 되면 반복문이 바로 종료된다.
다음과 같이 for문에서도 반복문의 동작은 같다.
#include <stdio.h>
int main()
{
int num1 = 0;
for (;;)
{
num1++;
printf("%d\n", num1);
if (num1 == 100)
break;
}
return 0;
}
반복 횟수가 정해져 있어도 break를 사용하면 반복문은 바로 끝난다.
30.2 continue로 코드 실행 건너뛰기
#include <stdio.h>
int main()
{
for (int i = 1; i <= 100; i++)
{
if (i % 2 != 0)
continue;
printf("%d\n", i);
}
return 0;
}
1 부터 100까지 반복하며 if를 사용하여 i가 홀수면 continue를 실행해서 아래 코드를 건너뛰고 다음 반복을 시작한다.
while에서도 continue의 동작은 같다.
#include <stdio.h>
int main()
{
int i = 1;
while (i <= 100)
{
i++;
if (i % 2 != 0)
continue;
printf("%d\n", i);
}
return 0;
}
무한 루프에서 사용하면 위 코드의 경우 짝수만 계속 출력되고, 반복문은 끝나지 않는다.
30.3 입력한 횟수대로 반복하기
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int count;
scanf("%d", &count);
int i = 1;
while (1)
{
printf("%d\n", i);
if (i == count)
break;
i++;
}
return 0;
}
무한 루프인 반복문 상태에서 i의 값을 출력하고, i의 값이 입력한 값과 같으면 반복문을 종료하고, 다르면 i의 값을 1씩 증가시킨다.
30.4 입력한 숫자까지 짝수만 출력하기
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int count;
scanf("%d", &count);
for (int i = 1; i <= count; i++)
{
if (i % 2 != 0)
continue;
printf("%d\n", i);
}
return 0;
}
입력 받은 값 만큼 반복하고, 반복문 안에서 i 가 홀수면 continue를 실행하여 다음 코드를 실행하지 않고 건너뛰고, i가 짝수면 printf로 숫자를 출력한다.
30.5 퀴즈
정답은 a,d이다.
정답은 a이다.
정답은 b이다.
30.6 연습문제 : 3으로 끝나는 숫자만 출력하기
정답은 다음 코드와 같다.
if(i%10 != 3)
{
i++;
continue;
}
if(i > 103)
break;
3으로 끝나는 숫자는 10으로 나눴을 때 나머지가 3이다. 따라서 나머지가 3이 아니면 아래 코드를 건너뛴다.
30.7 심사문제 : 두 수 사이의 숫자중 7로 끝나지 않는 숫자 출력하기
정답은 다음 코드와 같다.
if(i%10 == 7)
{
i++;
continue;
}
if(i > num2)
break;
i를 10으로 나눴을때 나머지가 7이면 아래 코드를 건너뛰고, i가 num2 보다 커지면 반복문을 종료한다.
Unit 31. 계단식으로 별 출력하기
31.1 중첩 루프 사용하기
콘솔은 2차원 평면이기 때문에 별을 일정한 모양으로 출력하려면 반복문을 두 개 사용하는 것이 편하다.
반복문 안에 반복문이 들어가는 구조를 중첩 루프라 한다. 반복문의 루프 인덱스 변수는 index의 첫 글자를 따서 i를 사용하고 반복문 안에 반복문이 들어갈 때는 i, j, k 처럼 i 부터 알파벳 순서대로 사용한다. 2중 for문은 다음과 같은 구조이다.
#include <stdio.h>
int main()
{
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
printf("j:%d ", j);
}
printf("i:%d\\n", i);
printf("\n");
}
return 0;
}
바깥쪽 루프에서 시작하여 안쪽 루프가 가로 방향으로 j 값을 출력하고, 가로 방향 출력이 끝나면 바깥쪽 루프에서 i값과 개행문자를 출력하여 세로 방향을 처리한다.
중첩루프는 2차원 평면을 다룰 수 있으므로 이미지 처리, 영상처리 , 좌표계 처리 등에 사용된다.
31.2 사각형으로 별 출력하기
#include <stdio.h>
int main()
{
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
printf("*");
}
printf("\n");
}
return 0;
}
안쪽의 반복문에서 printf로 별을 출력하면 가로 방향으로 별이 하나씩 출력된다. printf에서 제어문자를 사용하지 않으면 줄바꿈을 하지 않는다. 바깥쪽 반복문에서 안쪽 반복문이 끝나면 제어문자 \n을 출력함으로 줄을 바꾸고 다시 안쪽 반복문으로 별을 출력하여 사각형을 그릴 수 있다.
#include <stdio.h>
int main()
{
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 7; j++)
{
printf("*");
}
printf("\n");
}
return 0;
}
위와 같이 코드를 수정하면 안쪽 반복문은 3번 반복하고, 바깥쪽 반복문은 7번 반복하므로 가로 방향으로 별을 7개 그리고, 세로 방향으로 3줄을 출력한다.
31.3 계단식으로 별 출력하기
위와 같이 계단식으로 별을 출력하려면 별을 출력하지 않는 부분이 있으므로 조건문으로 출력을 제어해야 한다.
첫번째 줄에는 별이 한개, 두번째 줄에는 별이 두 개 와 같은 규칙으로 줄의 위치와 별의 개수가 동일하다. 따라서 가로 줄을 출력할 때 세로 줄의 크기 만큼 반복하여 출력하도록 하면 된다. 이 조건을 고려하여 소스코드를 작성하면 다음과 같다.
#include <stdio.h>
int main()
{
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
if (j <= i)
printf("*");
}
printf("\n");
}
return 0;
}
안쪽 반복문에서 별을 줄 위치 숫자 만큼 출력하기 위해 조건문으로 if(j <= i)를 사용하였다.
31.4 대각선으로 별 출력하기
별을 대각선으로 출력하는 코드는 다음과 같다.
#include <stdio.h>
int main()
{
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
if (j == i)
printf("*");
else
printf(" ");
}
printf("\n");
}
return 0;
}
가로 방향 변수와 세로 방향 변수가 같을 경우 별을 출력하고 같지 않으면 공백을 출력하여 대각선으로 별이 출력되도록 하였다. 콘솔에서는 문자 출력을 하지 않으면 항상 가장 왼쪽에서 시작하므로 별을 출력하지 않는 부분은 공백을 출력해야 별이 원하는 위치에 오게 된다.
31.5 퀴즈
정답은 a,d,e 이다.
정답은 b이다.
31.6 연습문제 : 역삼각형 모양으로 별 출력하기
정답은 다음 코드와 같다.
if(j < i)
{
printf(" ");
}
else
{
printf("*");
}
첫줄에는 별 5개로 시작하여 하나씩 줄어들기 때문에 i가 늘어날 때 마다 출력되는 공백의 수가 하나씩 늘어나서 역삼각형 모양의 삼각형이 출력된다.
31.7 심사문제 : 산 모양으로 별 출력하기
정답은 다음 코드와 같다.
#include <stdio.h>
int main()
{
int height;
scanf("%d", &height);
for (int i = 0; i < height; i++)
{
for (int j = height - 1; j >= 0; j--)
{
if (j > i)
printf(" ");
else
printf("*");
}
for (int j = 0; j < height - 1; j++)
{
if (j < i)
printf("*");
}
printf("\n");
}
return 0;
}
입력받은 높이로 세로 방향 반복문을 만들고, 가로 방향은 출력할 값들을 반으로 나눠서 반복문을 두개로 처리한다. 첫번째 안쪽 반복문에서는 j의 초기값을 입력값-1로 하고, j를 1씩 감소시키면서 j가 세로줄 위치보다 크면 공백을 출력하고, 아니면 별을출력하여 별이 다음과 같은 모양인 삼각형을 출력한다.
두번째 안쪽 반복문은 반대로 j가 세로줄 위치보다 작으면 별을 출력하여 다음과 같은 형태의 삼각형을 출력하여 위의 삼각형과 붙여지도록 한다.
삼각형이 붙여지는 것은 전체가 붙여지는 것이 아니라 한 줄씩 붙여지는 것이고, 안쪽의 두 반복문이 마치면 개행문자를 출력하므로 줄을 구분한다.
Unit 32. goto로 프로그램의 흐름을 원하는대로 바꾸기
goto의 동작은 다음과 같이 goto로 레이블을 지정하고 코드 안에서 지정한 레이블이 있는 위치로 코드를 건너뛴다.
goto를 남발하는 것은 코드의 가독성도 떨어뜨리고 유지보수를 힘들게 하여 좋지 않지만, goto를 적절히 활용하면 중복되는 코드를 없앨 수 있고, 코드를 좀 더 간결하게 만들 수 있다. 특히 에러처리에 유용하기 때문에 리눅스 커널에서 자주 사용된다.
32.1 goto와 레이블 사용하기
goto는 레이블을 지정하여 사용한다. 레이블은 :(클론)을 붙이고, 레이블 이름을 짓는 규칙은 변수와 같다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int num1;
scanf("%d", &num1);
if (num1 == 1)
goto ONE;
else if (num1 == 2)
goto TWO;
else
goto EXIT;
ONE:
printf("1입니다.\n");
goto EXIT;
TWO:
printf("2입니다.\n");
goto EXIT;
EXIT:
return 0;
}
goto에 레이블을 지정하면 중간에 있는 코드는 무시하고 레이블로 즉시 이동한다. 위 코드에서는 레이블로 이동하고 다시 goto로 EXIT레이블로 이동하여 프로그램을 끝낸다. 위 코드를 if 문으로 표현하면 다음과 같다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int num1;
scanf("%d", &num1);
if (num1 == 1)
printf("1입니다.\n");
else if (num1 == 2)
printf("2입니다.\n");
return 0;
}
if문을 이용한 코드가 더 간결하기 때문에 이와 같은 경우 goto문을 쓰는 것은 좋지않다.
32.2 중첩 루프 빠져나오기
#include <stdio.h>
#include <stdbool.h>
int main()
{
int num1 = 0;
bool exitOuterLoop = false;
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
if (num1 == 20)
{
exitOuterLoop = true;
break;
}
num1++;
}
if (exitOuterLoop == true)
break;
}
printf("%d\n", num1);
return 0;
}
위 코드는 num1이 20이 되면 반복문을 끝내는데 num1은 안쪽 반복문에서 증가시키고 있다.
break는 현재 루프만 끝내기 때문에 안쪽 루프에서 break를 사용하면 안쪽 루프만 끝내고, 반대쪽 루프는 계속 반복한다. 그렇기 때문에 바깥쪽 루프도 끝내려면 break를 두 번 실행해야 한다.
이럴 때는 다음과 같이 goto문을 사용하여 간단하게 루프를 빠져나올 수 있다.
#include <stdio.h>
int main()
{
int num1 = 0;
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
if (num1 == 20)
goto EXIT;
num1++;
}
}
EXIT:
printf("%d\n", num1);
return 0;
}
위 코드는 num1이 20이 되면 EXIT레이블로 즉시 이동하여 반복문을 한 번에 빠져나온다.
이와 같이 goto는 다중 루프를 빠져나올 때 유용하다.
32.3 goto와 에러처리 패턴
다음은 가상의 통지서를 집집마다 방문하여 자가주택을 소유한 30대 남자에게 전달하는 코드이다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int gender; // 성별: 남자 1, 여자 2
int age; // 나이
int isOwner; // 주택 소유 여부: 자가 1, 전월세 0
scanf("%d %d %d", &gender, &age, &isOwner);
printf("안녕하세요.\n");
printf("문을 연다.\n");
if (gender == 2) // 여자
{
printf("안녕히계세요.\n");
printf("문을 닫는다.\n");
return 0;
}
if (age < 30) // 30세 미만
{
printf("안녕히계세요.\n");
printf("문을 닫는다.\n");
return 0;
}
if (isOwner == 0) // 전월세
{
printf("안녕히계세요.\n");
printf("문을 닫는다.\n");
return 0;
}
return 0;
}
문을 열고 자가주택을 소유한 30대 남자가 아니라면 문을 닫고 나온다. 위와 같은 경우 주어진 조건에 해당하지 않으면 인사를 하고 문을 닫는 코드가 경우마다 중복되고 있다. 만약 조건이 더 늘어나면 중복되는 코드도 더 많아지게 된다.
이때 다음과 같이 goto문을 사용하면 에러 상황때 실행하는 중복코드를 하나로 모을 수 있다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int gender; // 성별: 남자 1, 여자 2
int age; // 나이
int isOwner; // 주택 소유 여부: 자가 1, 전월세 0
scanf("%d %d %d", &gender, &age, &isOwner);
printf("안녕하세요.\n");
printf("문을 연다.\n");
if (gender == 2)
goto EXIT;
if (age < 30)
goto EXIT;
if (isOwner == 0)
goto EXIT;
EXIT:
printf("안녕히계세요.\n");
printf("문을 닫는다.\n");
return 0;
}
에러가 발생하면 EXIT로 이동시켜 에러 코드를 처리하게 한다.
위와 같이 종료 직전에 항상 실행해야 하는 에러 코드들을 한 곳에 모아두고 goto를 사용하면 중복 코드를 없앨 수 있고, 코드의 의도도 명확해진다.
32.4 퀴즈
정답은 d,e 이다. 변수 생성 규칙과 동일하다.
정답은 b, d, e이다.
32.5 연습문제 : switch에서 반복문 빠져나오기
2번에 레이블을 만들고 1번에 goto문으로 바로 2번으로 이동하도록 하여 정답은 다음과 같다.
goto EXIT;
EXIT:
32.6 심사문제 : 중첩 루프 빠져나오기
200과 300이 출력되므로 EXIT2 레이블로 이동해야 하므로 EXIT2;가 답이다.
Unit 33. FizzBuzz
FizzBuzz는 간단한 프로그래밍 문제로 규칙은 다음과 같다.
- 1에서 100까지 출력
- 3의 배수는 Fizz 출력
- 5의 배수는 Buzz 출력
- 3과 5의 공배수는 FizzBuzz 출력
33.1 1부터 100까지 숫자 출력하기
#include <stdio.h>
int main()
{
for (int i = 1; i <= 100; i++)
{
printf("%d\n", i);
}
return 0;
}
위 코드는 for 반복문을 이용하여 1부터 100까지 숫자를 출력하는 코드이다.
33.2 3의 배수일때와 5의 배수일 때 처리하기
다음은 1부터 100까지 숫자를 출력하면서 3의 배수일 때는 Fizz, 5의 배수 일때는 Buzz를 출력하는 코드이다.
#include <stdio.h>
int main()
{
for (int i = 1; i <= 100; i++)
{
if (i % 3 == 0)
printf("Fizz\n");
else if (i % 5 == 0)
printf("Buzz\n");
else
printf("%d\n", i);
}
return 0;
}
i를 3으로 나눴을 때 나머지가 0이면 3의 배수이기 때문에 Fizz를 출력하고, 5로 나눴을 때 나머지가 0이면 5의 배수 이므로 Buzz를 출력한다. 아무것도 해당하지 않으면 숫자를 출력한다.
33.3 3과 5의 공배수 처리하기
3과 5의 공배수를 처리할 때는 다음과 같이 논리연산자 &&를 사용하면 된다.
#include <stdio.h>
int main()
{
for (int i = 1; i <= 100; i++)
{
if(i % 3 == 0 && i % 5 == 0)
printf("FizzBuzz\n");
else if (i % 3 == 0)
printf("Fizz\n");
else if (i % 5 == 0)
printf("Buzz\n");
else
printf("%d\n", i);
}
return 0;
}
i를 3으로 나눴을 때 나머자 0 이고, 5로 나눴을 때도 나머지가 0이면 3과 5의 공배수 이므로 FizzBuzz를 출력한다.
3의나 5의 배수인지를 먼저 검사하면 그 조건문에서 처리하고 아래 조건식은 검사하지 않으므로 공배수를 처리하는 조건식은 가장 위인 if에 들어가야 한다. 공배수를 먼저 검사하고 3의 배수인지, 5의 배수인지를 검사해야 한다.
33.4 논리연산자를 사용하지 않고 3과 5의 공배수 처리하기
3 과 5의 최소공배수는 15이므로 15로 나눴을 때 나머지가 0이면 3 과 5의 공배수이다.
#include <stdio.h>
int main()
{
for (int i = 1; i <= 100; i++)
{
if(i % 15 == 0)
printf("FizzBuzz\n");
else if (i % 3 == 0)
printf("Fizz\n");
else if (i % 5 == 0)
printf("Buzz\n");
else
printf("%d\n", i);
}
return 0;
}
15가 3과 5의 최소공배수라는 것은 코드를 읽는 사람이 값 속의 뜻을 알아내야 하므로 실무에서는 i % 3 == 0 && i % 5 == 0 처럼 계산식과 논리연산자를 사용하여 뜻을 명확하게 드러내는 것이 좋다.
33.5 코드 단축하기
다음과 같이 삼항연산자를 사용하여 코드를 매우 단축할 수 있다.
#include <stdio.h>
int main()
{
for (int i = 0; ++i <= 100;)
printf(i % 3 ? i % 5 ? "%d\n" : "Buzz\n" : i % 5 ? "Fizz\n" : "FizzBuzz\n", i);
return 0;
}
반복문의 조건식 안에 변화식도 함께 작성하였다. 반복할 때 마다 ++를 수행하여 i의 값을 1씩 증가시킨 후 100보다 작거나 같은지 검사한다.
삼항연산자를 사용하여 각 조건들을 모두 처리하여 출력한다.
i % 3이 0이 아니면 3의 배수가 아니고, i % 5로 간다. i % 5가 0이 아니면 5의 배수도 아니므로 %d로 숫자를 출력한다.
i % 5 가 0 이면 Buzz를 출력한다.
i % 3이 0이면 다시 i % 5를 계산하여 0이 아닌 값이 나오면 Fizz를 출력하고 0이 나오면 3과 5의 공배수 이므로 FizzBuzz를 출력한다.
33.6 퀴즈
정답은 c 이다.
정답은 c, e이다.
33.7 연습문제 : 2와 7의 배수, 공배수 처리하기
빈 칸에 들어갈 조건식은 다음과 같다.
i % 2 == 0 && i % 7 == 0
i % 2 == 0
i % 7 == 0
33.8 심사문제
정답은 다음 코드와 같다.
#include <stdio.h>
int main()
{
int start, stop;
scanf("%d %d", &start, &stop);
for(int i = start; i <= stop; i++)
{
if(i % 5 == 0 && i % 11 == 0)
{
printf("FizzBuzz\n");
}
else if(i % 5 == 0)
{
printf("Fizz\n");
}
else if(i % 11 == 0)
{
printf("Buzz\n");
}
else
{
printf("%d\n", i);
}
}
return 0;
}
'Project H4C Study Group' 카테고리의 다른 글
[Project H4C][C언어] 코드업 기초 100제 1076번 (0) | 2021.02.26 |
---|---|
[Project H4C][C언어] 코드업 기초 100제 후기 (0) | 2021.02.26 |
[Project H4C] C언어 코딩도장(4) (0) | 2021.02.19 |
[Project H4C] C언어 코딩도장(3) (0) | 2021.02.18 |
[Project H4C] C언어 코딩도장(2) (0) | 2021.02.17 |