본문 바로가기
Language & Framework & GIT/C

[씨앤씨뿔] C/ 제어문

by veganwithbacon 2023. 3. 28.
반응형

씨뿔 오지게 많다..

양이 뭐가 이렇게 많냐;


제어문이 뭘까? 제어문은 프로그램의 수행 순서를 제어하기 위한 목적의 문장이다.

제어문의 종류에는 조건문, 반복문, 분기문, 반기문이 있다.

조건문은 조건에 따라 문장을 선택적 수행,

반복문은 조건에 따라 문장을 반복해서 수행,

분기문은 실행의 흐름을 변경하기 위함

 

제어문의 종류

제어문의 종류 C 구문 설명
조건문 if 조건식이 참이면 문장을 수행
switch 정수식의 값에 따라 수행할 문장 선택
반복문 for 조건식이 참인 동안 문장을 반복 수행
while
do while
분기문 break switch나 반복문을 빠져나간다
continue 반복문의 시작으로 돌아간다
goto 지정된 레이블의 문장으로 이동한다
return 함수를 호출한 곳으로 돌아간다

  조건문

  if문

: () 안에 있는 조건식이 참이면 지정된 문장을 수행하고, 거짓이면 문장을 수행하지 않는다.

 

{ }으로 묶인 문장을 복합문(compound state ment) 또는 블록(block)이라고 한다.

C언어에서의 if문은 타 랭귀지와의 차별점을 두는 것이 없기 땨문에 if문 역시 기존 java, python을 접해본 사람이라면 차이가 없다. 

  if else

조건식이 참이면 문장 1을 수행하고, 거짓이면 문장 2를 수행한다.

 

  중첩 if

if문 안에 다른 if문이 포함된 것을 중첩된 if(nested if)라고 한다.

 

  else if

if문에서 선택지가 else만이 아닌 else if들의 열거 후에 else가 나온다고 보면 된다.

if 외에 선택지가 else가 아닌 else if들이 생겼다고 인지하자.

else if는 if 다음에 첫 조건의 참거짓의 판별을 통해 조건이 나뉜다.

 

  다중 if

서로 독립적인 조건을 여러 개 비교하는 경우, 즉 전혀 관련 없는 것들을 열거를 통해 비교할 수 있다는 말이다.


  switch문

: if문이 참 거짓에 따라 둘 중 하나로 분기됐다면, switch문은 정수식의 값에 따라 여러 가지 경우 중 하나로 분기한다.

 

switch문은 case, break, default 키워드를 함께 사용한다.

switch의 ()안에는 정수식을 쓴다, 그 후 {} 안에 하나 이상의 case문을 작성하고, case문마다 처리할 문장을 하나이상 써준 뒤에, case문을 전부 썼다면 break문을 써준다.

 

switch문의 형식

더보기

switch(정수식){

case 정수값 1: 

         문장1:

         break;

case 정수값 2 :

         문장 2:

         break;

deault :

         문장 n;

         break;

break문을 통해 반복문을 빠져나가기 때문에 case가 끝난 후에 다음 조건문을 진행시키고 싶지 않다면 break를 반드시 써야 한다.

 

switch문을 쓰면, else if문과 바꿔 쓸 수 있다. 

 

switch문에서 break을 반드시 써야 한다고 한 이유는, switch문에서 break가 생략이 가능하기 때문이다.

그러나 break를 생략하면 선택된 case문을 모두 수행하기 때문에 break를 만날 때까지 case의 모든 문장들을 수행한다.

case문의 마지막에 보통 default를 적는데, 이 경우에는 break를 안 써도 case가 더 이상 존재하기 때문에 switch문을 나가지만, default가 switch문의 마지막이 아닌 처음에 있을 경우 default만 적고 다음 case문이 존재한다면 다음 case문이 수행되며 break를 만날 때까지 수행하게 된다.

 

명심해야 할 점은 switch의 () 안에는 정수식만 사용할 수 있다.

정수가 들어있는 변수라면 정수와 같기 때문에, 사용가능하다.


  반복문

: 조건이 만족하는 동안 주어진 문장을 반복해서 수행하는 기능

 

C의 반복문에는 for, while, do while이 있으며, 반복문을 이용해 원하는 만큼 반복해 계산하도록 할 수 있다.  

 

  for

정해진 횟수만큼 반복 수행할 문장이 있을 때 주로 사용되며, 반복문 중에 가장 정형화되어 있다.

 

for문 형식

더보기

for(초기식; 조건식; 증감식)

    {

      반복할 문장;

                           }

 

 

ex

for(i=0;i<=9;i++)

    printf("%d", i);

 

for문의 조건식을 생략된 경우를 무한 루프(infinite loop)라고 한다.

 

초기식, 조건식, 증감식이 모두 생략할 수도 있으나 생략하더라도 세미콜론은 반드시 써주어야 한다.

처리할 내용 없이 세미콜론(;)만으로 이루어진 문장을 널 문장(null statement)라고 한다.

 

  중첩된 for

for문 내에 for문을 사용하는 것을 중첩 for문이라고 한다.

 

scanf의 형식 문자열에서 빈칸을 지정하면 이전 입력에서 입력 버퍼에 남은 공백 문자('n' , '  ', '\t')를 무시한다. 

정수, 실수 입력에서는 scanf내에 빈칸이 없어도 되지만, 문자 입력에서는 빈칸이 있어야 공백 문자를 무시한다.

ex) scanf("%d%d", &width, &height);

      scanf(" %c", &ch);


  while

