no slide titlecontents.kocw.net/kocw/document/2014/myongji/leechungki/3.pdf · 알고리즘 30...

32
조건문 이 충기 명지대학교 컴퓨터공학과

Upload: others

Post on 17-May-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: No Slide Titlecontents.kocw.net/KOCW/document/2014/myongji/leechungki/3.pdf · 알고리즘 30 number1 > number2? 시작 첫번째정수값을읽어들여number1에저장한다 두번째정수값을읽어들여number2에저장한다

조건문

이 충기

명지대학교

컴퓨터공학과

Page 2: No Slide Titlecontents.kocw.net/KOCW/document/2014/myongji/leechungki/3.pdf · 알고리즘 30 number1 > number2? 시작 첫번째정수값을읽어들여number1에저장한다 두번째정수값을읽어들여number2에저장한다

들어가며

Q: 집에서 학교로 가려고 한다. 가지고 있는 돈이10,000 원 이상이면 택시 타고 가고 10,000원미만이고 5,000원 이상이면 직행버스 타고 가고5,000원 미만이면 지하철 타고 간다. 이 경우에집에서 학교에 가는 방법을 상세하고 명확하게기술하라.

A:

2

Page 3: No Slide Titlecontents.kocw.net/KOCW/document/2014/myongji/leechungki/3.pdf · 알고리즘 30 number1 > number2? 시작 첫번째정수값을읽어들여number1에저장한다 두번째정수값을읽어들여number2에저장한다

3

흐름 제어(Flow Control)

• 흐름 제어는 문들이 프로그램 내에서 실행되는순서이다.

• 다르게 명시하지 않는다면 메소드 내의 문들의실행 순서는 문들의 순서와 같다.

• 다음 문들이 이 순서를 바꾸는 것을 가능하게한다:• 조건문(selection statement): 문의 실행 여부를 조건의

만족 여부에 따라 선택하게 한다.

• 반복문(repetition statement 혹은 loop): 문들을 조건의만족 여부에 따라 반복적으로 실행하게 한다.

• 각 조건은 부울 연산식(Boolean expression)에기초한다.

Page 4: No Slide Titlecontents.kocw.net/KOCW/document/2014/myongji/leechungki/3.pdf · 알고리즘 30 number1 > number2? 시작 첫번째정수값을읽어들여number1에저장한다 두번째정수값을읽어들여number2에저장한다

4

조건문

• 조건문은 어느 문이 다음에 실행될지를선택하게 한다.

• 조건문은 우리가 조건(condition)의 만족여부에 따라 기본 결정들을 하게한다.

• 자바 조건문• if 문

• switch 문

Page 5: No Slide Titlecontents.kocw.net/KOCW/document/2014/myongji/leechungki/3.pdf · 알고리즘 30 number1 > number2? 시작 첫번째정수값을읽어들여number1에저장한다 두번째정수값을읽어들여number2에저장한다

5

부울 연산식

• 부울 연산식(혹은 조건식)은 관계연산자(relational operator)와 논리연산자(logical operator)를 사용한다.

• 부울 연산식의 연산 결과는 true 혹은false이다.

• 부울연산식은 복잡한 조건을나타내기 위해 사용된다.

Page 6: No Slide Titlecontents.kocw.net/KOCW/document/2014/myongji/leechungki/3.pdf · 알고리즘 30 number1 > number2? 시작 첫번째정수값을읽어들여number1에저장한다 두번째정수값을읽어들여number2에저장한다

6

관계 연산자

• 관계 연산자는 두 피연산자들(operands)의 값을서로 비교하여 그들 사이의 관계를 결정한다.

3 == 4 (false)

3 != 4 (true)

3 > 4 (false)

3 < 4 (true)

3 >= 3 (true)

7 <= 7 (true)

Page 7: No Slide Titlecontents.kocw.net/KOCW/document/2014/myongji/leechungki/3.pdf · 알고리즘 30 number1 > number2? 시작 첫번째정수값을읽어들여number1에저장한다 두번째정수값을읽어들여number2에저장한다

7

논리 연산자

• 논리 연산자는 논리 연산을 수행한다:

• && (논리 AND)

• || (논리 OR)

• ! (논리 NOT)

• 이 연산자들의 모든 피연산자는 boolean

유형을 갖고 결과 값은 부울 값(true 혹은false)이다.

Page 8: No Slide Titlecontents.kocw.net/KOCW/document/2014/myongji/leechungki/3.pdf · 알고리즘 30 number1 > number2? 시작 첫번째정수값을읽어들여number1에저장한다 두번째정수값을읽어들여number2에저장한다

8

논리 AND와 논리 OR

• &&: 두 개의피연산자가 모두true면 결과는 true,

아니면 false

