태그 보관물: 프로그래밍

C언어 조건문 정리

프로그래밍에서 조건문은 특정 조건에 따라 프로그램의 흐름을 제어하는 데 필수적인 요소입니다.

1. 조건문 이란?

조건문의 개념

조건문은 프로그램이 특정 조건을 검토하고 그 조건이 참인지 거짓인지에 따라 다른 코드 블록을 실행하게 합니다. C언어에서는 if, else if, else, 그리고 switch문이 이에 해당합니다.

조건문의 종류

  • if 문: 주어진 조건이 참일 때에만 코드 블록을 실행합니다.
  • else if 문: 앞의 조건이 거짓일 때에만 새로운 조건을 검토합니다.
  • else 문: 아무런 조건도 참이 아닐 때 실행됩니다.
  • switch 문: 변수의 값에 따라 여러 가지 가능성 중에서 하나를 실행합니다.

2. if 문

if 문의 사용법

if 문은 가장 기본적인 조건문입니다. 아래는 그 예시입니다:

#include <stdio.h>

int main() {
    int x = 10;
    if (x > 5) {
        printf("x는 5보다 큽니다.\n");
    }
    return 0;
}

위 코드는 실행하면 x는 5보다 큽니다.를 출력합니다.

if 문의 흐름도

if 문의 처리 흐름은 다음과 같이 나타낼 수 있습니다:

          [조건]
            ↓
참이면 실행→[코드 블록 실행]
            ↓
          [다음 코드]

3. else if 문

else if 문의 사용법

if 문에 더하여 추가 조건을 통해 다양한 경우를 처리하려면 else if 문을 사용합니다. 사용 예시는 아래와 같습니다:

#include <stdio.h>

int main() {
    int x = 10;
    if (x > 15) {
        printf("x는 15보다 큽니다.\n");
    } else if (x > 5) {
        printf("x는 5보다 크고 15보다 작습니다.\n");
    } else {
        printf("x는 5보다 작습니다.\n");
    }
    return 0;
}

위 코드를 실행하면 x는 5보다 크고 15보다 작습니다.를 출력합니다.

else if 문의 흐름도

else if 문의 처리 흐름은 다음과 같이 나타냅니다:

          [조건1]
           ↓
참→[코드 블록1 실행]
      ↓
거짓→[조건2]
           ↓
참→[코드 블록2 실행]
      ↓
거짓→[기본 블록 실행]

4. switch 문

switch 문의 사용법

switch 문은 특정 식을 판단하고 그 값에 따라 여러 코드 블록 중 하나를 실행합니다. 사용 예는 아래와 같습니다:

#include <stdio.h>

int main() {
    int number = 2;
    switch (number) {
        case 1:
            printf("1입니다.\n");
            break;
        case 2:
            printf("2입니다.\n");
            break;
        default:
            printf("1도 2도 아닙니다.\n");
    }
    return 0;
}

위 코드는 실행하면 2입니다.를 출력합니다.

switch 문의 흐름도

switch 문의 처리 흐름은 아래로 나타낼 수 있습니다:

         [표현식]
            ↓
      [값 1] ↔ [코드 블록1]
            ↓
      [값 2] ↔ [코드 블록2]
            ↓
 [default] ↔ [기본 블록 실행]

5. 논리 연산자

논리 연산자 종류

조건문에서 주로 사용되는 논리 연산자로는 AND(&&), OR(||), 그리고 NOT(!)이 있습니다.

  • AND (&&): 두 조건이 모두 참일 때에만 결과가 참이 됩니다.
  • OR (||): 두 조건 중 하나라도 참이면 결과가 참이 됩니다.
  • NOT (!): 원래의 조건 값과 반대되는 값을 가집니다.

논리 연산자의 사용법

다음은 논리 연산자를 사용한 예제입니다:

#include <stdio.h>

int main() {
    int a = 10, b = 20;
    if (a < 15 && b > 15) {
        printf("a는 15보다 작고 b는 15보다 큽니다.\n");
    }
    if (a < 5 || b > 15) {
        printf("a는 5보다 작거나 b는 15보다 큽니다.\n");
    }
    if (!(a > 15)) {
        printf("a는 15보다 크지 않습니다.\n");
    }
    return 0;
}