: 특정 횟수만큼 반복 수행되는 for문에 비해 while문은 다양한 형태의 반복문을 처리가능하다.

 

while문의 형식

더보기

while(조건식)    

         반복할 문장;

 

ex)

i=0;

while(i < 10)

      printf("%d ", i++);

보통 while만을 쓰기보다는 while과 다른 반복문들을 섞어서 쓰기 때문에 반복문을 사용함에 있어서 다방면으로 익숙해져야 할 필요가 있다.


  do while

do while문은 일단 반복할 문장을 한 번 수행한 뒤에 반복문의 끝 부분에서 조건식을 검사해 루프를 탈출할지 결정한다.

 

do while문 형식

더보기

do 

   반복문;

while(조건식);

 

ex)

i = 0;

do 

          printf("%d ", i++);

while (i <10);

 

do while, while, for문을 일반적으로 비교해서 사용하는데,

반복문의 끝 부분에 반복문의 탈출 여부를 결정해야 하는 프로그램에서는 while보다는 do while을 사용하는 것이 자연스럽다. 

 

for문에서는 조건식을 생략해서 무한루프를 생성했다면, while문에서는 while(1)로 무한 루프를 만들고 루프 내에서 특정 시점에 루프 탈출 조건을 검사해 break로 루프를 탈출한다. 


  무한루프

for에서는 무한 루프를 만들기 위해서 조건식을 생략한다.

먼저 언급했던 것처럼 while문에서는 조건식을 생략할 수 없는 대신 항상 참인 값을 조건식에 써준다.

무한 루프를 수행 중인 프로그램을 강제 종료하려면 Ctrl + C를 입력해서 강제 종료한다.


  분기문

분기문을 이용해 문장의 실행 순서를 변경할 수 있다

break, continue, goto, return문 네 가지가 있다.

 

  break

break문은 switch문 안에 사용하면 제어의 흐름이 switch의 다음 문장으로 이동한다.

for, while, do while 등의 반복문 안에서 사용하면 반복문을 빠져나간다.

break문을 통해 원하는 부분에서 루프를 빠져나올 수 있다.

 

특정 값의 입력을 통해 프로그램을 종료하기로 약속하는 것이 사용하기 쉬운데,

데이터의 끝을 나타내는 특별한 값을 센티널(sentinel)이라고 한다.


  continue

: continue를 만나면 루프 중에 continue 다음 문장을 수행하는 대신 루프의 시작이나 끝 부분으로 이동한다

 

for문 안에서 continue를 만나면 for의 시작 부분으로 이동해 증감식을 수행한 뒤에, 다시 조건식부터 검사한다.

while문에서는 while의 시작 부분으로 이동해 조건식을 검사하며,

do while문에서는 루프 끝 부분으로 이동해 조건식을 검사하고 루프를 반복한다.


  goto

제어의 흐름을 프로그램의 특정 위치로 이동하려면 goto를 사용한다.

이동할 문장을 가리키는 label(레이블)이 필요한데, 레이블을 정의할 때는 레이블을 구별하기 위한 이름과 콜론(:)이 필요하다.

goto사용예시

더보기

int main(){

    int i;

 

    for(i =10; i>0; i--)

    {

       if(i%3=0)

           goto out1:

         printf("%d ", i);

     }

out1:

       printf("\n");

 

      return 0;

}

 

goto를 많이 사용할수록 코드의 이해에 방해가 될 수 있기 때문에, 꼭 필요한 경우가 아니라면 사용하지 않는 것이 좋다.

한꺼번에 여러 개의 루프를 탈출해야 할 때 사용하도록 하자.


  return 

: 프로그램 수행 중에 return문을 만나면 함수를 호출한 곳으로 되돌아간다.

 


타 언어에서도 볼 수 있는 부분이 대부분이기에, 먼저 다른 언어를 접해봤다면 이해하는데 어려움은 없는 듯하다.

 

반응형

'Language & Framework & GIT > C' 카테고리의 다른 글

[씨앤씨뿔] C/ 배열  (0) 2023.04.04
[씨앤씨뿔] C/ 함수  (0) 2023.04.04
[씨앤씨뿔] C/ 연산자  (0) 2023.03.27
[씨앤씨뿔]C/ 데이터형&연산자  (0) 2023.03.25
[씨앤씨뿔]C/ C 구성 요소  (0) 2023.03.23

댓글