IT

기초컴퓨터프로그래밍 C언어(5)-조건문

배채 2025. 1. 2. 12:14
switch (변수) {
  case 값1:
    // 값1일 때 실행되는 코드
    break;
  case 값2:
    // 값2일 때 실행되는 코드
    break;
  case 값3:
    // 값3일 때 실행되는 코드
    break;
  default:
    // 어떤 값과도 일치하지 않을 때 실행되는 코드
    break;
}

목차

  1. 조건문이란 무엇인가?
  2. if 계열 if, if-else 조건문
  3. else-if 조건문
  4. switch 조건문

드디어 조건문을 포스팅하네요. 제가 처음 C언어를 공부하면서 처음으로 흥미있게 공부했던 파트입니다. 이전까지는 문구를 띄운다던지, 계산을 한다든것만 구현가능했지만, 이 파트를 공부한 후로는 드디어 '프로그램'이라 할만한것을 만들 수 있습니다.

조건문이란 무엇인가

조건문은 프로그램의 흐름을 제어하는 구조로, 주어진 조건이 참인지 거짓인지에 따라 특정 코드 블록을 실행하거나 건너뛰게 합니다. 이를 통해 프로그램이 더 유연하고 지능적으로 동작할 수 있습니다.

조건문은 일반적으로 다음과 같은 요소로 구성됩니다
-조건식 : 참 또는 거짓 값을 반환하는 표현식입니다.
-실행 블록 : 조건식이 참일 때 실행되는 코드 블록입니다.

조건문에는 다양한 종류가있습니다.

if 조건문

if 조건문
가장 기본적인 조건문으로, 주어진 조건이 참일 때만 특정 명령을 실행합니다.

if (조건식)
  참;



if-else 조건문
주어진 조건이 참일 때와 거짓일 때 각각 다른 명령을 실행합니다

if (조건식)
  참;
else
  거짓;

실습예제

년도를 입력받아 윤년인지 아닌지 알려주는 프로그램을 작성하시오

#include<stdio.h>
int main(void)

{

	int year, result;

	printf("년도를 입력하세요");

	scanf("%d", &year);

	result = year % 4;
	if ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0))
		printf("윤년");
	else
		printf("윤년아님");


	return 0;

출력화면
출력화면

result = year % 4;: year 변수를 4로 나눈 나머지를 result에 저장합니다.

if ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0)): 윤년을 판별하는 조건문입니다.

조건은 4로 나누어 떨어지고, 100으로 나누어 떨어지지 않거나, 400으로 나누어 떨어지면 윤년입니다.

printf("윤년입니다.\n");: 조건이 참일 경우 "윤년입니다."를 출력합니다.

else: 조건이 거짓일 경우.

printf("윤년이 아닙니다.\n");: "윤년이 아닙니다."를 출력합니다.

이렇게 if는 조건이 참일경우 출력 조건이 거짓일경우 다른거 출력 이렇게 두가지경우일때 if-else문을 사용합니다.

else-if 조건문

else if 조건문은 여러 조건(2개이상의 조건)을 순차적으로 검사하여 조건에 맞는 코드를 실행하도록 합니다. 이는 단일 if 또는 if-else 문보다 좀 더 복잡한 조건을 처리할 때 유용합니다. else if 문을 사용하면 코드의 가독성을 높이고, 여러 조건을 한 번에 처리할 수 있습니다.

if (조건식1) {
    // 조건식1이 참일 때 실행되는 코드
} else if (조건식2) {
    // 조건식2가 참일 때 실행되는 코드
} else if (조건식3) {
    // 조건식3이 참일 때 실행되는 코드
} else {
    // 모든 조건이 거짓일 때 실행되는 코드
}

실습예제

성적확인 프로그램을 작성하시오

