업데이트:

태그: ,

카테고리:



if 조건문


예시

#include <stdio.h>

int main() {
	int i;
	printf("입력하고 싶은 숫자를 입력하세요:");
	scanf("%d", &i);

	if (i == 7) {
		printf("당신은 행운의 숫자 7을 입력했습니다");
	}

	return 0;
}

터미널에서 7을 입력받았을때만 i변수에 7이 저장되고,
if 조건문의 괄호 안의 내용이 true가 되면서 중괄호 안의 내용이 실행된다.

입력하고 싶은 숫자를 입력하세요:7
당신은 행운의 숫자 7을 입력했습니다
------------------------------------------------
입력하고 싶은 숫자를 입력하세요:5


활용

#include <stdio.h>

int main() {
	double i, j;
	printf("나누고싶은 두 정수를 입력하세요 : ");
	scanf("%lf %lf", &i, &j);

	printf("%f를 %f로 나눈 결과는 : %f \n", i, j, i / j);

	return 0;
}

double 자료형을 scanf함수로 %lf포맷으로 입력받는다.

이때, 10과 3을 입력으로 받는다면,

나누고싶은 두 정수를 입력하세요 : 10 3
10.000000를 3.000000로 나눈 결과는 : 3.333333

이렇게 출력된다.

그런데 0이 나누는 수로 들어온다면,

나누고싶은 두 정수를 입력하세요 : 1
0
1.000000를 0.000000로 나눈 결과는 : inf

1을 0으로 나누면 inf라는 수를 출력하게된다.

Zero division Error를 파이썬에서 본적이 있을테넫, 이 경우가 이에 해당하는 오류이다.

변수 자료형이 int형이었다면 inf가 아닌 오류가 출력되었을 것이다.


입력 체크

그래서 사용자의 입력을 체크하기위해서 if문으로 체크를 할 필요가 있다.

#include <stdio.h>

int main() {
	double i, j;
	printf("나누고싶은 두 정수를 입력하세요 : ");
	scanf("%lf %lf", &i, &j);

	if (j == 0) {
		printf("0으로 나눌 수 없습니다.");
		return 0;
	}

	printf("%f를 %f로 나눈 결과는 : %f \n", i, j, i / j);

	return 0;
}
나누고싶은 두 정수를 입력하세요 : 10 0
0으로 나눌 수 없습니다.%

가운데 있는 if 문제서 나누는 수가 0으로 변수에 할당되면 조건이 true가되면서 printf()함수를 실행하게되고,
return 0;으로 프로그램이 종료가된다.


점수확인하기

#include <stdio.h>

int main() {
	int score;

	printf("당신의 수학점수를 입력하세요 ");
	scanf("%d", &score);

	if (score >= 90) {
		printf("당신은 합격입니다! \n");
	}

	if (score < 90) {
		printf("당신은 불합격입니다! \n");
	}

	return 0;
}
당신의 수학점수를 입력하세요 89
당신은 불합격입니다!
--------------------
당신의 수학점수를 입력하세요 90
당신은 합격입니다!

이렇게 if문을 2개를 사용할수도 있다.

이런 관계 연산자들에는

, <, <=, >=, !=, == 등이 있다.



if~else


기본적인 사용법

#include <stdio.h>

int main() {
	int num;

	printf("아무 숫자나 입력하세요: ");
	scanf("%d", &num);

	if (num == 7) {
		printf("당신은 7을 입력했습니다");
	} else {
		printf("그냥 보통 숫자인 %d를 입력했습니다.", num);
	}

	return 0;
}

else는 앞의 if문이 조건을 만족하지 않을 때를 나타낸다.
그래서

아무 숫자나 입력하세요: 10
그냥 보통 숫자인 10를 입력했습니다.%
------------------------
아무 숫자나 입력하세요: 7
당신은 7을 입력했습니다%


중첩

이런 if ~ else문을 중첩해서 사용할수도 있는데,

#include <stdio.h>

int main() {
	int num;

	printf("아무 숫자나 입력하세요 : ");
	scanf("%d" , &num);

	if (num == 7) {
		printf("행운의 숫자 7입니다!\n");
	} else {
		if (num == 4) {
			printf("죽음의 숫자 4입니다.");
		} else {
			printf("보통 숫자 %d입니다", num);
		}
	}

	return 0;
}

7과 4를 체크하는 프로그램이다.
이런식으로 중첩사용하는 것은 가독성 면에서나 재사용성 면에서 좋지 않은데,
이를 else ~ if로 바꿀 수 있다.


else~if

#include <stdio.h>

int main() {
	int num;

	printf("아무 숫자나 입력하세요 : ");
	scanf("%d" , &num);

	if (num == 7) { //7일때
		printf("행운의 숫자 7입니다!\n");
	} else if (num == 4) { //4일때
		printf("죽음의 숫자 4입니다.");
	} else { //나머지
		printf("보통 숫자 %d입니다", num);
		}

	return 0;
}

