[c언어] 조건문

yunssup·2023년 4월 16일

C언어

목록 보기
4/13
post-thumbnail

c언어에서는 2가지의 제어문을 제공한다!

  1. 조건문 : 예외 사항에 대처하기 위한 문법. 특정 조건을 부여하고 해당 조건을 만족하면 지정한 문장을 수행.
  2. 반복문 : 반복 행위를 효과적으로 표현하기 위한 문법. 해당 조건이 거짓이 될 때까지 지정한 문장 반복 수행

1. if 조건문

if(조건 수식) 명령문;

()괄호 안에 있는 조건 수식의 결과가 참일 경우, 뒤에 명시된 명령문 1개를 수행

1. 단일 if 조건문 :

명령문1;
if(조건 수식) 명령문2;
명령문3;

결과 값이 참일 경우 '명령문1 > 명령문2 > 명령문3'
결과 값이 거짓일 경우 '명령문1 > 명령문3'

2. 복합 if 조건문 :

명령문1;
if(조건 수식)
{
	명령문2;
    명령문3;
}
명령문4;

결과 값이 참일 경우 '명령문1 > 명령문2 > 명령문3 > 명령문4'
결과 값이 거짓일 경우 '명령문1 > 명령문4'

2. if~else~ 조건문

if문에서 그렇지 않으면에 해당하는 것을 else문을 사용하여 더욱 간결하게 쓸 수 있다.

if(비가 오면) 소풍이 취소된다.;
if(비가 오지 않으면) 그대로 소풍이 진행된다.;

if(비가 오면) 소풍이 취소된다.;
else 그대로 소풍이 진행된다.;

예시 문장 처럼 if~else~문을 사용하면 소스 코드를 간결하게 나타낼 수 있다.

1. 단일 if~else~문 :

명령문1;
if(조건 수식) 명령문2;
else 명령문3;
명령문4;

결과 값이 참일 경우 '명령문1 > 명령문2 > 명령문4'
결과 값이 거짓일 경우 '명령문1 > 명령문3 > 명령문4'

2. 복합 if~else~문 :

명령문1;
if(조건 수식) {
	명령문2;
	명령문3;
} else {
	명령문4;
    명령문5;
}
명령문 6;

결과 값이 참일 경우 '명령문1 > 명령문2 > 명령문3 > 명령문6'
결과 값이 거짓일 경우 '명령문1 > 명령문4 > 명령문5 > 명령문6'

2-1. 조건 수식 연산자 :

if~else~문과 비슷한 형태를 가진 연산 수식. 하지만 조건 수식 연산자는 '연산자'이기 떄문에 명령을 처리하면 값을 변환하는 형태임.
즉, 조건 수식의 결과 값이 참이면 수식1의 결과 값을 사용하고 거짓이면 수식2의 결과 값을 사용한다.

결과 값 = (조건 수식)?수식1:수식2;

또한, 조건 수식 연산자는 단일 문장으로 구성된 명령문만 사용할 수 있다.

*예제를 통해 확인해보기!

1. if~else~문 이용

int value = 50000;
double point;

if (value>=10000) point = value * 0.1;
	else point = value * 0.05;

2. 조건 수식 연산자 사용
int value = 50000;
double point;

point = (value>=10000) ? value*0.1 : value *0.05;

3. 중첩된 if 조건문 / 중첩된 if~else 조건문

이는 예제 문제를 통해서 확인해보기로 하자!

4. switch 조건문

switch 문은 if 문이 비효율적일 때 사용한다.
이는 변수 값이 이미 정해져잇는 상수들과 비교할 때 유리하다.

  1. switch문의 기본 구조
명령문1;
switch(수식 또는 변수) {
	case 상수1:
    	명령문2;
        break;
    case 상수2:
    	명령문3;
        break;
    default:
    	명령문4;
        break;
}
명령문5;

break문은 현재 수행되는 case문을 중단하겠다는 의미!
default문은 상수들과 일치하는 값이 없는 경우 수행할 명령을 적는 곳!

!문제를 통해 조건문 복습하기!

Q1) 사용자가 입력한 정수의 절댓값을 구하기

#include<stdio.h>

int main(void)

{

	int num;

	printf("숫자를 입력하시오 :");
	scanf_s("%d", &num);

	if (num < 0)
		num = -num;

	printf("절댓값은 %d입니다", num);

	return 0;
}

Q2) 문자를 분류하는 프로그램

#include<stdio.h>

int main(void)

{
	char ch;

	printf("문자를 입력하시오 :");
	scanf_s("%ch", &ch);

	if (ch >= 'A' && ch <= 'Z')
		printf("해당 문자는 대문자 입니다.");
	else if (ch >= 'a' && ch <= 'z')
		printf("해당 문자는 소문자 입니다.");
	else if (ch >= '0' && ch <= '9')
		printf("해당 문자는 숫자 입니다.");
	else
		printf("해당 문자는 기타문자 입니다.");

	return 0;
}

