newmin
개발 이것저것
newmin
전체 방문자
오늘
어제
  • 전체 보기
    • Language
      • C
      • Java
    • Algorithm
      • Problem Solving
    • Dev
      • 개발일기장
      • Android
      • Spring
      • 회고록
    • Github
    • IDE
      • eclipse
      • visual studio 2019
    • 대외활동
      • 사피엔스4.0 대학생 서포터즈
      • 코드클럽 SW교육기부단
      • 한국대학생IT경영학회 KUSITMS

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 알고리즘
  • 코드클럽
  • C언어알고리즘
  • KB디지털멘토링
  • 안드로이드
  • 프로그래밍
  • 대학생 교육기부
  • 사피엔스4.0
  • C언어기초
  • 대학생 대외활동
  • 코린이
  • 사피엔스4.0 서포터즈
  • code club
  • 이클립스에러
  • SW교육기부
  • 중현초등학교
  • 백준C언어
  • 자바
  • 백준
  • 깃허브
  • eclipse
  • 개발자
  • 대학생 서포터즈
  • 코딩
  • 이클립스
  • SW교육기부단
  • c언어
  • 큐시즘
  • BOJ
  • 코드클럽 SW교육기부단

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
newmin

개발 이것저것

[C언어 기초 정리] #4 조건문
Language/C

[C언어 기초 정리] #4 조건문

2022. 1. 23. 19:36

해당 게시물은 2020년 1학기 교내에서 진행한 튜터링 활동 '같이피움' 에 튜터로 활동하며 쓰였던 자료를 정리한 것 입니다.

​

이곳에 적은 글들은 전부 튜티에게 설명해주기 위해 정리한 내용으로 틀리거나 부족한 내용이 있을 수 있습니다. 그러므로 지적/수정 댓글은 언제나 환영입니다 :)


지금까지 우리는 C언어가 절차 지향 프로그래밍 언어라는 것과 입출력, 변수와 연산자를 사용해서 여러가지 연산이 가능하다는 것을 배웠다. 이제 첫 발걸음을 떼었으니 프로그래밍 기초의 꽃인 '조건문'과 '반복문'을 배워보자. 

 

프로그래밍을 하다보면 개발자가 의도한대로 실행의 흐름을 바꿔주어야 하는 경우가 무척 많다.

 

예를 들어, 사용자의 입력을 무한히 받을 수 있고, 1이라고 입력했을 때만 프로그램을 끝내게 하는 코드를 짜보자.

일단 입출력을 배웠으니까 사용자 입력까진 받을 수 있다. 그런데 무한히..? 1이라고 입력했을 때만 종료...?

변수, 연산자 개념으로는 도저히 프로그래밍할 수 없다.

 

왜냐 아직 우리는 '조건문'과 '반복문'을 배우지 않았으니까!


조건문

조건문은 주어진 조건에 따라 프로그램의 흐름을 바꾸는 구문이다. 이제는 프로그램의 흐름을 직접 설계하는것이기 때문에 이전에 배운 내용을 잘 응용해서 숙지하는게 중요하다. 조건문은 C언어 뿐만 아니라 모든 프로그래밍 언어에서 공통적으로 사용되기 때문에 더욱 중요하다고 할 수 있다.

 

기본 형식

if (조건식)
	조건식이 참일 경우의 결과;
참과 거짓의 상관없이 실행되 문장들...

먼저 if 라는 키워드를 사용해 조건문을 구성해준다.

만약, 해당 조건식이 참이라면 if문 바로 아래의 코드가 실행되고나서 가장 아래 코드가 실행된다.

조건식에 거짓된다면 if문을 빠져나와 가장 아래 코드만 실행된다. 

 

즉, if문의 조건식이 참일 때에는 바로 아래 코드부터, 거짓일 때에는 if문과 상관 없는 코드부터 실행된다는 것이다.

 

이때 주의할 점은 if문 조건식 뒤에는 세미콜론(;)이 없다.

 

예제 코드로 보면 이해가 더 쉬울 것이다.

int x = 10;
if (x == 10)
	printf("x는 10이 맞습니다.\n");
printf("x는 숫자가 맞습니다.\n");

 

