Language/C

[ C ] 조건문

곽수진 2021. 10. 10. 20:48
반응형

If문

  • 단순 if

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

 

if (조건식){
    문장;
    문장;
    ...
}

 

: 실행해야 할 문장이 여러개일 경우 { }(중괄호)로 묶음

  → 묶지 않으면 첫 문장만 if문 속으로 포함됨

 

 

Ex.

if (num<0)
    printf("음수입니다.");

 

▶ num이 음수라면 '음수입니다.' 문구 출력

 

 

퀴즈 결과를 출력하는 프로그램을 작성해보자.

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void){
    int score;
    
    printf("퀴즈 점수를 입력하세요: ");
    scanf("%d", &score);
    
    if (score<70)
        printf("재시!\n");
    
    printf("다음 수업은 일주일 후입니다.\n");
    
    return 0;
}

 

▶ 사용자가 입력한 점수가 70점 미만일 경우 '재시!'를 출력

 

 

출력 결과 모습

 

 

  • if else
if (조건식){
    문장1;
    문장2;
    ...
}
else {
    문장3;
    문장4;
    ...
}

 

▶ 조건식이 인 경우 문장1, 2 실행, 거짓일 경우 문장3, 4 실행

    : 조건 연산자와 함께 사용할 수 있음

 

 

Ex.

if (num<0)
    printf("음수입니다.");
else
    printf("양수입니다.");

 

▶ num이 0 미만이면 '음수입니다.' 이에 해당되지 않는다면 '양수입니다.'를 출력

 

 

int max = (x>y) ? x : y;

 

(조건)? 참 : 거짓

'x가 y보다 크다.' 조건이면 max값으로 x를 출력, 그렇지 않으면 y를 출력

    → if / else 구문을 사용해 표현하면 아래와 같음

 

int max;
if (x>y)
    max = x;
else
    max = y;

 

 

Ex 1.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void){

    int score;
    
    printf("퀴즈 점수를 입력하세요: ");
    scanf("%d", &score);
    
    if (score<70)
        printf("재시!\n");
    else
        printf("통과!\n");


    return 0;
}

▶ 사용자가 입력한 퀴즈 점수가 70점 미만이면 '재시!' 그렇지 않으면 '통과!' 출력

 

 

출력 결과 모습

 

 

Ex 2.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void) {

	int x, y;

	printf("정수 2개를 입력하세요: ");
	scanf("%d%d", &x, &y);

	if (y != 0)
		printf("%d / %d = %f\n", x, y, (double)x / y);
	else
		printf("0으로 나눌 수 없습니다.\n");


	return 0;
}

▶ 사용자가 입력한 정수 2개를 나눌 때, 나누는 수가 0이 아닐 경우 소수점 이하까지 나눈 값을 출력하고, 0일 경우 '0으로 나눌 수 없습니다.'를 출력

 

 

결과 출력 모습

 

결과 출력 모습

 

 

Ex 3.

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main(void) {

	int k, e;
	double avg;

	printf("국어 점수를 입력하세요: ");
	scanf("%d", &k);

	printf("영어 점수를 입력하세요: ");
	scanf("%d", &e);

	avg = (double)(k + e) / 2;

	printf("평균 점수는 %.2f\n", avg);

	if (avg >= 80 && k >= 70 && e >= 70)
		printf("합격\n");
	else
		printf("불합격\n");


	return 0;
}

▶ 사용자에게 국어 점수와 영어 점수를 입력받은 뒤 평균 값을 구함

    : 평균값은 (국어 점수 + 영어점수)/2실수형으로 형변환 시킴

 

▶ 평균이 80이상이고 국어 점수와 영어 점수가 70점 이상인 경우에는 '합격' 그렇지 않은 경우에는 '불합격' 출력

 

 

결과 출력 모습

 

 

  • 중첩된 if

      : if문 안에 포함된 if문

 

 

Ex.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void) {

	int age, fee;

	printf("나이? ");
	scanf("%d", &age);

	if (age >= 8) {
		if (age >= 65) {
			fee = 5000;
		}
		else {
			fee = 10000;
		}
	}
	else {
		fee = 0;
	}
	printf("입장료 : %d원\n", fee);

	return 0;
}

▶ 사용자가 입력한 나이가 8세 이상이면 유료, 8세 미만이면 무료

    → 65세 이상은 5000원, 그 이하는 10000원을 출력

 

 

출력 결과 모습

 

 

  • if ~ else if

    : else 블록 안에 다른 문장 없이 또 다른 if문만 들어있을 때, else if로 작성할 수 있음

      → else if문은 여러가지 중에서 한 가지를 선택할 때 유용함

 

if (조건식1)
    문장 1;
