About C – “조건문, 반복문, 분기문”

About C – “조건문, 반복문, 분기문”

10월 1, 2021

간략하게, 제어문이란 프로그램의 흐름을 제어해주는 문장입니다. 글을 읽듯이 위에서 아래로 읽는 것이 아닌, 마치 설문조사에서의 “4번 문항에 ‘예’를 체크했다면 6번 문항으로 가세요.”와 같은 문장인 것입니다.

조건문 – if

if문 다음 괄호 안의 조건식이 참이면 문장 1을, 거짓이면 문장 1을 실행하지 않습니다. 예를 들면, “20세 이상에게만 술을 판매할 수 있습니다.”를 표현해 봅시다.

  1. if(나이>20) 이면, 술을 판매할 수 있습니다.
  2. if(age>20) printf(“술을 판매할 수 있습니다.”); 와 같은 흐름입니다.
  3. else문을 사용해서 조건식이 거짓일 때의 문장을 정해둘 수도 있습니다. 다중 if – else문을 사용해서, 더 많은 조건에 따라 분기해야 하는 프로그램을 작성할 수도 있습니다. 아래의 예제를 살펴봅시다.
#include <stdio.h>
int main()
{
    int age;

    printf("손님의 나이를 입력해주세요.\n");
    scanf("%d", &age);

    if(age>20)
    {
        printf("술을 판매해도 되겠네요!!");
    }
    else
    {
        printf("영업정지 당하고 싶으세요?!");
    }
    return 0;
}

의 경우처럼입니다. 문장이 간단할 경우, if와 else 다음의 {}중괄호는 작성하지 않아도 됩니다.    아래는 다중 if~else문의 예제입니다.

#include <stdio.h>
int main()
{
    int age;

    printf("손님의 나이를 입력해주세요.\n");
    scanf("%d", &age);

    if(age<20)
    {
        printf("영업 정지입니다.");
    }
    else if(age == 20)
    {
        printf("다행이네요!");
    }
    else
    {
        printf("안심하세요^^");
    }
    return 0;
}

나이가 20 이하인 경우, 딱 20인 경우, 그 외의 경우로 분류되어 있는 것을 볼 수 있습니다.

조건문 – switch~case문

switch case문은, 경우의 수가 많을 경우 자주 사용합니다.  if~else문과 비슷하나, 결과가 정수형인 경우에만 선택할 수 있습니다.

#include <stdio.h>
int main()
{
	int grade;

	printf("고등학교 몇 학년이신가요?");
	scanf("%d",&grade);
	switch(grade) {
		case 1:
			printf("당신은 1학년이군요!\n");
            break;
		case 2:
			printf("당신은 2학년이군요!\n");
			break;
		case 3:
			printf("당신은 3학년이군요!\n");
			break;
		default:
			printf("다시 입력해주세요.");
			break;
	}
	return 0;
}

와 같이 사용합니다.아래와 같이, 표준화를 시켜볼 수 있겠습니다.

switch(조건식) {
    case 상수1:
        문장 1;
        break; // 꼭 break문으로 루프를 벗어나야 합니다.
    case 상수2:
        문장 2;
        break;
    .
    .
    .
    .
    case 상수 n:
        문장 n;
        break;
    default:
        문장;
        break;
} // 여기서 switch-case문의 루프가 끝납니다.

반복문 – for문

특정한 부분을 반복하는 문장입니다.제어 변수 초기식, 조선식, 증감식의 세 부분으로 구성됩니다.

for(제어변수초기식;조건식;증감식)
{
    반복될 문장;
}

와 같이 사용합니다. 제어변수 초기식 은 반복문을 제어하는 변수의 초기식으로, 루프가 실행될 때 한 번만 수행됩니다.  조건식 은 반복문이 언제까지 실행될 것인지를 지정하고, 조건식이 참이면 반복문의 루프를 실행하고, 거짓이라면 루프를 빠져나옵니다.  증감식 은 반복 실행될 문장이 모두 실행된 후 실행되며, 보통 제어 변수를 증가시키거나 감소시키는 역할을 합니다.  

