최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지 선택 제어 구조

Download Report

Transcript 최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지 선택 제어 구조

최신 C 프로그래밍 언어
문제해결에서 프로그래밍까지
개정판
5장 : 선택 제어 구조
도서출판 - 인터비젼
1
5장 선택 제어 구조

학습목표




1.
2.
3.
4.
선택 제어구조의 문법을 이해한다.
if-else 제어구조 이해
switch case 제어구조의 이해
선택 구조 활용 방법을 이해한다.
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
2
목차

5장 선택 제어 구조
 예습시간
–
–
–
–
1. 선택 제어 구조 - if else 구조
[기초다지기] if else 구조 익히기
2. 선택 제어 구조 - switch case 구조
[기초다지기] switch 구조 익히기
 실습시간
– if else 구조 활용
– switch case 구조 활용
 연습시간
– 선택 제어문 분석
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
3
예습시간 – 1 교시
선택 제어 구조 – if else 구조
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
4
선택 제어 구조 – if else 구조

학습 개요




선택
기본
중첩
다중
제어 구조 중 if 구문에 대해 알아본다.
if 문 및 if else 구조의 이해
if 구문의 이해
선택 구조 (if ~ else if 구조)의 이해
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
5
선택 제어 구조 – if else 구조

제어구조의 종류
 순차 구조
– 한 문장 수행 후 순차적으로 다음 문장 수행 (일반적 프로그램
흐름)
 선택 구조
– 조건에 따른 분기 처리
 반복 구조
– 일정 구간의 반복 처리

if 선택 구조 기본
 if 문은 조건에 따른 제어 흐름을 결정
 if 문에서 사용되는 조건 식은 논리와 관계 연산자를 포함
 if 구조는 단지 참인 경우만을 처리
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
6
선택 제어 구조 – if else 구조

if 선택 구조 예
형 식
플로우차트
설 명
단일 종속 문장 구조
if(조건) 문장 1 ;
문장 2 ;
한 문장에 대한 수행 여부 판별
예> if(x> 0)
printf("x는 양수입니다") ;
다중 종속 문장 구조
if(조건){
문장 1 ;
...
문장 N ;
}
다음 문장 ;
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
블록({})을 이용한 다음 문장 수행 여부
판별
예> if(x> 0){
z=x+y ;
x++ ;
}
7
선택 제어 구조 – if else 구조

if else 구조
 참과 거짓인 경우를 나누어 처리
형 식
플로우차트
설 명
단일 종속 문장 구조
if(조건)
문장 1 ;
else
문장 2 ;
한 문장에 대한 수행 여부 판별
예> if(x> 0)
printf("x는 양수입니다") ;
esle
printf("x는 음수입니다") ;
다중 종속 문장 구조
if(조건){
문장들 ;
}else{
문장들 ;
}
다음 문장 ;
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
블록({})을 이용한 다음 문장 수행 여부 판별
예> if(x> 0){
z=x+y ;
x++ ;
}else{
x=x-y ;
}
8
선택 제어 구조 – if else 구조

중첩 if 구조