조건(60점이상은 합격 문구 출력 90점이상, 80점이상 70점이상 60점이상은 각각 A B C D도 함께출력, 60점미만은 F불합격

#include<stdio.h>
int main(void)

{
	int score;
	printf("성적을 입력하시오: ");
	scanf("%d", &score);

	if (score >= 90)
		printf("합격 : 학점 A\n");
	else if (score >= 80)
		printf("합격 : 학점 B\n");
	else if (score >= 70)
		printf("합격 : 학점 C\n");
	else if (score >= 60)
		printf("합격 : 학점 D\n");

	else
		printf("불합격 : 학점 F\n");

}

출력화면
출력화면

조건 확인 및 출력: if, else if, else 조건문을 이용해 성적에 따른 학점을 출력합니다.
성적이 90 이상일 경우: "합격 : 학점 A"
성적이 80 이상일 경우: "합격 : 학점 B"
성적이 70 이상일 경우: "합격 : 학점 C"
성적이 60 이상일 경우: "합격 : 학점 D"
그 외 성적일 경우: "불합격 : 학점 F"

정리하면 else if는 2개이상의 조건을 다루때 사용됩니다.

실습예제

이차방정식의 근을 구하는 프로그램을 작성하시오

#include<stdio.h>
#include<math.h> // sqrt 함수를 사용하기 위해 필요

int main(void)
{
    int a, b, c;
    printf("계수 a 계수 b 계수 c를 차례로 입력하세요\n");
    scanf("%d %d %d", &a, &b, &c);

    if (a == 0){
        // printf 안에서 계산이 되어야 합니다.
        printf("방정식의 근은 %lf 입니다.\n", -(double)c / b);
    } else {
        double D = (b * b - 4.0 * a * c);
        if (D > 0) {
            // 근의 공식에서 분자 전체를 계산 후 나누기 해야 합니다.
            printf("방정식의 실근은 %lf입니다.\n", (-b + sqrt(D)) / (2.0 * a));
            printf("방정식의 실근은 %lf입니다.\n", (-b - sqrt(D)) / (2.0 * a));
        } else {
            printf("실근이 존재하지 않습니다.\n");
        }
    }

    return 0;
}

출력화면
출력화면

#include: sqrt 함수를 사용하기 위해 수학 라이브러리를 포함합니다.

입력 받기: printf와 scanf를 사용해 사용자로부터 계수 a, b, c를 입력받습니다.

1차 방정식 확인: if (a == 0) 조건문에서 a가 0이면 1차 방정식으로 간주하고, -(double)c / b를 계산하여 근을 출력합니다.

이차 방정식 근 계산: 판별식 계산: double D = (b * b - 4.0 * a * c);를 통해 판별식을 계산합니다.

두 개의 실근 확인: if (D > 0) 조건문에서 D가 양수이면 두 개의 실근을 출력합니다.

실근 없음: 그 외의 경우 실근이 존재하지 않음을 출력합니다.

switch-case 조건문

switch-case 문은 변수의 값을 평가하고, 그 값에 따라 여러 코드 블록 중 하나를 실행하는 조건문입니다. 여러 개의 if-else 문을 사용하는 대신, switch-case 문을 사용하면 코드가 더 간결하고 명확해집니다.

switch (변수) {
  case 값1:
    // 값1일 때 실행되는 코드
    break;
  case 값2:
    // 값2일 때 실행되는 코드
    break;
  case 값3:
    // 값3일 때 실행되는 코드
    break;
  default:
    // 어떤 값과도 일치하지 않을 때 실행되는 코드
    break;
}

실습예제

위에서 학습한 성적확인 프로그램을 작성하시오

조건(60점이상은 합격 문구 출력 90점이상, 80점이상 70점이상 60점이상은 각각 A B C D도 함께출력, 60점미만은 F불합격)

#include<stdio.h>

int main(void) {
    int score;
    printf("점수를 입력하세요: ");
    scanf("%d", &score);

    switch(score / 10) {
        case 10:
        case 9:
            printf("등급: A\n");
            break;
        case 8:
            printf("등급: B\n");
            break;
        case 7:
            printf("등급: C\n");
            break;
        case 6:
            printf("등급: D\n");
            break;
        default:
            printf("등급: F\n");
            break;
    }

    return 0;
}

입력 받기: printf와 scanf를 사용하여 사용자로부터 점수를 입력받습니다.

switch(score / 10): 점수를 10으로 나누어 해당 범위에 따라 등급을 판단합니다. 예를 들어, 점수가 85라면 score / 10은 8이 되어 case 8이 실행됩니다.

case문: 각 범위에 따라 등급을 출력합니다.
점수가 90 이상이면: case 10, case 9 → "등급: A"
점수가 80 이상이면: case 8 → "등급: B"
점수가 70 이상이면: case 7 → "등급: C"
점수가 60 이상이면: case 6 → "등급: D"
그 외의 점수: default → "등급: F"

break문: 각 case 문이 끝나면 break 문을 사용하여 switch 문을 빠져나갑니다. break 문이 없으면 다음 case 문이 실행될 수 있습니다.

default문: 어떤 case와도 일치하지 않는 경우 실행됩니다.

마지막으로 오늘 배운 문법으로 계산기프로그램을 작성하겠습니다.

switch-case문과 is-else문 두개로 구현해보겠습니다.

else-if문으로 작성

#include <stdio.h>

int main(void) {
	char op;
	double x, y;

	printf("연산자를 입력하세요 (+, -, *, /): ");
	scanf(" %c", &op);
	printf("첫 번째 숫자를 입력하세요: ");
	scanf("%lf", &x);
	printf("두 번째 숫자를 입력하세요: ");
	scanf("%lf", &y);

	if(op=='+') {

		printf("%lf + %lf = %lf\n", x, y, x + y);
	}
	else if(op== '-'){
		printf("%lf - %lf = %lf\n", x, y, x - y);
	}
	else if (op == '*') {
		printf("%lf * %lf = %lf\n", x, y, x * y);
	}
	else if (op == '/') {
		if (y = 0)
			printf("오류\n");
		else
			printf("%lf * %lf = %lf\n", x, y, x / y);
	}
	else		printf("지원되지 않는 연산자입니다.\n");


	return 0;
}

switch-case문으로작성

#include <stdio.h>
int main(void) {
	char op;
	double x, y;

	printf("연산자를 입력하세요 (+, -, *, /): ");
	scanf(" %c", &op);
	printf("첫 번째 숫자를 입력하세요: ");
	scanf("%lf", &x);
	printf("두 번째 숫자를 입력하세요: ");
	scanf("%lf", &y);

	switch (op) {
	case '+':
		printf("%lf + %lf = %lf\n", x, y, x + y);
		break;
	case '-':
		printf("%lf - %lf = %lf\n", x, y, x - y);
		break;
	case '*':
		printf("%lf * %lf = %lf\n", x, y, x * y);
		break;
	case '/':
		if (y = 0)
			printf("오류\n");
		else
			printf("%lf * %lf = %lf\n", x, y, x / y);
		break;
	default: printf("지원되지 않는 연산자입니다.\n");
		break;
	}
	return 0;
}

반응형