포털:고등학교/과학 계열 전문 교과/정보과학(2015 개정)/선택 실행 구조
선택 실행 구조
[편집]조건식의 계산 결과나 값에 따라 프로그램의 흐름을 변화시킬 수 있는 구조.
선택 실행 구조의 구성
[편집]- 단순선택
- 중첩선택
- 다중선택
선택 실행 구조의 조건식
[편집]비교 연산자와 논리 연산자가 이용되는 것이 일반적. 계산 결과가 참 또는 거짓이 되는 계산식이나 값도 사용 가능.
단순선택
[편집]어떤 상황에서만 추가적인 명령이 실행되도록 하는 구조.
조건에 따른 추가적 실행
[편집]- 조건식의 계산 결과가 참인 경우에 실행 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"); } } |