if문 안에 다른 if 문이 포함되어 표현되는 구조
조건에 의해 만족되는 결과에 대한 조건 비교
모든 조건 구조는 다른 조건 구조를 포함할 수 있다.
중첩 if 문 사용 예
–
–
–
–
–
–
–
–
–
–
–
–
–
–
01 #include <stdio.h>
02 void main(){
03
int x, y;
04
scanf("%d", &x);
05
if(x > 0){
06
y = scanf("%d", &y);
07
if(y > 0){
08
printf(" x 와 y는 모두 양수이다.“);
09
}else{
10
printf(" x는 양수 y는 0이나 음수이다.");
11
}else{
12
printf("x는 음수입니다.");
13
}
14 }
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
9
선택 제어 구조 – if else 구조

다중 선택 구조 (if ~ else if 구조)
 if else 구조의 확장
 조건에 맞지 않을 경우 다시 비교가 이루어짐
 비교 및 판단의 조건이 여러 개 일 경우 else 절 이하에
다시 if문 포함 시키는 구조
 사용 형식
형 식
플로우차트
설 명
if(조건){
...
}
else if(조건){
...
}else{
...
}
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
조건에 만족하지 않을 경우
다시 조건을 비교하는 과정
으로 이루어진다.
else if 구문은 무한히 반복될
수 있다.
10
선택 제어 구조 – if else 구조

다중 선택 구조 활용 예
 조건에 만족하는 등급 계산 프로그램
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
01 #include<stdio.h>
02 void main(){
등급 조건
03
int score;
성적 : 90 ~ 100
04
char grade;
성적 : 80 ~ 89
05
// 성적 입력
성적 : 70 ~ 79
07
printf("성적을 입력하세요 : “);
성적 : 60 ~ 69
06
scanf(“%d", &grade);
성적 : 60 미만
07
if(score >= 90) {
// 90~ 100 사이
08
grade = 'A';
09
}else if(score >= 80){ // 80 ~ 89 사이
10
grade = 'B';
11
}else if(score >= 70){ // 70 ~ 79 사이
12
grade = 'C';
13
}else if(score >= 60){ // 60 ~ 69 사이
14
grade = 'D';
15
}else{
// 60 미만
16
grade = 'F';
17
}
18
printf(" 성적 %d 의 등급은 %c 입니다. \n", score, grade);
19 }
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
등급
등급
등급
등급
등급
:
:
:
:
:
‘A'
‘B'
‘C'
‘D'
‘F'
11
[기초다지기] if else 구조 익히기

1. if문을 이용한 프로그램 (덧셈/뺄셈) 선택 구문
#include <stdio.h>
void main(){
char input;
int x, y , result;
// 입력 (A:덧셈, S:뺄셈)
printf(" 작업할 연산을 입력 (A:덧셈, S:뺄셈) ");
scanf("%c",&input);
if(input == 'A'){
printf("두수 입력 : ");
분석
scanf("%d%d", &x , &y);
1. 입력(A/S) 값에 의해 선택적으로 수행하는 구문
result = x + y;
2. 입력 문자에 대해 처음 if 문에서 A를, 두 번째 if
}
문에서 B를 비교하고 A일 경우 덧셈을, B일
if(input == 'S'){
경우 뺄셈을 수행하는 if 선택 구조
printf("두수 입력 : ");
scanf("%d%d", &x , &y);
3. 이프로그램은 if-else구조로 변경 가능
result = x - y;
<다음장>
}
printf("result = %d \n", result);
}
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
12
[기초다지기] if else 구조 익히기

1. if문을 이용한 프로그램 선택 구문 <계속>
#include <stdio.h>
분석
void main(){
1. if 문을 else if 구문으로 변경
char input;
2. 처음 if문의 비교가 만족할 때 그 다음의 if
int x, y , result;
문을 비교하지 않는 구조
// 입력 (A:덧셈, S:뺄셈)
3. 입력은 A 또는 S로 두 작업을 모두
printf(" 작업할 연산을 입력 (A:덧셈, S:뺄셈) ");
수행하는 것이 아니라 단지 하나만 수행
scanf("%c",&input);
4. 하나의 조건 만족 시 더 이상의 비교는
if(input == 'A'){
필요하지 않는 경우에 사용
printf("두 수 입력 : ");
scanf("%d%d", &x , &y);
result = x + y;
}
else if(input == 'S'){
printf("두 수 입력 : ");
작업할 연산을 입력 (A:덧셈, S:뺄셈) : A <enter>
scanf("%d%d", &x , &y);
54
result = x - y;
result = 9
}
printf("result = %d \n", result);
}
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
13
[기초다지기] if else 구조 익히기

2. 1번에서 곱셈,나눗셈, 다른 입력 처리 작업 추가
#include <stdio.h>
void main(){
char input;
float x, y, result;
printf(" 작업할 연산을 입력 (A:덧셈,S:뺄셈,M:곱셈,D:나눗셈) : ");
scanf("%c",&input);
if(input !='A' && input !='S' && input !='M' && input !='D'){
printf("연산 작업을 잘못 입력하였습니다.\n");
return;
}
분석
printf("두수 입력 : ");
1. 나눗셈 결과는 실수 값을 나타내야 하므로 입력과 출력
scanf("%f%f", &x , &y);
결과 모두 실수 형으로 변경
if(input == 'A')
2. (A,S,M,D) 작업 중 하나의 입력을 통해 if조건에서 이
result = x + y;
4개의 작업 중 하나가 선택되었는지를 확인한 후 두
else if(input == 'S')
수의 입력을 통해 덧셈, 뺄셈, 곱셈 나눗셈을 수행
result = x - y;
else if(input == 'M')
3. 나눗셈일 경우 분모가 0인지를 비교하여 0일 경우
result = x * y;
에러메시지 출력 후 종료
else if(input == 'D'){
if(y == 0){
printf("분모는 0값을 가질 수 없습니다.\n");
return;
}
작업할 연산을 입력 (A:덧셈,S:뺄셈,M:곱셈,D:나눗셈) : M <enter>
result = x / y;
두 수 입력 : 5 7 <enter>
}
result = 35.000000
printf("result = %f \n", result);
}
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
14
예습시간 – 2 교시
선택 제어 구조 – switch case 구조
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
15
선택 제어 구조 – switch case 구조

학습 개요
 선택 구조의 다른 형태인 switch case 구조를 이해한다.
 if 구조와의 차이점과 switch 문의 특징에 대해 알아본다.
 break 문을 다룬다.
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
16
선택 제어 구조 – switch case 구조

switch 구조
 if문은 참과 거짓이라는 두 조건에 대한 분기 제공
 3개 이상의 조건에 대해 중첩된 if나 다중 if문 사용으로
인해 프로그램의 복잡성 증가
 이러한 문제 해결을 위해 switch 구조 사용
 다중 조건에 대한 분기 구조 제공
switch case 구조
형 식
플로우차트
switch(정수식){
case label_1: 문장1;
문장2;
case label_2: 문장3;
case label_n: 문장4;
문장n;
default : 문장 n+1;
}
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
설 명
이 switch문은 이 정수식의
결과가 case문의 label 값과
일치하는지를 평가하여 동일
할 경우 해당 문장부터 처리
한다.
17
선택 제어 구조 – switch case 구조

switch 구문의 특징
 1. switch문에서 비교 식은 정수형 상수 값이어야 한다.
 2. case 문의 label 값은 정수나 문자 상수 또는 정수를
나타내는 식이다.
– 정확한 표기 :
» case 1 :
// label 1은 정수 상수 이므로 적합
» case 'A' :
// label 값이 문자 상수 ‘A'이므로 적합
» case 'B'*2 : // label 값이 정수를 만드는 식이므로 적합
– 잘못된 표기 :
» case 3.14 : // label은 실수 값이 올 수 없다.
» case a > b && b< c : // label에 관계나 논리 연산을 할 수 없다.
» case "Sunday" : // label에 문자열이 올 수 없다.
 3. default : 문장은 생략될 수 있다.
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
18
선택 제어 구조 – switch case 구조

switch case 활용 예
 두 개의 값과 하나의 연산자 입력을 통한 계산 결과 출력
–
–
–
–
–
–
–
–
–
–
–
–
–
–
01 #include <stdio.h>
02 void main(){
03
int x, y;
04
char op;
05
printf("두값과 연산자를 입력하여라 (예 10 + 4 ) \n");
06
printf("연산자의 종류는 ("+,-,*,/)이다. \n");
07
scanf("%d %c %d", &x, &op, &y);
08
switch(op){
09
case '+' : printf(" x + y = %d \n", x+y);
10
case '-' : printf(" x - y = %d \n", x-y);
11
case '*' : printf(" x * y = %d \n", x*y);
12
case '/' : printf(" x / y = %d \n", x/y);
13
}
14 }
 입력 데이터 : 4 – 2
출력 결과 :
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
4–2=2
4*2=8
4/2=2
?
19
선택 제어 구조 – switch case 구조

break 문
 해당 지점에 속한 블록을 빠져 나오는 역할을 수행
 자신이 속한 하나의 블록("{ }")만을 빠져 나온다.
 break문을 포함하여 이전 프로그램 수정
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
01 #include <stdio.h>
02 void main(){
03
int x, y;
04
char op;
05
printf("두값과 연산자를 입력하여라 (예 10 + 4 ) \n");
06
printf("연산자의 종류는 ("+,-,*,/)이다. \n");
07
scanf("%d %c %d", &x, &op, &y);
08
switch(op){
09
case '+' : printf(" x + y = %d \n", x+y);
11
break;
12
case '-' : printf(" x - y = %d \n", x-y);
13
break;
14
case '*' : printf(" x * y = %d \n", x*y);
15
break;
16
case '/' : printf(" x / y = %d \n", x/y);
17
}
18 }
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
20
[기초다지기] switch 구조 익히기
#include <stdio.h>
void main(){
char input;
float x, y, result;
printf(" 작업할 연산을 입력 (A:덧셈,S:뺄셈,M:곱셈,D:나눗셈) : ");
scanf("%c",&input);
if(input !='A' && input !='S' && input !='M' && input !='D'){
printf("연산 작업을 잘못 입력하였습니다.\n");
return;
}
printf("두 수 입력 : ");
scanf("%f%f", &x , &y);
switch(input){
case 'A':
result = x + y;
break;
case 'S':
작업할 연산을 입력 (A:덧셈,S:뺄셈,M:곱셈,D:나눗셈) : M result
<enter>
= x - y;
두 수 입력 : 5 7 <enter>
break;
case 'M':
result = 35.000000
result = x * y;
break;
case 'D':
if(y == 0){
printf("분모는 0값을 가질 수 없습니다.\n");
return;
}
}
result = x / y;
printf("result = %f \n", result);
}

1. 예습 1교시
문제 2번을 Switch
구조로 변경
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
21
[기초다지기] switch 구조 익히기

1. 예습 1교시 문제 2번을 Switch 구조로 변경
 분석
– 다중 if 구조는 switch case 구조로 변경 가능
– switch(input)에서 input 값은 정수형(문자) 상수 값이어야 한다
» 이 프로그램에서 input는 문자 상수로 조건을 만족
– 하나의 case 문이 끝나는 지점에 break 문을 작성
– case 구문에 break 문이 존재하지 않을 경우 다음 case 구문을
계속해서 실행
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
22
실습시간 – 1 교시
if else 구조 활용
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
23
if else 구조 활용

학습개요
 예제를 통한 if else 구조 학습
 개인 수입에 대한 세금을 차등 적용하여 수입에 따른
세금 계산 프로그램
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
24
if else 구조 활용

개인 수입에 대한 세금 계산 프로그램
 문제 정의
– 개인에 대한 소득세를 계산하는 프로그램이다. 개인의
수입금액에 따라 세금이 차등 부가 되어진다. 또한 개인의
생활등급 역시 세금 계산에 포함된다. 세금 부가에 대한
조건식은 관련 함수 및 식 부분에 기술된다. 이때 각 개인의
소득에 대한 세금을 계산하여라.
 입/출력 조건
– 입력 조건
» 1) 월 수입액
» 2) 등급( 1: 생활 보호 대상자, 2: 국가 유공자, 3 : 일반 )
– 출력 조건
» 1) 수입에 대한 총 세금 영수증
» 2) 출력 형식 : (예 : 월 수입액 : 2200,000, 등급 : 일반)
 (다음 장 계속)
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
25
if else 구조 활용

