25학번과 함께 배우는 C언어 프로그래밍(2) - 조건문

2025. 3. 28. 02:44C_Programming

 

저번 글에서는 가장 기초적인 부분부터 시작해서, printf( )와 scanf( )까지 알아보았습니다.

이번에는 저번 글에 이어서, 코딩에서 자주 사용하는 '조건문'에 대해서 배워보도록 하겠습니다.

 

조건문이 무엇일까??

만일 코드에 조건문이 없다면(=선택 구조가 없다면) 프로그램은 항상 똑같은 행동만 되풀이하게 될 것입니다.

조건문은 바로 이러한 문제를 바로잡기 위해 사용하는 코드라고 보시면 되겠습니다.

 

 

조건문에는 크게 if문, else문, switch문 등이 있는데, 오늘은 

'if문, else문, else if문, 중첩 if문(nested-if문)'

총 4가지만 알아보도록 하겠습니다.


if문(기초)


그럼 먼저 if문을 사용한 가장 짧은 예시를 먼저 보여드리겠습니다.

 

if문의 사용 방법입니다.

if( )의 괄호 안에 조건을 작성해야 합니다.

저 같은 경우에는 1>0이라는 조건을 입력하였고, 전체적으로 해석하자면

'만약 1>0이 참이라면 True 를 출력하라'는 코드입니다.

 

여기서 우리는 '참' 과 '거짓' 에 대해서 반드시 알고 가야하는데요.

1>0, 100>99 와 같은 것을 보고 저희는 '참'이라고 부릅니다.

만약 1<0, 100<99 면 '거짓'이라고 부릅니다. 간단하죠??

 

컴퓨터, C언어에서는

거짓을 '0'으로 표기하고, 참은 '0이 아닌 모든 수'

로 표현합니다.

// (참고) 참은 0이 아닌 모든 수로 표기되긴 하지만, '보통은' 1로 표현합니다! //

 

돌아와서, 저 코드를 실행하면 1>0 이 참인지 거짓인지를 먼저 거치고, 결국 참이기 때문에 "True"가 출력되겠죠?

그러면 1>0 대신 1<0을 넣고 다시 실행해볼까요??

이러면 1<0이 거짓이기 때문에 아무것도 출력되지 않을겁니다..

 

if의 필요성이 여기에서 나오는 겁니다. 만약 if문이 존재하지 않았더라면, 계속 True만 프린트하겠죠?

 

 

 

그럼 아주 조금 더 어려운 코드를 보겠습니다.

 

아까보다는 좀 더 복잡해보이죠? 일단 scanf까지는 배워서 아는데, 도대체 %가 뭔지 ==가 뭔지.... 분명 모르는게 좀 있으실 거라 생각합니다. 그럼 차근차근 설명하겠습니다.

 

먼저 %는 연산기호 중에 하나입니다.

산술 연산기호는 5가지가 있는데, +(덧셈), -(뺄셈), /(나눗셈), *(곱셈), 그리고 마지막이 %(나머지)입니다.

말 그대로 어떠한 수를 어떠한 수로 나눈 '나머지'를 의미하는 기호입니다. (ex. 100 % 5 = 0, 8 % 3 = 2 등...)

%는 그래도 모든 언어에서 같은 의미로 사용할 거라 알고 계셨던 분들이 없지는 않으셨을 겁니다.

 

 

다음은 == 입니다. =는 당연히 등호라고 알고 있는데, 이게 왜 두 개가 붙어있지? 싶으신 분들 있을겁니다.

=는 C언어에서는 값을 '저장'하는 기능을 합니다. (  a = 0이면 a라는 변수에 0을 저장 )

 

그러나 ==는 좀 역할이 다릅니다. ==는 비교연산자로써, if문 등에 사용되는데, 값을 참 또는 거짓으로만 내보냅니다.

 

이렇게 'a의 값이 5라면'의 용도로 사용됩니다. 차이를 아시겠죠?

 

 

 

마지막으로 &&와 ||에 대해서 설명해보겠습니다

&를 뭐라고 읽죠? 모두가 AND라고 알고 있을 겁니다. 그렇기에 &&는 조건문에서 '그리고'의 역할을 합니다. 별 거 없어요.

AND가 있으면 뭐가 있어야 하죠? 맞습니다! OR도 있어야죠.

||는 조건문에서 '또는'의 역할을 합니다.

 

그럼 정리해볼까요?

 

만약 (a%2==0) || (a>5) 라는 코드의 일부분이 있다면,