이 경우라면

x는 10이 맞습니다.
x는 숫자가 맞습니다.

가 출력된다.

 

만약, x가 5라면?

x는 숫자가 맞습니다.

만 출력될 것이다.


결과가 하나가 아닐 경우

위의 기본 형식처럼 결과가 하나일 때도 있지만

조건에 따라 하나의 결과가 아닌 여러가지 코드가 실행될 때도 있을 것이다. 그럴 때에는 괄호를 사용하면 된다.

if (조건식) {
	참일 경우의 결과 코드들 작성
    ...
    }

 

int x = 10;
if (x == 10) {
	printf("x는 10이 맞습니다.\n");
    x = 5;
    printf("x는 이제 10이 아닙니다.\n");
    }
printf("x는 숫자가 맞습니다.\n");

이렇게 if문을 괄호로 묶어준다면 이제 조건식이 참일 때, if문 바로 아래 코드만 실행되는 것이 아니라 if문 아래의 괄호에 해당하는 코드들이 모두 실행된다.

 

이때, 괄호를 묶어서 적는 것은 단일문에서도 사용 가능하다.

x는 10이 맞습니다.
x는 이제 10이 아닙니다.
x는 숫자가 맞습니다.

여기서 잘 생각해보면 가장 아래 줄의 코드는 if문의 조건식이 참이든, 거짓이든 상관없이 결과로 출력된다.

왜냐하면 if문과는 전혀 상관없는 위치의 코드이기 때문이다.

 

if문의 바로 아래 줄에 나오는 코드이거나 또는 if문의 바로 직후에 나오는 괄호에 나오는 코드가 아닌 이상 if문과는 별개의 코드임을 명심하자.


조건이 하나가 아닐 경우

프로그램의 실행 흐름을 설계하다보면 조건이 하나가 아니라 여러가지가 나올 때가 있다.

그럴 때에는 if문을 적절하게 설정해주면 되는데 두 가지 방법이 있다.

이 둘의 차이점은 명확하기 때문에 헷갈리지 않도록 하자.

 

#1 if-else 문 사용하기

if (조건식) {
	조건식이 참일때의 결과 코드
    }
else {
	조건식이 거짓일때의 결과 코드
    }

if-else문은 조건식에 대해 참과 거짓 둘 다의 결과가 필요할 때 사용한다.

즉, else 문은 if문의 조건식이 거짓일 때 실행된다는 것이다.

 

예제 코드를 보자

if (x == 10)
	printf(“x는 10입니다.”);
else
	printf(“x는 10이 아닙니다.”);
printf(“수고하셨습니다.”);

이 경우라면 x가 10일 때는 if문이, x가 10이 아닌 경우라면 else문이 실행되고 마지막 줄의 코드는 조건과 상관없이 무조건 실행이 된다.

 

#2 if문 다중으로 사용하기

if(조건식1)
	결과 코드;
if(조건식2)
	결과 코드;

if-else문의 경우에는 하나의 조건식에 대해 참인지 거짓인지를 판별한다.

그런데 if문을 여러개 사용할 경우에는 상황이 달라진다.

if문 하나에는 무조건 하나의 조건식이 필요하고, 프로그램은 if문을 만날 때마다 해당 조건에 대한 참/거짓을 판별한다.

즉, if문을 다중으로 여러 개 사용한다면 각각의 if문마다 조건을 본다는 것이다.

 

예제 코드를 보자

int x = 4;
if (x < 10)
	printf(“x는 10보다 작습니다.\n”);
if(x < 5)
	printf(“x는 5보다 작습니다.\n”);
printf(“수고하셨습니다.”);

x는 4이므로 1번 if문에서 참의 결과가 나오고, 2번 if문에서도 참의 결과가 나올 것 이다.

x는 10보다 작습니다.
x는 5보다 작습니다.
수고하셨습니다.

만약 x가 6이라면?

x는 10보다 작습니다.
수고하셨습니다.

 

if-else문과 다중 if문의 명확한 차이점은 

조건식을 공유하느냐 안하느냐

if-else문은 조건식 하나에 대한 참/거짓을 따지어 결과를 도출하고