개인 수입에 대한 세금 계산 프로그램
– 출력 조건
» 2) 출력 형식 :
» 예 : 월 수입액 : 2200,000,
»
등급 : 일반
 관련 함수 및 식
– 세금 계산 조건식
월 수입액
0~50만원 미만
50만원~100만원 미만
100만원~200만원 미만
200만원 이상
*********************************
월 수입액 : 2200000
등급:3
*********************************
금액
세율
세금
--------------------------500000
2%
10000
500000
5%
25000
1000000
7%
70000
200000
10%
20000
--------------------------총 세금 :
125000원
===========================
등급
생활보호대상자
국가유공자
2%
2%
5%
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
일반
2%
5%
5%
7%
7%
10%
26
if else 구조 활용

개인 수입에 대한 세금 계산
알고리즘 (플로우차트)
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
27
if else 구조 활용

프로그램 작성
 1 단계
– 115페이지의 프로그램을 빈 칸을 포함하여 작성하자.
①. income < RANGE_5
②. if(grade == 1 || grade == 2)
③. (int)(remainder * (RATE_5 / 100.0));
④. else if(income < RANGE_20)
⑤. else
⑥. grade ==1
⑦. (int)((RANGE_20 - RANGE_10) * (RATE_5 / 100.0));
 2 단계
