본문 바로가기

프로그래밍 언어들/C

8장 - C언어 조건문(Conditional statement in C)(2)

8장 - C언어 조건문(Conditional statement in C)(2)


1. switch~case

주어진 변수 또는 수식에 대해, 그 값에 따라 일치하는 각각의 case 를 수행하는 실행문입니다.


 
  1. int main( void)
  2. {
  3.     switch( 조건 or 변수 )
  4.     {
  5.     case a :
  6.     case b :
  7.         ....
  8.     default :
  9.     }
  10. }


구조는 위의 소스 코드와 같습니다. switch 뒤의 괄호 안에 조건 또는 변수가 들어가게 됩니다.

그리고 그 값에 따라 일치하는 case 문을 수행하는 구조입니다. 맨 마지막의 default 는 if~else문의 else와

같은 역할로 위의 case에 만족하는 값이 없을 경우 수행하게 됩니다.


 
  1. int main( void)
  2. {
  3.     int number;
  4.  
  5.     number = 2;
  6.  
  7.     switch( number )
  8.     {
  9.     case 1 : printf("1입니다.\n"); break;
  10.     case 2 : printf("2입니다.\n"); break;
  11.     default : printf("1도 아니고 2도 아닙니다. \n");
  12.     }
  13. }


위의 소스코드를 보시면, number라는 정수형 변수의 값에 따라 swich~case 문이 수행합니다.

number의 값이 '1'이면, case '1'을 수행할 것이고, '2'이면 case '2'를 수행할 것입니다.

둘 다 아니라면 default를 수행합니다. 위의 예제에서는 number의 값이 2이기 때문에 case 2를 수행하여

"2입니다."가 출력이 됩니다.

(1) break의 유무


아래 소스코드를 주목해 주십시오.

 
  1. int main( void)
  2. {
  3.     int number;
  4.  
  5.     number = 2;
  6.  
  7.     switch( number )
  8.     {
  9.     case 1 : printf("1입니다.\n");
  10.     case 2 : printf("2입니다.\n");
  11.     default : printf("1도 아니고 2도 아닙니다. \n");
  12.     }
  13. }


이전 소스코드와 다른 점을 눈치채셨나요? 바로 각각의 case 문 맨 뒤에 "break;" 가 사라졌습니다.

위의 소스코드도 문법적으로 틀린 것이 아니지만 논리적인 오류를 범하게 됩니다.

먼저 "break"란 분기문으로서 뒷 장에서 반복문을 할 때 자세하게 설명드리겠습니다.

지금은 "switch~case문을 끝내는 도구"라고 생각하시면 됩니다.

위의 소스코드를 실행하면 number 값이 2이기 때문에 case 2를 수행합니다. 그리고 끝나는 것이 아니라

밑에 있는 default도 수행하게 됩니다. 즉, 각 case의 맨 뒤에 break가 없으면 계속해서 아래에 있는 case 나 default를 수행하게 되는 것입니다. 만약 number 값이 1이라면, case 1을 수행하고, case 2도 수행하고, default도 수행하게 됩니다. 상황에 맞게 break 유무를 선택하여 알맞는 프로그램을 구현하시길 바랍니다.


2. 삼항연산자

삼항연산자는 이름 그대로 항이 3개인 연산자입니다.

위의 두 조건문에 대해 충분히 이해하셨다면, 쉽게 이해하실 것입니다.


  1. int main( void)
  2. {
  3.     ( 조건 ) ? A : B;
  4. }


위의 구조를 보시면 조건에 따라, 조건이 참이면 A를 반환(수행)하고 조건이 거짓이면 B를 반환(수행)하는

간단한 구조입니다.


 
  1. int main( void)
  2. {
  3.     int number = 2;
  4.  
  5.     ( number > 1 ) ? printf("1보다 큽니다.\n") : printf("1보다 작습니다.\n");
  6. }


위의 예제를 보시면 조건부분에 number > 1이 들어가있고,

A 부분에는 printf("1보다 큽니다.\n")

B 부분에는 printf("1보다 작습니다.\n") 를 작성했습니다.

number > 1의 수식이 참이므로, "1보다 큽니다."라는 문구가 화면에 출력됩니다(A 수행).


 
  1. int main( void)
  2. {
  3.     int n, m;
  4.     int max;
  5.  
  6.     n   = 10;
  7.     m   = 20;
  8.  
  9.     max = ( n > m ) ? n : m;
  10.  
  11.     printf("%d\n", max);
  12. }


이전 예제처럼 바로 출력하는 것이 아니라, 위의 예제와 같이 사용 가능합니다.

n > m(조건)를 비교하여, 참일 경우 n(A)을 값을 반환(수행)하고, 거짓이면 m(B)값을 반환(수행)합니다.

즉, n과 m 중에 큰 수를 반환하여 그 값을 max에 대입하는 것입니다.

각 상황에 맞는 조건문을 사용하여 프로그래밍하는 것이 본인의 실력이 됩니다.


3. 실습 문제

(1) switch~case 문을 이용하여 점수(0~100)를 입력받아 90~100이면 A, 80~89면 B, 70~79면 C이고 나머지는 F를 출력하라. (단, case 문은 5개 이하만 사용할 것)

(2) switch~case 문을 이용하여 학점(A,B,C,F)를 입력받아 A이면 90점 이상입니다, B이면 80점 이상입니다. C이면 70점 이상입니다.를 출력하고 F이면 70점 미만입니다.를 출력하라. (단, A,B,C,F가 아닌 다른 문자를 입력할 경우 "잘못된 입력"이라고 출력할 것)

(3) 4개의 정수를 입력받고, 삼항연산자를 이용하여 4개의 수 중 가장 큰 값을 출력하시오.

 

※ 정답은 아래 링크

http://leeyongjeon.tistory.com/category/프로그래밍%20언어들/C%20문제풀이