본문 바로가기

학습공간/C, 프로그래밍기초

[4주차] 흐름의 분기 if else문과 continue, break문, switch문

반응형

8장

조건에 따른 흐름의 분기

- 예를 들어서 사칙연산이 가능한 계산기 프로그램을 구현한다고 가정해 보자.

1번을 누르면 덧셈을, 2번을 누르면 뺄셈을, 3번을 누르면 곱셈을, 4번을 누르면 나눗셈을..

이렇게 프로그램은 순간 순간마다 요구하는 바가 달라질 수 있다는 것이다.

우리가 배운대로 하면 덧셈, 뺄셈, 곱셈, 나눗셈을 계산해서 한 번에 출력이 가능하다.

 

커피 자판기를 보면 동전을 넣은 후, “선택 하세요” 라는 빨간 불이 들어오면서 사용자의 입력을 기다린다. 여기까지는 공통으로 실행되는 부분이다. 그러나 그 다음부터 사용자의 선택에 따라 실행의 형태가 다양해진다. 즉 프로그램 흐름의 분기가 생기는 것이다.

if 와 else

- if문에 의한 조건적 실행

if 라는 단어는 “만약에 어떠한 조건이 만족 된다면” 이란 뜻을 지닌다.

잠깐 1~100 까지 수에서 3의 배수이자 4의 배수인 수만 출력 하는 프로그램을 보자.

조건이 만족되어야 실행되는 것은 while문과 비슷하다. 하지만 while문과 달리 if문은

반복성이 아닌 단발성이라는 점이다. 그리고 for문이나 if문이나 내용이 한 줄짜리이면

중괄호로 묶어주기를 생략해도 되지만 프로그램을 쉽게 읽으려면 다 해주도록 하자.

위 프로그램에서는 if문의 조건이 3의 배수 그리고(&&) 4의 배수를 동시에 만족해야 출력.

 

- else 가 붙어서 “이거 아니면 저거”

이 프로그램을 보면 else 의 의미를 알겠는가? if 문이 참이라면 그 문장이 실행 될 것이다.

하지만 if 문의 조건이 불만족일 경우 else 문이 실행되는 것이다.

 

if, else if, else 에 대해서..

if 4개만 쓰면 되는 건데 뭐하러 else if 까지 써가면서 이렇게 길게 쓰냐 하는 생각이 들 것이다. 틀린 말은 아니다. 그러나 else 문장을 사용하면 맞는 조건을 찾았을 경우

나머지 조건 검사(else if)를 모두 건너뛰고 넘어간다는 장점이 있다.

즉, 조건 A를 만족하는 경우 “요거”를 실행하고 나서, 나머지 조건 검사는 하지도 않고

건너뛴다는 것이다. 따라서 불필요한 비교 연산의 수를 줄일수 있다.

 

다음 장의 프로그램은 아까 했던 것과 같은 내용의 소스 이다.

요거 아니면 이거 아니면 그거 아니면 저거 아니면 쩌거를 실행 하라. 라는 내용이다.

다시 말해 요거가 아니면 이거를 실행 하고 이거가 맞으면 나머진 안 보겠다는 뜻이다.

 

조건 연산자라 불리는 재미있는 연산자

- if ~ else 문을 보다 간결히 표현하는데 사용할 수 있는 연산자가 있다.

이름하여 조건 연산자’ 혹은 ‘삼항 연산자 라고도 불린다. 피연산자의 수가 세 개이기 때문이다. 조금 어색할 지도 모르지만 가끔 쓰이기 때문에 알아두면 좋다.

정수를 입력 받고 그 정수가 0 보다 작으면? ‘-’문자를 크면 ‘+’문자를 ch 에 저장.

그리고 ch 가 +문자라면? 양수 출력 아니면 음수 출력.

절대 값 : %d 자리에 입력받은 정수가 음수이면? -1을 곱해서 출력 아니면 그냥 출력.

 

문제 1]

1부터 99 사이에 있는 정수 중에서 7의 배수이거나 9의 배수인 정수를 출력 해보자.

 

문제 2]

두 개의 정수를 입력 받아서 두 수의 차를 계산하는 프로그램을 구현해 보자.

단 무조건 큰 수에서 작은 수를 뺀 결과를 출력해 줘야 한다. 예를 들어서 입력된 두 개의

수가 순서대로 12, 5 라면 12-5를 계산해야 하고, 4, 16 이라면 16-4를 계산해야 한다.

 

문제 3]

학생의 최종 학점(과목별 학점이 아니다)을 계산하는 프로그램을 작성하자. 학생의 성적이 90점 이상이면 A, 80점 이상이면 B, 70점 이상이면 C, 50점 이상이면 D이고 그 미만은 F.

프로그램 실행 시 순서대로 국어, 영어, 수학의 점수를 입력 받는다. 그리고는 평균을 구한 다음 그에 적절한 학점을 출력해 주면 된다.

 

문제 4]

위의 조건 연산자(삼항 연산자)를 이용한 프로그램을 if ~ else 문으로 바꿔보자.

 

 

 

 

 

 