– 아래의 입력 결과에 대한 출력 값을 작성하자.
– 입력 조건
» 등급 1, 월 수입액 : 670000
» 등급 2, 월 수입액 : 1700000
» 등급 3, 월 수입액 : 2850000
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
28
실습시간 – 2 교시
switch case 구조 활용
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
29
switch case 구조 활용

학습개요
 다중 조건에 대한 처리
 switch 구조를 이용한 해당 년도에 대한 띠(동물이름)
알아 맞히기 프로그램 작성
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
30
switch case 구조 활용

해당 년도에 대한 띠(동물이름) 알아 맞히기
 문제 정의
– 음력으로 모든 해는 상징하는 동물 이름이 존재한다. 12지간이라
불러지는 이것은 12년 주기로 반복되고 이 동물은 자(쥐), 축(소),
인(호랑이), 묘(토끼), 진(용), 사(뱀), 오(말), 미(양), 신(원숭이), 유(닭),
술(개), 해(돼지)로 이루어져 있다. 년도를 입력하면 그 해의 동물이름을
출력하는 프로그램을 작성하여라.
 입/출력 조건
– 입력 조건
» 1) 년도 (예 :2004)
– 출력 조건
» 1) 해당 년도에 해당되는 동물 이름
 관련 함수 및 식
– 1) 년도의 입력은 1900년 이후의 값으로 한다.
– 2) 1900년을 상징하는 동물은 자(쥐)이다.
» 1900 % 12 = 4 (쥐의 해)
– 3) 동물은 12년의 주기로 반복된다.
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
31
switch case 구조 활용
 알고리즘 (플로우차트)
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
32
switch case 구조 활용

프로그램 작성
 1 단계
– 121페이지의 프로그램을 빈 공간을 포함하여 작성한 후
animal.c 이름을 저장한다.
①. year < 1900
②. switch(gap)
③. break
④. case 1
⑤. default:
 2 단계
– 프로그램이 정상적으로 동작할 경우 다음과 같은 입력에 대한
출력 결과를 작성하여라.
– 입력 조건
» 입력 년도 : 1990, 입력년도 : 1850, 입력년도 : 1968
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
33
선택 제어 구조
The End.
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
34