#include <stdio.h>
int main()
{
    printf("Hello!\n")
    printf("Hello!\n")
    printf("Hello!\n")
    printf("Hello!\n")
    printf("Hello!\n")
    return 0;
}

위의 코드는 Hello를 5번 출력하는 문장입니다.  이것이 1000번이 되고, 10000번이 되고, 수십만 번이 된다면 어떨까요?  아무래도 쓸데없는 용량만 차지하고, 비효율적인 코드가 될 것입니다. for문을 활용해 봅시다.

#include <stdio.h>
int main()
{
    int n;
    for(n=0;n<5;n++){ //n은 0부터, 5 이하일 때까지, n을 1씩 증가시킵니다.
        printf("Hello!\n");
    }
    return 0;
}

간략하게 이런 흐름일 것입니다.

  1. n은 0이고(제어변수초기식), n은 0이므로 5보다 작으므로(조건식) printf를 실행하고 나서, n에다가 1을 증가시킵니다.
  2. n은 1이고, n은 1이므로 5보다 작으므로 printf를 실행하고 나서, n에다가 1을 증가시킵니다.
  3. 위의 과정들을 반복하다, n이 4에서 5가 되는 시점 루프를 빠져나옵니다.

이러한 경우에는 제어변수만 바꿈으로서 반복되는 횟수를 1000번으로, 10만 번으로 등 언제든지 바꿀 수가 있습니다.

#include <stdio.h>
int main()
{
    int n;
    for(n=0;n<1000;n++){ // 1000 번을 출력
        printf("%d: Hello!\n",n);
    }
    return 0;
}

for( ; ; ) 로, 초기식, 조건식, 증감식을 모두 생략함으로서 무한루프를 만들 수도 있습니다.

#include <stdio.h>
int main()
{
    int n;
    for( ; ; ){
        printf("Hello!\n");	
    }
    return 0;
}

Hello를 무한으로 출력하는 루프를 만들었습니다.

반복문 – while문

미리 반복 횟수를 알 수 없고, 조건에 따라 반복하는 경우 사용합니다.

while(조건식){
    반복될 문장;
}

와 같이 사용합니다. 조건식이 참이면 루프 안의 문장을 반복하고, 거짓이면 루프를 벗어납니다. 

#include <stdio.h>
int main()
{
    int n = 0;
    while(n<10){ //조건식이 참이면,
        printf("Hello!\n"); // 루프 안의 문장을 반복(1)합니다.
        n++; //루프 안의 문장을 반복(2)합니다.
    }
    return 0;
}

do~while문을 사용해서 미리 반복 횟수를 알 수는 없으나 최소한 한 번은 반복 문장을 실행할 경우에 많이 사용합니다.

분기문 – break문 , continue문, goto문

break문

  • 반복문이나, switch-case문에서 안쪽 루프를 하나 벗어나는 데에 사용합니다.
  • 무한 루프에는 특별한 조건에서 루프를 탈출하도록, 반드시 break문을 작성해야 합니다.

continue문

  • for, while, do~while문에서 루프의 조건식을 검사하는 부분으로 다시 돌아갑니다.
  • break문처럼, 루프를 빠져나가는 것이 아닌 돌던 루프의 continue 아래 부분을 실행하지 않고 다시 조건을 검사하는 부분으로 돌아갑니다.

goto문

  • 무조건 해당 레이블로 분기하게 되는 문장입니다.
  • 프로그램 어느 곳에라도 레이블을 만들어 바로 이동할 수 있는 편리함이 있습니다.
  • 루프가 다중으로 중첩되어있는 경우, break문을 사용하더라도 루프 밖으로 완전히 빠져나올 수 없는데 goto문을 사용한다면 한 번에 다중 루프를 빠져나올 수 있다는 장점이 있습니다.

제가 이해한 C언어의 제어문 정리입니다.

Leave A Comment

Avada Programmer

Hello! We are a group of skilled developers and programmers.

Hello! We are a group of skilled developers and programmers.

We have experience in working with different platforms, systems, and devices to create products that are compatible and accessible.