else if (조건식2)
    문장2;
else
    문장3;

 

 

Ex 1.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void) {

	int age, fee;

	printf("나이? ");
	scanf("%d", &age);

	if (age < 8) {
		fee = 0;
	}
	else if (age >= 65) {
		fee = 5000;
	}
	else {
		fee = 10000;
	}
	printf("입장료 : %d원\n", fee);

	return 0;
}

▶ 위에서 사용했던 예제를 else if문으로 다르게 표현함

 

 

출력 결과 모습

 

 

Ex 2.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void) {

	int a, b;
	char op;

	printf("수식? ");
	scanf("%d %c %d", &a, &op, &b);

	if (op == '+') {
		printf("%d + %d = %d\n", a, b, a + b);
	}
	else if (op == '-') {
		printf("%d - %d = %d\n", a, b, a - b);
	}
	else if (op == '*') {
		printf("%d * %d = %d\n", a, b, a * b);
	}
	else if (op == '/') {
		if (b != 0)
			printf("%d / %d = %.2f\n", a, b, (double)a / b);
		printf("0으로 나눌 수 없습니다.\n");	
	}
	else {
		printf("잘못된 수식입니다.\n");
	}

	return 0;
}

▶ 수식 연산자 +, -, *, /를 이용해 계산하는 사칙연산 프로그램

▶ / 연산자의 경우 소수점 둘 째자리 까지만 출력되도록 함

▶ 사용자가 입력한 두 값을 나눴을 때 0이 나오면 '0으로 나눌 수 없습니다.' 출력

▶ 이미 정해진 수식 연산자(+, -, *, /) 외에 다른 연산자를 입력하면 '잘못된 수식입니다.' 출력

 

 

결과 출력 모습

 

 

Ex 3.

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main(void) {
	int n;
	scanf("%d", &n);

	if (n == 5)
		printf("5");
	else if (n == 7)
		printf("%d", n * n);
	else if (n == 9)
		printf("%d", n);
	else
		printf("그 외 값");

	return 0;
}

▶ 사용자가 입력한 값이 5, 7, 9일 경우에는 각각 5, 7의 제곱값, 9를 출력하지만 다른 수를 입력할 경우 '그 외 값' 출력

 

 

결과 출력 모습

 

결과 출력 모습

 

 

Ex 4.

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main(void) {

	int num;
	scanf("%d", &num);

	if (num % 2 == 0)
		printf("짝수");
	else if (num % 2 == 1)
		printf("홀수");

	return 0;
}

사용자가 입력한 값이 2로 나눠 떨어지면 '짝수', 그렇지 않으면 '홀수' 출력

 

 

출력 결과 모습

 

출력 결과 모습

 

 

  • switch

      : 식의 결과가 문자형 또는 정수형일 때 그 값에 따라 case의 값과 일치하는 부분의 문장들을 수행하는 선택 구문

        → 식 또는 변수는 정수(문자) 결과가 나오는 것만 사용 가능

        → switch 안에서 break를 만나면 switch를 탈출

        → case 뒤에는 상수(정수)값만 가능

        → case에서 순서를 구분할 필요는 없음

            ≫ 일치하는 case가 없을 때 수행할 문장은 default 다음에 써줌

 

switch(식 또는 변수){
    case 값1:
        명령;
        명령;
        ...
        break;
    case 값2:
        명령;
        명령;
        ...
        break;
    ...
    [default:
        명령;
        명령;
        ...
        break;]
}

 

 

★ 주의사항 ★ 

  • switch문에서 break는 생략할 수 있음

      : 특정 case에 대한 break를 생략하면 break나 switch의 끝( } )을 만날 때까지 연속된 case의 문장들을 모두 수행

        → switch문이 올바르게 수행되도록 하려면 case마다 break를 써주어야 하며, default에도 break를 써주는 것이 좋음

 

  • switch문에서 default도 생략할 수 있음

       : switch의 정수식과 값이 일치하는 case가 없고 default도 없으면, 바로 switch를 빠져나감

        → default는 보통 switch문의 끝부분에 써줌

 

 

Ex 1.

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main(void) {

	int n;
	scanf("%d", &n);

	switch (n) {
	case 5:
		printf("5이다.");
		break;
	case 7:
		printf("%d\n", n * n * n);
		break;
	case 9:
		printf("%d\n",n * n);
		break;
	default:
		printf("해당 없음");
		break;
	}

	return 0;
}

사용자가 입력한 값이 5이면 '5이다', 7이면 7의 세제곱값, 9이면 9의 제곱값, 다른 값을 입력하면 '해당 없음' 출력

 

 

결과 출력 모습

 

결과 출력 모습

반응형