• || : 두 개의피연산자 중적어도 어느하나가 true면결과는 true, 아니면false

a b a && b a || b

true true true true

true false false true

false true false true

false false false false

진리표

Page 9: No Slide Titlecontents.kocw.net/KOCW/document/2014/myongji/leechungki/3.pdf · 알고리즘 30 number1 > number2? 시작 첫번째정수값을읽어들여number1에저장한다 두번째정수값을읽어들여number2에저장한다

9

논리 NOT

• ! : 피연산자가 true면 false, false면true

a ! a

true false

false true

진리표

Page 10: No Slide Titlecontents.kocw.net/KOCW/document/2014/myongji/leechungki/3.pdf · 알고리즘 30 number1 > number2? 시작 첫번째정수값을읽어들여number1에저장한다 두번째정수값을읽어들여number2에저장한다

10

예: 논리 연산자

다음 부울 연산식의 결과는?

1. (3 == 5) && (8 == 8)

2. (8 == 7) || (5 < 10)

3. !(3 == 9)

Page 11: No Slide Titlecontents.kocw.net/KOCW/document/2014/myongji/leechungki/3.pdf · 알고리즘 30 number1 > number2? 시작 첫번째정수값을읽어들여number1에저장한다 두번째정수값을읽어들여number2에저장한다

11

관계 / 논리연산자 우선 순위

• 논리연산자들은 관계연산자들과산술연산자들(arithmetic

operators)보다 우선순위가 낮다.

• 논리 NOT는 논리 AND 혹은 논리OR보다 우선순위가 높다

Page 12: No Slide Titlecontents.kocw.net/KOCW/document/2014/myongji/leechungki/3.pdf · 알고리즘 30 number1 > number2? 시작 첫번째정수값을읽어들여number1에저장한다 두번째정수값을읽어들여number2에저장한다

12

예: 부울 연산식

Q: 시험 점수가 90점 이상이고 출석률이100%라는 조건을 나타내라.

A: 시험점수와 출석률을 나타내는변수들을 각각 examgrades와attendrate라고 하자. 그러면 조건은다음과 같다:

(examgrades >= 90) && (attendrate == 100)

Page 13: No Slide Titlecontents.kocw.net/KOCW/document/2014/myongji/leechungki/3.pdf · 알고리즘 30 number1 > number2? 시작 첫번째정수값을읽어들여number1에저장한다 두번째정수값을읽어들여number2에저장한다

13

조건 연산자

• 조건 연산자(conditional operator)는 두개의 연산식들 중 하나를 결정하기 위해조건식을 사용하는 연산자이다.

• 구문: (조건식) ? 연산식1 : 연산식2

• 의미: 조건식의 연산 결과가

true이면 연산식1, false이면

연산식2의 값을 계산한다

Page 14: No Slide Titlecontents.kocw.net/KOCW/document/2014/myongji/leechungki/3.pdf · 알고리즘 30 number1 > number2? 시작 첫번째정수값을읽어들여number1에저장한다 두번째정수값을읽어들여number2에저장한다

14

예: 조건 연산자

max = (x < y) ? y : x;

• 위 배정문은 변수 x의 값이 변수y의 값보다 작으면 변수 max에 y의값을 아니면 x의 값을 저장한다.

Page 15: No Slide Titlecontents.kocw.net/KOCW/document/2014/myongji/leechungki/3.pdf · 알고리즘 30 number1 > number2? 시작 첫번째정수값을읽어들여number1에저장한다 두번째정수값을읽어들여number2에저장한다

15

if 문

• if 문은 조건식의 논리 값에 따라 문의실행 여부를 결정한다.

• 구문: if (조건식)

문;

• 의미: 조건식이 true이면 문을 실행하고false이면 실행하지 않는다.

주: if 문에서 문 대신에 복합문(compoundstatement)이 나올 수 있다.

Page 16: No Slide Titlecontents.kocw.net/KOCW/document/2014/myongji/leechungki/3.pdf · 알고리즘 30 number1 > number2? 시작 첫번째정수값을읽어들여number1에저장한다 두번째정수값을읽어들여number2에저장한다

16

if 문의 흐름도(flowchart)

조건식

false

true

Page 17: No Slide Titlecontents.kocw.net/KOCW/document/2014/myongji/leechungki/3.pdf · 알고리즘 30 number1 > number2? 시작 첫번째정수값을읽어들여number1에저장한다 두번째정수값을읽어들여number2에저장한다

17

예: if 문

if (score > max)

max = score;

• 위 문은 변수 score의 값이 변수max의 값보다 크다면 max의 값을score의 값으로 바꾼다. 그렇지않다면 아무 일도 하지 않는다.

