최신 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