다중 if문은 각각의 조건식에 대한 참/거짓을 따진다.

 

그런데 if-else문은 다중 if문처럼도 사용이 가능하다.

int x = 4;
if (x < 10)
	printf(“x는 10보다 작습니다.\n”);
else if(x < 5)
	printf(“x는 5보다 작습니다.\n”);
else 
	printf("x는 10보다 큽니다.\n");
printf(“수고하셨습니다.”);

이렇게 else if 문을 사용하면 새로운 조건식을 하나의 if-else문 안에서 더 추가할 수 있다.

그런데 다중 if문과 출력 결과는 명백히 다르다.

x는 10보다 작습니다.
수고하셨습니다.

분명 else if의 조건식에도 참의 결과를 가지지만 if-else 문의 경우에는 하나의 조건식이 참이라면 그 외의 조건은 무시한다. 그래서 x는 4일 때, x < 10의 명제에 참을 가지므로 그 하위의 if-else문은 무시하게 된다.

 

다중 if 문이라면 하나하나의 조건식을 일일히 따지기 때문에 무시하지 않을 것이다.

정리하자면 이렇다.

//if-else문 (하나의 조건식)
if (조건식)
	참일 경우의 결과;
else 
	거짓일 경우의 결과;
    
// if-else문 (여러개의 조건식)
if (조건식1)
	조건식1이 참일 경우의 결과;
else if(조건식2)
	조건식2가 참일 경우의 결과;
else
	두 조건 다 거짓일 경우의 결과;
    
// 다중 if문
if(조건식1)
	조건식1이 참일 경우의 결과;
if(조건식2)
	조건식2가 참일 경우의 결과;
else
	조건식2가 거짓일 경우의 결과;

조금은 감을 잡았는지?


복합 if문

위에서 본 것 처럼 조건식에 대한 참과 거짓의 결과를 단순히 줄 때도 있지만 

조건 안에 또 다른 조건이 있을 수 있다.

 

예를 들어, 지금 구매한 것이 사과인가? 그렇다면 그 사과는 청사과인가 홍사과인가?

처럼 하나의 조건식에 대한 참과 거짓이 결정되고 나서 또 다른 조건이 필요한 경우이다.

 

우리는 이럴 때 복합 if문을 사용하여 해결 할 수 있다.

if (조건식1) {
	if(조건식2)
		조건식1과 조건식2가 모두 참일 경우의 결과;
	else
		조건식1은 참이지만 조건식2는 거짓일 경우의 결과;
}
else
	조건식1이 거짓인 경우의 결과;

이처럼 복합 if문은 if문 안에 또 다른 if문이 존재하는 경우이다.

이는 if문 안에서도 가능하고, else-if문, else문 안에서도 사용 가능하다.

 

복합 if문을 아까 사과 예제에 대입해보면 이런식으로 코드를 짤 수 있다.

if (strcmp(fruitName, 'apple')) {
	if(strcmp(fruitColor, 'green'))
		printf("이 사과는 초록 사과가 맞습니다.\n");
	else
		printf("이 사과는 빨간 사과가 맞습니다.\n");
}
else
	printf("사과가 아닙니다.\n");

해당 예제 코드는 이해를 돕기위한 코드이므로 모르는 것이 있다해도 조건문의 형식만 보고 익히도록 하자.

 

'Language > C' 카테고리의 다른 글

[C언어 기초 정리] #3 연산자  (0) 2022.01.04
[C언어 기초 정리] #2 변수와 자료형  (0) 2021.09.08
[C언어] gets, puts 문자열 입출력 함수  (0) 2021.08.22
C언어 스택(stack)  (0) 2021.08.05
[C언어] LIS (Longest Increasing Subsequence) 최장 증가 수열 DP/binary search  (0) 2021.08.03
    'Language/C' 카테고리의 다른 글
    • [C언어 기초 정리] #3 연산자
    • [C언어 기초 정리] #2 변수와 자료형
    • [C언어] gets, puts 문자열 입출력 함수
    • C언어 스택(stack)
    newmin
    newmin
    매일 작심삼일로 작심일년

    티스토리툴바