Page 18: No Slide Titlecontents.kocw.net/KOCW/document/2014/myongji/leechungki/3.pdf · 알고리즘 30 number1 > number2? 시작 첫번째정수값을읽어들여number1에저장한다 두번째정수값을읽어들여number2에저장한다

18

if else 문

• if 문에 else절을 추가한 것이 if-else

문이다

• 구문: if (조건식) 문1;

else 문2;

• 의미: 조건식이 true이면 문1을실행하고 false이면 문2를 수행한다.

Page 19: No Slide Titlecontents.kocw.net/KOCW/document/2014/myongji/leechungki/3.pdf · 알고리즘 30 number1 > number2? 시작 첫번째정수값을읽어들여number1에저장한다 두번째정수값을읽어들여number2에저장한다

19

if-else 문의 흐름도

조건식

문1

true false

문2

Page 20: No Slide Titlecontents.kocw.net/KOCW/document/2014/myongji/leechungki/3.pdf · 알고리즘 30 number1 > number2? 시작 첫번째정수값을읽어들여number1에저장한다 두번째정수값을읽어들여number2에저장한다

20

예: if-else 문

if (n % 2 == 0)

System.out.println(“n은 짝수이다.”);

else

System.out.println(“n은 홀수이다.”);

• 위 문은 n을 2로 나눈 나머지가0이면(n이 짝수이면 ) 첫 번째출력문을 실행하고 아니면 두 번째출력문을 실행한다.

Page 21: No Slide Titlecontents.kocw.net/KOCW/document/2014/myongji/leechungki/3.pdf · 알고리즘 30 number1 > number2? 시작 첫번째정수값을읽어들여number1에저장한다 두번째정수값을읽어들여number2에저장한다

21

중첩된 if 문(nested if statement)

• 중첩된 if 문은 if 문의 결과로서 실행되는문이나 else 절의 문이 또 다른 if 문인경우이다.

if (score >= 90) grade = 'A';

else if (score >= 80) grade = 'B';

else if (score >= 70) grade = 'C';

else if (score >= 60) grade = 'D';

else grade = 'F';

Page 22: No Slide Titlecontents.kocw.net/KOCW/document/2014/myongji/leechungki/3.pdf · 알고리즘 30 number1 > number2? 시작 첫번째정수값을읽어들여number1에저장한다 두번째정수값을읽어들여number2에저장한다

데이터 비교

• 실수들 비교- 실수들은 근사값으로 표현된다.

- 두 개의 실수 값들이 같음을 비교할 때 값들의 차를계산하고 그 차가 주어진 허용 한계치 내에 있다면같다고 간주한다.

- 예: if(num1 – num2 < 0.0001) System.out.print(“같다”);

• 문자들 비교- 자바에서 모든 문자는 유니코드로 나타내진다.

- 유니코드 문자 집합에서 모든 문자들의 순서는 정의되어있다.

- 예: if(„a‟ < „b‟) System.out.print(“문자 a는 문자 b보다 작다”);

22

Page 23: No Slide Titlecontents.kocw.net/KOCW/document/2014/myongji/leechungki/3.pdf · 알고리즘 30 number1 > number2? 시작 첫번째정수값을읽어들여number1에저장한다 두번째정수값을읽어들여number2에저장한다

23

문자열 상수들 비교

• 문자열 상수들 (String literals) 을비교하기 위해 관계 연산자들을 사용할수 없다.

• 두 개의 문자열 상수들이 같은지를비교하기 위해 String 클래스의 equals메소드를 이용한다.

• 예: String in = “Hi”;

String out = “Hello”;

if (in.equals(out)) System.out.println(“같다”);

Page 24: No Slide Titlecontents.kocw.net/KOCW/document/2014/myongji/leechungki/3.pdf · 알고리즘 30 number1 > number2? 시작 첫번째정수값을읽어들여number1에저장한다 두번째정수값을읽어들여number2에저장한다

24

switch 문

• switch 문은 어느 문이 다음에 수행될 지를결정하는 또 다른 방법을 제공한다.

• switch 문은 연산식을 계산하여 그 결과가여러 경우들의 하나와 같은지를 확인한다.

• 각 경우는 하나의 값과 문들의 목록을가진다.

• 연산식의 계산 값과 같은 첫번째 경우에해당하는 문들을 수행한다.

Page 25: No Slide Titlecontents.kocw.net/KOCW/document/2014/myongji/leechungki/3.pdf · 알고리즘 30 number1 > number2? 시작 첫번째정수값을읽어들여number1에저장한다 두번째정수값을읽어들여number2에저장한다

25

switch 문의 일반적인 구문

switch (연산식) {

case 값1 : 문 목록 1

case 값2 : 문 목록 2

case 값3 : 문 목록 3

• • •

default: 문 목록 x

}

