포털:고등학교/과학 계열 전문 교과/정보과학(2015 개정)/선택 실행 구조

위키배움터

선택 실행 구조[편집]

조건식의 계산 결과나 값에 따라 프로그램의 흐름을 변화시킬 수 있는 구조.

선택 실행 구조의 구성[편집]

  1. 단순선택
  2. 중첩선택
  3. 다중선택

선택 실행 구조의 조건식[편집]

비교 연산자와 논리 연산자가 이용되는 것이 일반적. 계산 결과가 참 또는 거짓이 되는 계산식이나 값도 사용 가능.

단순선택[편집]

어떤 상황에서만 추가적인 명령이 실행되도록 하는 구조.

조건에 따른 추가적 실행[편집]

  • 조건식의 계산 결과가 참인 경우에 실행 1 부분을 실행하고, 거짓인 경우에는 실행 1 부분을 실행하지 않고 지나간다.
  • 기본코드

if(조건식) { 실행 1... ; }

  • 조건식의 흐름

조건식의 계산 결괏값이 참(true)인 경우 그다음 코드블록에 작성한 명령들이 실행. 실행할 명령이 한단위(명령 또는 구조)인 경우코드 블록을 나타내는 중괄호를 생략.

예시) 음수 판별하기

정수(n) 한 개가 입력되었을 때, 음수인 경우에는 “minus”를 출력하고, 음수가 아닌 경우에는 “not minus”를 출력하는 프로그램을 작성.
#include <stdio.h>

int main( ) {

   int n;
   scanf("%d", &n);
   if(n<0)
   {
       printf("minus\n");
   }

else { printf("not minus\n"); } }

조건에 따른 선택적 실행[편집]

조건식을 검사한 후, 참과 거짓에 따라 서로 다른 명령들을 실행시키는 선택적 실행 구조를 만듬.


  • 조건식 평가

조건식의 결과는 참과 거짓이기 때문에 참이 아닌 경우에는 조건 검사를 다시 할 필요가 없다.

  • 조건식의 판단 결과가 참인 경우에는 실행 1 부분을 실행하고, 거짓인 경우에는 실행 2 부분을 실행한다.
  • 기본코드

if(조건식) { 실행 1... ; } else { 실행 2... ; }

예시) 성별 출력하기

한 개의 문자 ‘f’ 또는 ‘m’이 입력되면 해당 성별을 영어로 출력하는 프로그램을 작성해 보자.
#include <stdio.h>

char fm;

int main( ) {

   scanf("%c", &fm);
   if(fm=='f')
       printf("Female");
   else
       printf("Male");

}

중첩선택[편집]

단순 선택 구조의 중첩[편집]

단순 선택 구조를 중첩하거나 결합하여 만들어 냄.

  • 조건 선택 구조 안에 다른 조건 선택 구조를 중첩해 넣으면 여러 가지 상황에 따라 다르게 실행할 수 있는 복잡한 선택 구조를 만들어 낼 수 있다.
  • 기본코드

if(조건식 1) { 실행 1... ; } else { if(조건식 2) { 실행 2-1... ; } else { 실행 2-2... ; } }

  • 논리 연산자 활용

((조건식 1 == 참) && (조건식 2 == 참)) ((조건식 1 == 참) && (조건식 2 == 거짓)) 과 같이 논리 연산자를 이용한 표현도 가능하다.

예시) 부호 판별하기

정수(n) 한 개가 입력되었을 때, 양수인 경우 1, 0인 경우 0, 음수인 경우 -1을 출력하는 프로그램을 작성해 보자.(-263<=n<=263-1)
#include <stdio.h>

long long n; int main( ) { scanf("%lld", &n); if(n>0) printf("1\n"); else { if(n==0) printf("0\n"); else printf("-1\n"); } }

다중 선택 구조[편집]

선택 실행 구조를 중첩하면 다중 선택 실행 구조를 만들고 정숫값을 이용해 분기하는 다중 선택 구조를 사용. 단, C 언어에서는 정숫값에 의한 다중 선택만 가능.

  • 값에 따라 분기하는 다중 선택 구조를 사용할 수도 있다.
  • 기본코드

switch(정숫값으로 평가되는 변수나 수식, 문자) { case 값 1: 실행 1 ; break; case 값 2: 실행 2 ; break; case 값 3: 실행 3 ; break; default : 실행 }

  • if와 switch case

if( ) ~ else( ) 구조의 중첩을 사용하면 어떤 범위에 따라 다른 선택적 실행이 가능하지만,switch( ) ~ 구조를 사용하면 값에 따른 분기만 가능.

  • switch( ) case

switch(정숫값으로 평가되는 변수나 수식, 문자) { case 값 1: 실행 1... ; break; ... } 구조를 사용할 때에는 정숫값으로 평가되는 변수나 수식, 문자를 사용. break;를 사용하지 않으면 그다음 명령이 실행. case로 지정한 값이 없는 경우에는 default : 이후의 영역을 실행.

예시) 계절 출력하기

월이 입력되었을 때, 12·1·2인 경우에는 “winter”를, 3·4·5인 경우에는“spring”을, 6·7·8인 경우에는 “summer”를, 9·10·11인 경우에는 “fall”을 출력하는 프로그램을 작성해 보자.(1<=n<=12)
#include <stdio.h>

int s; int main( ) { scanf("%d", &s); switch(s) { case 12: case 1: case 2: printf("winter\n"); break;

case 3: case 4: case 5: printf("spring\n"); break;

case 6: case 7: case 8: printf("summer\n"); break;

default: printf("fall\n"); } }