루프의 생략과 탈출: continue & break

7장에서 세 가지 형태의 반복문을 공부 하였는데, 모든 반복문에는 기본적으로 루프를 빠져나가기 위한 조건문이 들어가 있다. 그러나 경우에 따라서는 이러한 조건문에 상관없이

빠져나가야 하는 경우가 종종 발생 한다. 이렇게 조건문에 상관없이 반복문을 빠져나갈 때 쓰는 것이 break문이다. 그냥 break; 를 걸어주면 바로 반복문을 빠져나가게 된다.

 

그러나 continue문은 조금 다르다. break문을 이해 한 후 설명 하겠다. 일반적으로

반복문 안에 있는 if 문 안에서 자주 사용된다.

sum 변수에 num을 증가 시키며 점점 더해 준다. sum 에는 0+1+2+3...이렇게 증가하다가

5000이 넘게 되면  break; 가 걸리도록 해 놓았다. if 는 while 안에서 sum이 5000이 넘기 전까지 실행되지 않는다. if 가 실행되는 순간 break 가 걸려 while 문을 빠져나가게 되는 것이다.

 

다음으로 넘어가는 continue

continue문은 break문처럼 루프를 빠져 나가는 것이 아니다. 돌던 루프의 남아있는 부분을 그냥 건너뛰는 것이다. 다음 예제는 0부터 19사이에 있는 정수를 출력하되 2의 배수이거나 3의 배수인 정수를 출력에서 제외시키는 프로그램이다.

break문이 실행되면 반복문을 바로 빠져나와 다음 문장을 실행한다.

반복문 안에서 continue문이 실행되면 뒤의 남은 부분을 생략하고 다시 반복문 조건검사로 올라간다. 다시 말해 break문은 아래쪽으로, continue는 위쪽으로 올라간다고 보면 된다.

 

문제 1]

구구단을 출력하되 짝수단(2단, 4단, 6단, 8단)만 출력을 하게끔 하자. 또한 2단은 2X2까지

4단은 4X4까지 8단은 8X8까지만 출력하게끔 프로그램을 구현해 보자. continue와 break문을 잘 사용해서 풀어보길 바란다.

 

문제 2]

다음 식을 만족하는 모든 a와 b를 구하는 프로그램을 구현해 보자.

 

     a b

  + b a

--------

     9 9

 

2중 for문을 이용해 풀어보길 바란다.

출력 결과물은 18+81, 27+72 등등이 있다.

 

switch문의 기본적 이해

- switch문도 if ~ else문과 마찬가지로 조건에 따라 프로그램의 흐름을 분기시키는 목적으로 사용된다. 복잡한 if ~ else 문장을 간결해 보이게 한다는 장점을 지니고 있으나 사용될 수 있는 영역은 if ~ else 에 비해 제한적이다.

switch 문은 하나의 인자(n)를 받고 있다. 전달되는 인자는 intchar 형이 되어야 한다.

n은 실행할 영역을 결정짓기 위한 정보가 된다.

switch 문의 안을 보면 case 1, case 2 이런 식으로 실행 영역을 구분하고 있다.

여기서 case 1 이라 함은 “첫 번째 경우”를 의미하는 것이 아니라, “switch 문으로 전달된 인자 값이 1인 경우”를 의미하는 것이다. 이러한 case 문은 얼마든지 추가 할 수 있으며 반드시 콜론(:)을 붙여줘야 한다.

switch 문의 마지막에는 default문이 존재한다. 이는 switch문으로 전달된 n에 해당하는 case가 없을 경우, 기본적으로 실행되는 영역이다(else와 유사). default문은 반드시 존재해야 하는 것이 아니므로 필요에 의해서 선언하면 된다.

마지막으로 모든 case문의 끝에는 break문이 포함되어 있음을 볼 수 있다. break문 포함시킨 이유는 switch 문의 특성 때문이다. 만약 n의 값이 2일 경우 case 1 으로 가서 비교를 한다. 다르다는 것을 확인하고 나서 다음에 등장하는 case 2로 가서 같다는 것을 확인하고 그 영역을 실행, breakswitch문을 빠져 나간다. break가 없다면 case 3, 4, 5, default까지 모두 실행하게 된다. break; 에 주석을 달아보고 실행해 보기 바란다.

 

이쯤 되면 break문을 반드시 붙여야 하는 불편함에 대해서 불만을 토로할 수도 있겠다.

switch문의 특성을 잘 활용한 다음 프로그램을 보자.

 

숙제

1. 섭씨온도를 화씨온도로, 화씨온도를 섭씨온도로 변환하는 프로그램을 만들어보자.

공식 F = 1.8 X C + 32

 

        실행 예:

        섭씨 입력은 1, 화씨 입력은 2를 누르세요..        ex) 1 (사용자입력)

        섭씨 입력 :                                                ex) 12.3 (사용자입력)

        변환된 화씨 : 54.140000 (출력결과)

 

반응형