훨~씬 가독성이 좋아졌고, 로직을 파악하기에도 쉬운 것을 볼 수 있다.



논리연산자


논리곱 연산자 &&

논리 곱 연산자는 &&로 사용한다.
&&연산자는 조건식을 1 또는 0으로 판단한다.

#include <stdio.h>
int main() {
	int a;
	printf("아무 숫자나 입력하세요 : " );
	scanf("%d", &a);

	if (a >= 10 && a < 20) {
		printf("%d는 10이상, 20미만인 수입니다.",a);
	}
	return 0;
}

비트연산자에서는 & 하나만을 사용하는데,
&는 비트 사이의 AND연산을 사용할 때 사용한다.

조건식 사이의 관계를 표현하기 위해서는 &&를 사용한다.


SCE

컴퓨터는 연산시 Short Circuit Evaluation을 한다.

조건 식에서 && 연산자를 만나면, 앞의 조건이 false(0)이라면 뒤의 조건식을 연산하지 않는다.


논리합 연산자 ||

이 역시 비트연산자 |와 다르게 ||를 사용한다.

#include <stdio.h>

int main() {
	int height, weight;
	printf("당신의 키와 몸무게를 입력하세요:");
	scanf("%d %d",&height, &weight);

	if (height >= 190 || weight >= 100) {
		printf("당신은 거구입니다.");
	}
	return 0;
}

이 역시 조건 식의 좌우를 보고, 하나라도 참이면 if의 printf가 실행된다.


부정 !

#include <stdio.h>

int main() {
	int height, weight;
	printf("당신의 키와 몸무게를 입력하세요:");
	scanf("%d %d",&height, &weight);

	if (height >= 190 || weight >= 100) {
		printf("당신은 거구입니다.");
	}

	if (!(height >= 190 || weight >= 100)) {
		printf("당신은 거구가 아닙니다.");
	}

	return 0;
}

!는 조건식 안이 0이라면 1로, 1이라면 0으로 바꿔주는 부정연산자이다.

!연산자는 0이 아닌 값은 0으로 변환해준다는 특성이 있어서 변수의 값이 0인지 아닌지 판별할 수 있다.



continue, break

break

반복문을 탈출할 때 사용하는 키워드.
break은 break문을 감싸는 가장 가까운 반복문 하나를 탈출한다.

예를 들어, 이중중첩된 반복문의 제일 안쪽에서 break을 걸면 가장 안쪽 반복문 하나만을 탈출한다는 의미이다.

#include <stdio.h>

int main()
{
	int sum = 0, num = 0;
	while (1)
	{
		sum += num;
		if(sum > 5000)
			break;
		num ++;
	}

	printf("sum %d\n", sum);
	printf("num %d\n", num);
	return 0;
}

continue

continue를 실행하면 위치에 상관없이 실행중인 반복문의 조건검사 위치로 이동한다.
검사결과 반복조건이 여전히 참이라면, 반복문을 이어서 실행한다.

#include <stdio.h>

int main(void)
{
	int num;
	printf("start!\n");

	for (num = 1;num < 20; num++)
	{
		if (num % 2 ==0 || num % 3 == 0)
		{
			continue;
		}

		printf("%d\n", num);
	}

	return 0;
}



switch

► 조건에 따른 분기를 할 때 또 사용되는데 switch문이다.
► 단, if보다는 사용이 제한적이다.

#include <stdio.h>

int main(void)
{
	int num;
	printf("1이상 5이하의 정수를 입력하시오:");
	scanf("%d", &num);

	switch(num)
	{
		case 1:
			printf("1은 one\n");
			break;
		case 2:
			printf("2는 two\n");
			break;
		case 3:
			printf("3은 three\n");
			break;
		case 4:
			printf("4은 four\n");
			break;
		case 5:
			printf("5은 five\n");
			break;
		default:
			printf("이게뭐람?\n");

	}
	return 0;
}

► switch문의 괄호 안에는 전달되는 인자가 들어온다. 정수형 변수여야한다.
► 이 인자에따라 case 뒤의 인자로 판단한다.
► break은 케이스들을 구분해주는 역할을 한다.

break

switch문제서 break은 상황에따라 써야할수도, 쓰지 않아야할수도 있다.

#include <stdio.h>

int main(void)
{
	int num;
	printf("숫자를 입력하세요");
	scanf("%d", &num);

	switch(num)
	{
		case 1:
			printf("A1");
			printf("A2");

		case 2:
			printf("B1");
			printf("B2");

		default:
			printf("기본값");

	}

	return 0;
}

이렇게 case별로 break이 걸리지 않은 swtich문에서,
num으로 2가 1이 입력되면 아래의 모든 printf 문이 실행된다.

댓글남기기