Download presentation
Presentation is loading. Please wait.
1
Chapter 08 조건문
2
조건문 조건문 if 다음 문장과 같이 어떠한 조건을 만족하면 그에 해당하는 일이 처리되는 문장을 조건문 if 문
만일 이번 학기에 성적이 4.3이 넘으면 장학금을 받는다.
3
구문 if if 문으로 if 문 뒤에 블록 { } 만일 이번 학기에 성적이 4.3이 넘으면 장학금을 받는다.
if ( grade > 4.3 ) { printf(“장학금을 받습니다.\n”); }
4
if 표현식 if (표현식) 조건문 if 에서 주의해야 할 구문이 표현식 expression
이 표현식은 참과 거짓을 구별하는 표현식이 되어야 하며, 이러한 표현식에는 다양한 연산자 즉 관계, 논리, 산술 연산자 등을 사용 표현식은 정수형에서 0은 거짓을 의미하며 0이 아닌 모든 수는 참을 의미 다음과 같은 실수, 문자도 가능 자료형 참 거짓 정수형 0 이외의 값 실수형 0.0 이외의 값 0.0 문자형 \0 (NULL) 이외의 문자 \0 (NULL) 문자
5
예제 소스 ifgrade.c 성적을 표준 입력으로 받아 성적이 4.3을 초과하면 문장 2 개(“>>>> 장학금을 받습니다.”, “>>>> 등록금도 면제입니다.”)를 출력하는 프로그램
6
키워드 else 필요하면 else 이용 조건문 if에서 키워드 else를 사용하여 조건 표현식이 거짓인 경우, else 이후의 문장을 실행하는 구문을 구성
7
홀수 or 짝수 조건식 (number%2 == 0) 필요 시 블록 구성
else 이후의 문장이 여러 문장이 필요한 경우, 중괄호 {}를 이용하여 블록 구성
8
예제 소스 elseodd.c 표준 입력한 정수가 홀수인지 아니면 짝수인지를 구별하는 프로그램
9
예제 소스 sumormult.c 표준 입력한 정수 1, 2에 따라 두 수의 합과 곱을 각각 출력하는 프로그램
10
조건문과 조건 연산자 조건문을 조건 연산자로 if 문은 간단히 조건 연산자를 이용한 문장으로 변환이 가능
변수 max에 두 수 중 큰 수 저장 if ( x > y ) { max = x; } else { max = y; } max = ( x > y ) ? x : y; if ( x > y ) { min = y; } else { min = x; } min = ( x > y ) ? y : x;
11
조건문과 조건 연산자 중첩된 if if 문장 내부에 다른 if 문이 나오는 문장을 중첩(nested)된 if 문
위 문장을 기술할 때 아래와 같이 들여쓰기를 하는 것은 나쁨 내재된 if (num2)는 상위의 if (num1)이 만족해야 실행되므로, 위 문장은 아래 문장과 같은 의미 if (num1) if (num2) printf("두 수 모두 0이 아닙니다.\n"); if (num1) if (num2) printf("두 수 모두 0이 아닙니다.\n"); if (num1 && num2) printf("두 수 모두 0이 아닙니다.\n");
12
else 주의 잘못된 들여쓰기 else의 들여쓰기는 첫 번째 if(num1) 문의 else 문으로 처리하였으나 실제로는 두 번째 if(num2)의 else 문 에러는 없으나 이해가 어려움 수정 다음과 같이 들여쓰기 더 좋은 방법은 중괄호 이용 if (num1) if (num2) printf("두 수 모두 0이 아닙니다.\n"); else printf("한 수는 0이고 다른 한 수는 0이 아닙니다. ); if (num1) { if (num2) printf("두 수 모두 0이 아닙니다.\n"); else printf("한 수는 0이고 다른 한 수는 0이 아닙니다. ); }
13
예제 소스 Nestedif.c 두 수의 네 가지 조합의 표준입력에 따른 출력이 무엇? 00, 01, 10, 11
14
else if 문장 구조 중첩된 if 문에서 else 이후에 if 문을 실행하는 구문을 이용
15
else if 사용 수의 검사 입력한 정수가 1에서부터 45까지의 정수인지를 검사하는 프로그램 모듈
정수를 1보다 작은 수, 45보다 큰 수, 그리고 1에서 45 사이의 수로 구분하는 모듈을 작성 다음과 같이 else if 문을 이용하면 쉽게 정수를 세 부분으로 나눌 수 있다. 여기서 조건식은 else에 의하여 (number >= 1 && number > 45)을 의미한다. if ( number < 1 ) { printf("Number is below 1.\n"); valid = 0; } else if ( number > 45 ) { printf("Number is above 45\n"); else valid = 1;
16
예제 소스 elseifvalid.c 입력한 정수가 1에서부터 45까지의 정수인지를 검사하여, 1보다 작은 수, 45보다 큰 수, 아니면 1에서부터 45까지 유효한 수임을 아래 결과와 같이 출력하는 프로그램
17
switch 중첩된 if 문에서 조건식이 정수형의 등호식이라면 다음과 같은 switch 문의 이용도 가능
즉 switch 문은 여러 개의 선택을 처리하는 구문으로 switch 이후의 괄호 () 사이의 표현식의 값 중에서 case의 값과 일치하는 것을 처리 switch ( expression ) { case value1: statement1; statement2; ...... break; case value2: statement3; statement4; … default: statement }
18
switch 이용 주의 키워드 switch 문의 정확한 실행 순서는
switch 문에서 switch, case, break, default는 키워드이며, expression과 value는 반드시 정수나 정수 수식이어야 한다. 또한 case 다음의 value 값은 중복되어서는 안된다. switch 문의 정확한 실행 순서는 switch 문의 표현식을 평가 위 표현식에서 계산된 값과 일치하는 상수 값을 갖는 case의 값을 위에서부터 찾는다. 일치된 case 값을 만나면 case 내부의 문장을 실행 break를 만나면 switch 문을 종료, 또는 switch 몸체의 마지막 문장을 수행하면 switch 문을 종료 일치된 case 값을 만나지 못하여 default를 만나면 default 내부의 문장을 실행
19
예제 소스 Switchop.c 구현 간단한 계산기 프로그램을 switch 문을 이용하여 작성
두 실수의 더하기, 빼기, 곱하기, 나누기를 할 수 있는 계산기 프로그램을 작성 표준입력으로부터 3 * 4 와 같이 계산식을 입력 받아 그 결과를 출력하는 프로그램 구현 변수 operator는 문자형 char 자료형으로 연산자 문자인 *, /, +, - 중의 하나를 저장한 변수 switch( operator ) { case '*' : result = number1 * number2; break; case '/' : result = number1 / number2; case '+' : result = number1 + number2; case '-' : result = number1 - number2; default : invalid_operator = 1; } 실행에서 default를 만난다는 것은 변수 operator 값이 네 개의 연산자 case와 일치하지 않음을 의미하므로, 이 문장은 잘못된 연산자를 입력한 경우 실행된다.
21
break 역할 중요한 break 구문 예 switch 문에서 break 문을 만나면 무조건 switch 문을 종료
그러나 switch 문의 case 문 내부에 break 문이 없다면 일치하는 case 문을 실행하고, 계속해서 break 문을 만나기 전까지 무조건 다음 case 문 내부의 문장을 실행 구문 예 아래 구문에서 변수 month의 값이 1이거나 3, 10, 12 중의 하나이면 case 12:의 내부 문장 두 개를 실행하고, break 문장을 만나 switch 문이 종료
22
예제 소스 윤년 Switchmonth.c 년, 월을 입력 받아 해당하는 년, 월의 마지막 날짜를 출력하는 프로그램을 작성
switch 문과 break 문을 이용하여 작성 2월을 제외하고는 이미 말일이 정해져 있어, 간단히 말일을 알 수 있음 윤년 다음과 같은 해는 윤년으로 2월이 29일까지 있으며, 그렇지 않은 해는 2월은 28일이 말일 기원 연수가 4로 나누어 떨어지는 해는 우선 윤년으로 하고, 1번 중에서 100으로 나누어 떨어지는 해는 평년으로 하며, 다만 400으로 나누어 떨어지는 해는 윤년으로 정한다 연산자 &&와 ||의 우선 순위가 &&가 높기 때문에 위 연산식은 다음과 같이 && 연산을 먼저 수행하는 의미의 괄호를 이용한 연산식과 동일 ( (year%4 == 0) && (year%100 != 0) ) || (year%400 == 0)
24
프로그램 연습 프로그램 목적 switch 문을 이용한 사칙연산 문제에서 switch 문 대신에 if 문을 이용하는 프로그램 두 실수의 더하기, 빼기, 곱하기, 나누기를 할 수 있는 계산기 프로그램을 작성 표준입력으로부터 3 * 4 와 같이 계산식을 입력 받아 그 결과를 출력하는 프로그램 구현 위 프로그램에서 유효한 계산식을 입력할 수 있도록 사용자에게 알리는 출력문을 보내고, 계산식을 입력 받아 연산자의 구분에 따라 적절한 계산을 수행하는 프로그램을 구현
25
소스와 결과
Similar presentations