이는 'a를 2로 나눈 나머지가 0이거나, a가 5보다 크다면' 을 의미하겠네요.

 


if문(응용)


 

 

a, b, c를 입력받고, 이 중에서 가장 큰 수를 출력하는 코드를 작성했다고 가정해봅시다.

이 코드를 어떻게 작성하실 건가요??

이런 경우에는 그냥 간단하게 if를 여러 개 사용하면 됩니다.

 

만약 a가 가장 큰 숫자라고 합시다. 그러면 'a가 가장 큰 수이면' 이 필요하겠죠.

(a > b) && (a > c)a가 b보다 크고, a가 c보다 크면~ 을 의미합니다.

 

같은 방법으로 if를 반복 사용하여 b, c에 대한 코드를 똑같이 작성해줍시다.

 

빌드 후 디버깅하여 정수 3개를 입력하면 이제 가장 큰 정수 하나가 출력되겠네요.

 


else문


 

else문은 if문에 해당하는 조건이 참이 아닐 시에 사용되는 코드입니다.

아마 예시를 보면 바로 이해가 될 겁니다.

 

저번 글에서 이미 scanf까진 배웠으니, 세부적이 설명은 따로 하지 않겠습니다.

이 코드에서 우리가 자세히 봐야할 것은 if 다음에 있는 else입니다.

scanf에서 입력받은 정수 a, b를 대소비교하는건데, 만일 a가 b보다 크면 a를 출력하는 코드를

위에서 if절로 입력해놓은 것이 보이네요.

 

else는 if절에서 참이라는 판정이 나오지 않으면 다음으로 실행되는 코드입니다.

때문에 만약 a가 b보다 작으면 b를 실행시키고 싶다. 그러면 위처럼 else를 사용하면 됩니다. 정말 간단하죠?

 

 

 


else if문


 

세 번째로, else if문 입니다.

else 와 if 가 합쳐진 명령어로, if (A) ~~ else if(B) ~~ else처럼 사용합니다.

(A이거나, B이거나, 나머지) 

말로 설명하긴 어려우니 사진부터 바로 보겠습니다.

 

이 코드는 성적 처리를 해주는 코드입니다.

점수를 입력하면 점수에 따라 학점을 출력하는 코드입니다.

90점 이상은 A, 80점 이상 90점 미만은 B, 70점 이상 80점 미만은 C, 70점 미만은 F  

입니다.

 

만약 else if를 사용하지 않고 if만 사용한다면 코드를 더 길게 작성해야해서 귀찮음과 피곤함을 느끼게 됩니다.

a(입력된 값)이 80점 이상 90점 미만인 B를 출력하는 부분을 보면, if문 만 사용할 땡는 if(( 90>a ) && (a >= 80))라고 해야하는 부분을

else if문을 사용한다면 간단하게 else if( a >= 80 )만 입력해도 됩니다.

 

이유를 아시나요?

앞에서 a >= 90으로 '90이상이면'을 거치고 else if문을 사용했기에 이미 90퍼 미만이라는 전제 하에 코드를 진행시켜 나가기 때문입니다.

 

아래도 계속 같은 원리로 입력한 것인데,

마지막 70점 미만인 부분에서는 굳이 else if( 70>a ) 말고 else{ }만 사용했었어도 괜찮았겠네요.

 


Nested-if 문(중첩 if문)


Nested-if문은 if문을 연달아 사용하지 않고 깔끔하고 간결하게 사용할 수 있는 조건문인데,

if(조건내용){ if(조건내용){ } } 과 같은 모양으로 생겼습니다.

 

그리고 사실 중첩 if문에서 if와 그 안에 들어있는 if문은 서로 AND관계로 연결되어 있어 사실상 if와 if사이의 &&도 생략하는 셈이 되겠습니다.

 

위 코드는 입력된 값이 90점 이상이고, 짝수일 경우에만 A를 출력하는 코드입니다.

아까 설명했던 대로 두 if문은 AND관계로 얽혀있기 때문에 92를 입력하면 A를 출력하지만,

91이나 88과 같은 두 조건 중 하나라도 맞지 않는 숫자를 입력하게 되면, 아무것도 출력되지 않게 됩니다.

 

 

 

 

오늘은 이렇게 간단한 조건문 4가지를 알아봤습니다.

유난히 말로 설명하기 복잡했던 부분이 꽤 있었고, 때문에 읽기 어지러웠을 수도 있는데, 긴 글 읽어주시느라 수고 많으셨습니다!