반복되는 코드를 직접 작성하는 것은 불가능에 가깝고 가능하더라도 복잡한 코드가 될 것입니다. 그렇기에 프로그래밍 언어에서는 반복문이라는 것을 통해 반복되는 코드를 간단하게 작성할 수 있도록 도와줍니다.
반복문의 시작에 앞서 값에 따라 원하는 코드가 실행되는 조건문에 대해 정리하고 반복문에 대해 정리하겠습니다.
switch 조건문
if와 else는 조건식이 참 또는 거짓일 때 처리가 가능하였지만, 두 가지 조건 말고 다양한 조건일 때 처리할 수 있는 조건문이 switch조건문입니다. switch 분기문은 조건이 많을 때 유용하며, 기본형식은 다음과 같습니다.
switch(판별되는 값, 변수)
{
case 1:
코드;
break;
case 2: // 값이 2와 3일 때의 코드 실행 부분이 같을 때 처리방법
case 3:
코드;
break;
default:
코드;
break;
}
switch는 case와 default를 함께 사용하며 1 대신 '문자'를 비교할 수 있습니다. default는 생략을 할 수 있으며 case에서 break를 사용하지 않으면 해당 값부터 순서대로 지나가며 코드가 실행될 것입니다.
switch문 case에 들어가는 코드가 길어지면 변수를 선언하기도 하는데 변수를 선언하기 위해서는 case 코드 부분을 중괄호({})로 묶어 사용할 수 있으며 case안에서만 사용이 가능한 변수가 만들어집니다.
switch는 정수 자료형만 판별할 수 있습니다.
반복문의 사용
반복문에는 for문과 while문이 존재합니다. for문은 반복 횟수가 정해져 있을 때 주로 사용을 하지만 무한반복을 위한 사용도 가능합니다.
for (초기식; 조건식; 변화식) // loop 선언문
{
반복 코드; // loop 본체
}
for 반복문은 이처럼 이루어져 있으며 초기식을 생략할 수 있는데 이는 초기값이 미리 지정되어 있을 때 가능합니다. 조건식과 변화식을 미리 지정한 값을 기준으로 만들면 초기식을 생략할 수 있습니다.
또한, 변수를 두 개 사용할 수 있습니다. 초기식, 초기식과 변화식, 변화식처럼 두 번씩 지정하여 사용할 수 있으며, 초기식, 조건식, 변화식을 모두 생략하여 무한반복을 실행할 수 있습니다.
while반복문은 반복 횟수가 정해지지 않을 경우 또는 논리 조건에 따라 반복 여부를 결정할 때 주로 사용됩니다.
초기식;
while (조건식)
{
반복 코드;
변화식;
}
예시로 무작위의 수가 나올 때 특정 수가 나와야 반복이 끝나는 경우같이 반복 횟수는 정해져 있지 않을 때 사용이 됩니다.
예시처럼 무작위 수를 추출하기 위해서는 rand함수를 이용해야 하는데 <stdlib.h> 헤더 파일과 시간 함수인 <time.h> 헤더 파일을 사용하고 srand(time(NULL));을 넣어 매번 랜덤 값을 생성하도록 만듭니다.
while 안에 변화식으로 rand() 값으로 랜덤 값이 계속 출력되도록 하고 10 미만의 수를 출력하기 위해 랜덤 값에서 10 나머지 연산을 하여 변화식으로 만들면 됩니다.
여기서 while 반복문의 무한루프로 만들기 위해서는 조건식에 1을 넣으면 되고 true로 표시하기 위해서는 bool헤더를 사용하면 됩니다.
while반복문과 비슷한데 조금 다른 do while반복문도 있습니다. do while반복문은 반복문의 코드를 최소 1번 실행되도록 만드는 것입니다.
초기식;
do
{
반복 코드;
변화식;
} while (조건식);
do while 반복문은 조건식이 마지막에 위치해 코드를 한번 실행한 후 조건을 확인하여 참이면 반복하는 형식입니다. 무한 루프 방법도 while과 같습니다.
반복문의 제어
break와 continue로 반복문에서 흐름을 제어할 수 있습니다. break는 무한반복 시 특정 조건이 되면 종료되는 코드에 자주 사용이 됩니다. switch조건문의 예시로 들었던 것이며 break를 만나면 제어 흐름을 통해 반복문을 빠져나가게 됩니다.
continue는 제어 흐름을 유지한 채 코드를 건너뛸 때 사용됩니다. 밑에 코드를 실행하지 않고 반복문의 처음으로 돌아가 반복합니다.
goto로 프로그램의 흐름을 변화시킬 수 있습니다. 중간의 코드는 무시하고 원하는 부분으로 건너뛰어 사용되는 제어문입니다.
코드
goto 레이블; //레이블로 이동
코드
코드
레이블: //레이블
코드
위의 형식이며 goto를 사용할 때는 스파게티 코드가 되지 않도록 주의하며 사용하여야 합니다. 너무 많이 사용하면 가독성과 유지보수가 어려워집니다.
goto는 중첩 루프를 빠져나오거나 에러 처리 패턴이 비슷할 때 사용하는 것이 효율적입니다.
중첩 loop
중첩 반복을 통해 바깥의 반복이 가로를 출력하고 안쪽 반복이 세로를 출력할 때 중첩하여 반복하게 합니다.
for (초기식; 조건식; 변화식)
{
for (초기식; 조건식; 변화식)
{
가로 처리 코드;
}
세로 코드를 위한 줄바꿈;
}
반복문을 통해 반복문 기초인 FizzBuzz문제를 풀어볼 수 있습니다. 1에서 100까지를 출력하고 3의 배수는 Fizz를 5의 배수는 Buzz를 출력하고, 3과 5의 공배수는 FizzBuzz를 출력하도록 하는 문제입니다.
문제의 코드는 다음과 같습니다.
#define _CRT_SECURE_NO_WARNINGS
#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);
}
}
지금까지 정리한 C언어와 파이썬이 달랐던 점은 우선 이 파트에서 for반복문의 조건들이 변수에 지정되며 반복되는 것과 달리 증가되면서 조건까지 반복되는 부분이 차이가 있었습니다.
C언어에서는 세미콜론과 같이 문장의 끝마다 있었던 것과는 다르게 파이썬에서는 한 줄 코드가 아니라면 자동으로 문장의 끝을 확인하여 처리해주었습니다.
제일 차이점이 나타난 것은 간결한 코드와 인터프리터 방식이라 생각합니다.
이상으로 C언어의 간단한 문제들을 살펴보았습니다. 감사합니다!
'TeamH4C_ProjectH4C > 프로그래밍 언어' 카테고리의 다른 글
[TeamH4C_C언어] 포인터의 활용 (0) | 2021.03.06 |
---|---|
[TeamH4C_C언어] 다시 정리하는 CodeUp (0) | 2021.02.26 |
[TeamH4C_C언어] 언어의 계산 (0) | 2021.02.21 |
[TeamH4C_C언어] 자료형들의 사용 (0) | 2021.02.21 |
[TeamH4C_C언어] 기본 문법 (0) | 2021.02.21 |