Q) 1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다. 3개 주사위의 나온 눈이 주어질 때, 상금을 계산하시오.
• 같은 눈이 3개가 나오면 10,000원+(같은 눈)×1,000원의 상금을 받게 된다.
• 같은 눈이 2개만 나오는 경우에는 1,000원+(같은 눈)×100원의 상금을 받게 된다.
• 모두 다른 눈이 나오는 경우에는 (그 중 가장 큰 눈)×100원의 상금을 받게 된다

#include <stdio.h>

int main(void)

{
	int dice1, dice2, dice3;
	int prize = 0;
	int max = 0;

	printf("주사위 눈을 입력하시오 :");
	scanf_s("%d %d %d", &dice1, &dice2, &dice3);

	if (dice1 == dice2 && dice2 == dice3 && dice1 == dice3)
		prize = 10000 + dice1 * 1000;
	else if (dice1 == dice2 || dice1 == dice3)
		prize = 1000 + dice1 * 100;
	else if (dice2 == dice3)
		prize = 1000 + dice2 * 100;
	else {
		if (dice1 > dice2 && dice1 > dice3)
			max = dice1;
		else if (dice2 > dice1 && dice2 > dice3)
			max = dice2;
		else if (dice3 > dice1 && dice3 > dice2)
			max = dice3;

		prize = max * 100;
	}

	printf("상금 : %d", prize);

	return 0;
}

Q) 계좌개설, 입금, 출금, 계좌정보 전체 출력, 프로그램 종료의 기능을 갖는 프로그램을 작성하라. 기존에 존재하는 계좌ID와 그 각각 115, 70이다.
• 계좌개설: 계좌ID, 입금액을 입력 받는다. 기존 계좌ID로는 개설할 수 없다. 입금액은 0원 이상으로 한다.
• 입금: 존재하는 계좌ID에 입금한다. 입력한 ID가 존재하지 않는다면 입금에 실패한다.
• 출금: 존재하는 계좌ID에서 출금한다. 입력한 ID가 존재하지 않는다면 출금에 실패한다. 출금 시 잔액이 0원 미만이 되는 경우 출금에 실패한다.
• 계좌정보 전체 출력: 계좌ID, 잔액을 출력한다.
• 프로그램 종료: “프로그램을 종료합니다"라는 문구를 띄운다.

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

{
	int choice; //선택 번호//
	int id; //계좌 ID//
	int Deposit=0; //입금//
	int Existing_balance=70; //기존 잔액//
	int Balance=0; //잔액//
	int Withdrawal; //출금//
	int Withdrawal_balance;//출금잔액//
	printf("----Menu----\n1. 계좌계설\n2. 입금\n3. 출금\n4. 계좌정보 전체 출력\n5. 프로그램 종료\n");
	printf("선택 :");
	scanf_s("%d", &choice);

	switch (choice)
	{
	case 1:
		printf("[계좌개설]\n");
		printf("계좌ID:");
		scanf_s("%d", &id);
		printf("입금액:");
		scanf_s("%d", &Deposit);

		if(id==115)
			printf("**계좌 개설 실패**\n이미 존재하는 아이디입니다.");
		else
			printf("**계좌 개설 성공**\n계좌ID:%d\n잔액:%d", id, Deposit);
		break;

	case 2:
		printf("[입금]\n");
		printf("계좌ID:");
		scanf_s("%d", &id);
		printf("입금액:");
		scanf_s("%d", &Deposit);
		Balance = Deposit + 70;
		if(id==115)
			printf("**입금 성공!**\n계좌ID:%d\n잔액:%d", id, Balance);
		else
			printf("**입금 실패**\n계좌ID가 존재하지 않습니다.");
		break;

	case 3:
		printf("[출금]\n");
		printf("계좌ID:");
		scanf_s("%d", &id);
		printf("출금액:");
		scanf_s("%d", &Withdrawal);
		Withdrawal_balance = Existing_balance - Withdrawal;
		if (id == 115) {
			if (Withdrawal > Existing_balance)
				printf("**출금 실패**\n잔액이 부족합니다.");
			else
				printf("**출금 성공!**\n계좌ID:%d\n잔액:%d", id, Withdrawal_balance);}
		else
			printf("**출금 실패**\n계좌ID가 존재하지 않습니다.");
		break;

	case 4:
		printf("계좌 ID: 115\n잔액 :70");
		break;
	default:
		printf("프로그램을 종료합니다.\n");
		break;
	}
	return 0;
}

0개의 댓글