위 코드를 실행하면 다음과 같이 출력합니다:

 a는 15보다 작고 b는 15보다 큽니다.
 a는 5보다 작거나 b는 15보다 큽니다.
 a는 15보다 크지 않습니다.

C언어 구조체 및 공용체

 C언어는 복합 데이터 타입을 지원하며, 주요한 두 가지가 바로 구조체(struct)와 공용체(union)입니다. 구조체와 공용체의 활용법, 메모리 사용 방식, 예제 코드를 통해 그 차이점을 명확히 이해해 봅시다.

구조체

구조체의 정의 및 사용

 구조체(struct)는 다양한 데이터 타입을 하나의 데이터 타입으로 만들 수 있게 해줍니다. 예를 들어, 사람의 정보를 저장할 때, 이름(문자열), 나이(정수), 키(실수) 등을 하나의 구조로 표현할 수 있습니다.

#include <stdio.h>

struct Person {
    char name[50];
    int age;
    float height;
};

int main() {
    struct Person person1;
    strcpy(person1.name, "Alice");
    person1.age = 25;
    person1.height = 5.5;

    printf("Name: %s\n", person1.name);
    printf("Age: %d\n", person1.age);
    printf("Height: %.2f\n", person1.height);

    return 0;
}

구조체의 메모리 사용 방식

 구조체는 각 변수의 메모리 크기를 합한 값을 사용합니다. 예를 들어, 위의 Person 구조체는 문자열(50 bytes), 정수(4 bytes), 실수(4 bytes)로 총 58 bytes의 메모리를 차지하게 됩니다. 다음 그림은 이를 나타낸 것입니다.

|    name      |    age    | height  |
|---50 bytes---|--4 bytes--|-4 bytes-|

구조체의 장단점

 구조체의 주요 장점은 다양한 데이터 타입을 하나의 타입으로서 묶어서 재사용할 수 있다는 점입니다. 그러나 메모리를 절약하는 데에는 효율적이지 않을 수 있습니다.

공용체

공용체의 정의 및 사용

 공용체(union)는 모든 멤버 변수가 하나의 메모리 공간을 공유합니다. 즉, 한 변수의 값이 변하면 다른 변수의 값도 함께 변할 수 있습니다.

#include <stdio.h>

union Data {
    int i;
    float f;
    char str[20];
};

int main() {
    union Data data;
    data.i = 10;
    printf("data.i : %d\n", data.i);

    data.f = 220.5;
    printf("data.f : %.2f\n", data.f);

    strcpy(data.str, "C Programming");
    printf("data.str : %s\n", data.str);

    return 0;
}

공용체의 메모리 사용 방식

 공용체는 가장 큰 변수의 메모리 크기만큼의 공간만 차지합니다. 예를 들어, 위의 Data 공용체는 정수(4 bytes), 실수(4 bytes), 문자열(20 bytes) 중 가장 큰 값인 20 bytes만을 사용합니다. 다음 그림은 이를 나타낸 것입니다.

|         str        |
|------20 bytes------|

공용체의 장단점

 공용체의 가장 큰 장점은 메모리를 절약할 수 있다는 점입니다. 그러나 각 변수들이 메모리를 공유하기 때문에 사용 시 주의를 요합니다. 변수를 잘못 사용하면 데이터가 손상될 수 있습니다.

구조체와 공용체 비교

 아래 표는 구조체와 공용체의 주요 차이점을 요약합니다.

비교 항목 구조체 공용체
메모리 사용 멤버 변수들의 총합 가장 큰 멤버 변수 크기
데이터 접근 독립적인 멤버 접근 공유된 메모리 접근
장점 독립적 데이터 관리 메모리 절약
단점 메모리 낭비 가능성 데이터 손상 가능성

구조체와 공용체 선택 기준

 어떤 상황에서 구조체를 사용하고, 어떤 상황에서 공용체를 사용해야 할까요? 프로젝트의 용도와 메모리 사용 효율을 고려하여 선택할 수 있습니다.

언제 구조체를 사용할 것인가?

 구조체는 각 데이터를 독립적으로 관리하고자 할 때 유용합니다. 다양한 데이터 타입을 포함할 때도 구조체를 사용하는 것이 좋습니다.

언제 공용체를 사용할 것인가?

 공용체는 메모리가 제한적인 환경에서 효과적입니다. 하나의 변수만 사용할 길 때, 메모리 절약을 위해 공용체를 사용하는 것이 유리합니다.