Download presentation
Presentation is loading. Please wait.
1
chapter 06. 선택문
2
경우에 따라서 특정 문장을 선택적으로 실행시켜야 할 필요가 있다.
선택문의 필요성 경우에 따라서 특정 문장을 선택적으로 실행시켜야 할 필요가 있다. - 두 정수값을 계산하여 몫을 구하는 경우 0으로 나눌 수 없다. int a, b, res; printf(“두 정수를 입력하세요 : ”); scanf(“%d%d”, &a, &b); res = a / b; // b가 0이 아닌 경우만 실행 printf(“a를 b로 나눈 몫 : %d\n”, res); 선택문의 조건식에는 주로 관계연산자와 논리연산자가 사용된다.
3
관계식은 두 값의 크기를 비교하는 연산이며 관계연산자를 사용한다.
▶ 관계연산자 관계식은 두 값의 크기를 비교하는 연산이며 관계연산자를 사용한다. 관계식의 결과는 참과 거짓이며 1과 0이 결과값이 된다. printf(“연산결과가 참인 경우 : %d\n”, 20>10); printf(“연산결과가 거짓인 경우 : %d\n”, 10>20); 연산결과가 참인 경우 : 1 연산결과가 거짓인 경우 : 0
4
▶ 관계연산자 정리 관계연산자에는 다음과 같은 것들이 있다. 범위를 표현할 때는 논리식을 사용해야 한다.
연산 결과 > 왼쪽의 값이 오른쪽의 값보다 크면 참 < 왼쪽의 값이 오른쪽의 값보다 작으면 참 >= 왼쪽의 값이 오른쪽의 값보다 크거나 같으면 참 <= 왼쪽의 값이 오른쪽의 값보다 작거나 같으면 참 == 두 값이 같으면 참 != 두 값이 같지 않으면 참 범위를 표현할 때는 논리식을 사용해야 한다. 논리관계가 포함되어 있다.
5
논리연산자는 두 피연산자의 참과 거짓에 따라 연산의 결과값을 결정하며, 연산식의 결과 역시 참과 거짓이다.
▶ 논리연산자 논리연산자는 두 피연산자의 참과 거짓에 따라 연산의 결과값을 결정하며, 연산식의 결과 역시 참과 거짓이다. - a의 값이 15일 때 논리연산자의 종류 논리연산자 의미 연산 결과 && 논리곱(and) 왼쪽과 오른쪽의 값이 모두 참일 때만 참 || 논리합(or) 왼쪽과 오른쪽의 값 중에서 하나라도 참이면 참 ! 논리부정(not) 피연산자가 참이면 거짓이고, 거짓이면 참
6
▶ 논리연산자의 사용 예 #include <stdio.h> int main() { int a=10;
printf("논리곱 연산 : %d\n", (a>5) && (a<=15)); printf("논리합 연산 : %d\n", (a!=10) || (a==20)); printf("논리부정 연산 : %d\n", !((a-5)>0)); printf("피연산자가 상수인 경우 : %d\n", -3.4 && (a>0)); return 0; } 논리곱 연산 : 1 논리합 연산 : 0 논리부정 연산 : 0 피연산자가 상수인 경우 : 1
7
if~else if~else구문을 사용한 선택문
else의 결합 문제(dangling else 문제)
8
if문의 조건식이 참이면 실행할 문장을 실행한다.
int a, b, res; printf(“두 정수를 입력하세요 : ”); scanf(“%d%d”, &a, &b); if(b!=0) res = a / b; // b가 0이 아닌 경우만 선택적으로 실행된다. printf(“a를 b로 나눈 몫 : %d\n”, res); 실행할 문장이 두 개 이상이면 중괄호로 묶어준다.
9
▶ if~else구문을 사용한 선택문 조건식의 참, 거짓에 따라 각각 실행할 문장이 있을 때 사용한다. 조건식이 거짓일 때 실행할 문장이 여러 개라면 역시 중괄호를 사용하여 묶어 준다.
10
▶ if~else구문을 사용한 비만도 검사 프로그램
BMI는 체중을 키의 제곱으로 나눈다(단위가 체중은 kg, 키는 m). BMI가 20미만 : 저체중, 20~24.9 : 표준체중, 25이상 : 과체중 #include <stdio.h> int main() { double weight, height; double bmi; printf("몸무게를 입력하세요(kg) : "); scanf("%lf", &weight); printf("키를 입력하세요(cm) : "); scanf("%lf", &height); height = height / 100; bmi = weight / (height * height); printf("당신의 BMI는 : %.1lf입니다.\n", bmi); if(bmi>=20.0 && bmi<25.0) printf("표준체중 입니다.\n"); else printf("체중관리가 필요합니다.\n"); return 0; } // 몸무게와 키를 입력할 변수 // bmi의 결과를 저장할 변수 // 키를 m단위로 환산
11
▶ if~else if~else구문을 사용한 선택문
조건에 따라 선택한 문장이 많은 경우에 사용한다. - 표준체중이 아닌 경우에 저체중과 과체중을 구분하는 예 if(bmi>=20.0 && bmi<25.0) printf(“표준체중입니다.\n”); else if(bmi<20) printf(“저체중입니다.\n”); printf(“과체중입니다.\n”); ① ② 표준체중이 아닌 경우에 실행되는 선택문 ③ if(bmi>=20.0 && bmi<25.0) printf(“표준체중입니다.\n”); else if(bmi<20) printf(“저체중입니다.\n”); else printf(“과체중입니다.\n”); 1, 2, 3번이 모두 배타적으로 실행될 때 들여쓰기를 맞춰서 사용한다.
12
▶ if~else if~else구문을 사용한 학점계산 프로그램 예
평균점수는 실수값으로 입력된다. 평균이 90점 이상은 A, 90점 미만 80점 이상이면 B, 80점 미만 70점 이상이면 C, 그 외는 F #include <stdio.h> int main() { double avg; char grade; printf("평균점수를 입력하세요 : "); scanf("%lf", &avg); if(avg>=90.0) grade='A'; else if(avg>=80.0) grade='B'; else if(avg>=70.0) grade='C'; else grade='F'; printf("학점은 %c입니다.\n", grade); return 0; }
13
▶ else의 결합 문제(dangling else 문제)
if~else문에서 조건식이 참인 경우에 실행할 문장이 if문이면 예상치 못한 else가 달라 붙는 문제가 발생한다. else가 안쪽의 if문과 결합한다! 이 경우에 안쪽에 중첩된 if문이 하나의 문장일지라도 중괄호를 사용하여 구분해준다. if(조건식1){ if(조건식2) 실행할 문장1; } else 실행할 문장2;
14
switch~case문을 사용한 선택문 조건에 따라 선택할 문장이 많은 경우에 사용한다. 조건식은 정수식을 사용하며 case의 일치하는 문장을 실행한다.
15
▶ switch~case 구문을 사용한 추첨 프로그램
#include <stdio.h> int main() { int lot; printf("당첨 번호를 입력하세요 : "); scanf("%d", &lot); switch(lot){ case 1: printf("김서방"); break; case 2: printf("홍가네"); case 3: printf("안산댁"); default: printf("당첨자가 없습니다!"); } return 0; // 당첨번호가 1이면 // 김서방을 출력하고 // switch~case의 블록을 빠져나간다. // 일치하는 당첨번호가 없으면 실행한다.
16
▶ break가 없으면 switch~case문은 분기문이다.
Similar presentations