• 문 목록은 문들의 나열이다. 문 목록은 보통break 문으로 끝난다.

• 연산식의 계산 결과가 여러 값들의 하나와같다면 그에 대응하는 문 목록을 실행한다.

Page 26: No Slide Titlecontents.kocw.net/KOCW/document/2014/myongji/leechungki/3.pdf · 알고리즘 30 number1 > number2? 시작 첫번째정수값을읽어들여number1에저장한다 두번째정수값을읽어들여number2에저장한다

26

switch 문

• 자주 break 문이 각 case의 문 목록의 마지막문으로 사용된다.

• break 문은 제어 흐름을 switch 문의 다음 문으로이동하게 한다.

• break 문이 사용되지 않는다면 제어 흐름은 다음case의 문 목록으로 이동한다 .

• 때때로 이것이 적절할지 모른다. 그러나 우리는자주 각 case에 대응된 문들만 실행하기를원한다.

• 또한 switch 문은 선택사항으로 기본(default) case를 가질 수 있다. 이 경우는 연산식의 계산결과가 어떤 값들과도 같지 않다면 수행된다.

Page 27: No Slide Titlecontents.kocw.net/KOCW/document/2014/myongji/leechungki/3.pdf · 알고리즘 30 number1 > number2? 시작 첫번째정수값을읽어들여number1에저장한다 두번째정수값을읽어들여number2에저장한다

27

switch 문

• switch 문의 연산식의 결과 값은 int

형이나 char 형 값이어야 한다.

• 각 case의 값은 상수여야 한다.

Page 28: No Slide Titlecontents.kocw.net/KOCW/document/2014/myongji/leechungki/3.pdf · 알고리즘 30 number1 > number2? 시작 첫번째정수값을읽어들여number1에저장한다 두번째정수값을읽어들여number2에저장한다

28

예: switch 문

// grade 는 char 형 변수이다.

switch (grade) {

case 'A' : aCount++;

break;

case 'B' : bCount++;

break;

case 'C' : cCount++;

break;

case 'D' : dCount++;

break;

default : fCount++;

break;

}

Page 29: No Slide Titlecontents.kocw.net/KOCW/document/2014/myongji/leechungki/3.pdf · 알고리즘 30 number1 > number2? 시작 첫번째정수값을읽어들여number1에저장한다 두번째정수값을읽어들여number2에저장한다

29

예제 프로그램

문제: 두 개의 정수 값을 입력 받아최대값과 최소값을 구하는프로그램을 작성하라.

설계:

• 변수들: 입력 정수 값들, 최대값, 최소값

• 알고리즘: 다음 슬라이드

Page 30: No Slide Titlecontents.kocw.net/KOCW/document/2014/myongji/leechungki/3.pdf · 알고리즘 30 number1 > number2? 시작 첫번째정수값을읽어들여number1에저장한다 두번째정수값을읽어들여number2에저장한다

알고리즘

30

number1 > number2?

시작

첫번째 정수 값을 읽어 들여 number1에 저장한다

두번째 정수 값을 읽어 들여 number2에 저장한다

최대값 = number1

최소값 = number2

최대값 = number2

최소값 = number1

최대값과 최소값를 출력한다

아니요

Page 31: No Slide Titlecontents.kocw.net/KOCW/document/2014/myongji/leechungki/3.pdf · 알고리즘 30 number1 > number2? 시작 첫번째정수값을읽어들여number1에저장한다 두번째정수값을읽어들여number2에저장한다

구현// FindMaxMin.java: 두 정수의 최대값과 최소값을 구한다

import java.util.Scanner;

public class FindMaxMin {

public static void main(String[] args) {

// 변수들을 선언한다

int number1, number2, maximum, minimum;

Scanner scan = new Scanner(System.in);

// 두 개의 정수 값을 읽어 들인다

System.out.println("두 개의 정수 값을 입력 하세요: ”);

number1 = scan.nextInt();

number2 = scan.nextInt();

// 두 개의 정수 값을 비교하여 최대값과 최소값을 구한다

if (number1 > number2) { maximum = number1; minimum = number2; }

else { maximum = number2; minimum = number1; }

// 최대값과 최소값을 출력한다

System.out.println("최대값은 ” + maximum + ”이다“);

System.out.println("최소값은 ” + minimum + ”이다“);

}

}

31

Page 32: No Slide Titlecontents.kocw.net/KOCW/document/2014/myongji/leechungki/3.pdf · 알고리즘 30 number1 > number2? 시작 첫번째정수값을읽어들여number1에저장한다 두번째정수값을읽어들여number2에저장한다

32

요약

• 흐름 제어

• 부울 연산식

• 관계 연산자

• 논리 연산자

• if 문

• switch 문

• 간단한 프로그램 작성