IF Statement
3. 비교문변환 (1)
 Type 1  Type 2
2
조건 T
F
D
C
B
A
E
if( 조건 )
{
A ;
B ;
}
else
{
C ;
D ;
}
E ;
조건 T
F
D
C
B
A
if( 조건 )
{
A ;
B ;
}
C ;
D ;
2. 비교문 변환 (2)
 if 문
3
if( 조건 )
{
A ;
B ;
}
else
{
C ;
D ;
}
E ;
조건이 만족되면 하는 일
조건이 거짓이면 하는 일
if 문 다음에 할 문장
조건 T
F
D
C
B
A
E
2. 비교문 변환 (3)
 Example
4
조건1 T
F
B C
D
A
조건2
E
if( 조건1 )
{
A;
}
else
{
if( 조건2 )
{
C ;
}
else
{
B ;
}
D ;
}
E ;
TF
Example 2
 Read a number and print “Yes” if it is 2 or “No”
5
Start
x
x
“Yes”
Stop
x = 2
“No”
T F
#include <stdio.h>
int main() {
int x ;
scanf( “%d”, &x ) ;
if( x == 2 )
{
printf( “Yesn” ) ;
}
else
{
printf( “Non” ) ;
}
return 0;
}
Example 3
 Find the maximum among 3 numbers
6
Start
Var a, b, c
Stop
a > b
a
T F
a > c
Input a, b, c
b > c
c b c
#include <stdio.h>
int main() {
int a, b, c ;
scanf( %d%d%d”, &a, &b, &c ) ;
if(a > b )
{
if(a > c ) {
printf( “%dn”, a ) ;
} else {
printf( “%dn”, c ) ;
}
}
else
{
if( b > c ) {
printf( “%dn”, b ) ;
} else {
printf( “%dn”, c ) ;
}
}
return 0;
}
Example 4
 Sort 3 numbers
7
Start
a, b, c
Stop
a > b
a, b, c
T F
b > c
a, b, c
a > c
a, c, b b, a, c b, c, a
a > c b > c
c, a, b c, b, a
T F T F
T F T F
#include <stdio.h>
int main() {
int a, b, c ;
scanf( %d%d%d”, &a, &b, &c ) ;
if( a > b )
{
if( b > c ) {
printf( “%d %d %dn”, a, b, c ) ;
} else {
if( a > c ) {
printf( “%d %d %dn”, a, c, b ) ;
} else {
printf( “%d %d %dn”, c, a, b ) ;
}
}
}
else
{
if( a > c ) {
printf( “%d %d %dn”, b, a, c ) ;
} else {
if( b > c ) {
printf( “%d %d %dn”, b, c, a ) ;
} else {
printf( “%d %d %dn”, c, b, a ) ;
}
}
}
return 0;
}
8
if and if-else Statements
 Nested if statement if ( 조건1 ) {
A;
}
else {
if( 조건2 ) {
B;
}
else {
if( 조건3 ) {
C;
}
else {
D;
}
}
}
E;
조건1
조건2
조건3
D
E
A
B
C
T
F
T
F
T
F
9
if and if-else Statements
 Nested if statement
if ( 조건1 ) {
A;
}
else if( 조건2 ) {
B;
}
else if( 조건3 ) {
C;
}
else {
D;
}
E;
조건1
조건2
조건3
D
E
A
B
C
T
F
T
F
T
F
10
if and if-else Statements
 Nested if statement
– 문자를 입력 받아 대문자, 소문자, 숫자, 그 외 문자인지 확인
하시오.
scanf( “%c”, &ch ) ;
if (‘0’ <= c && c <= ‘9’)
printf( “숫자n” ) ;
else if ( ‘A’ <= c && c <= ‘Z’)
printf( “대문자n” ) ;
else if (‘a’ <= c && c <= ‘z’)
printf( “소문자n” ) ;
else
printf( “그외 문자n” ) ;
switch 문
 특정형태의 Nested if statement
11
변수==값1
변수==값2
변수==값3
D
E
A
B
C
T
F
T
F
T
F
switch( 변수 ) {
case 값1 : A ;
break ;
case 값2 : B ;
break ;
case 값3 : C ;
break ;
default :
D ;
}
switch 문
 swtich문을 Nested if 문으로 변환하기
12
switch( 변수 ) {
case 값1 : A ;
break ;
case 값2 : B ;
break ;
case 값3 : C ;
break ;
default : D ;
}
if( 변수==값1 ) {
A ;
}
else if(변수==값2 ) {
B ;
}
else if(변수==값3 ) {
C ;
}
else {
D ;
}
switch 문
 switch에서 break의 역할
– grade == 4 일 때
13
switch (grade)
{
case 4 : printf(“A”) ;
break;
case 3 : printf(“B”) ;
break;
case 2 : printf(“C”) ;
break;
case 1 : printf(“D”) ;
break;
default : printf(“Illegal grade”);
}
switch (grade)
{
case 4 : printf(“A”) ;
case 3 : printf(“B”) ;
case 2 : printf(“C”) ;
case 1 : printf(“D”) ;
default : printf(“Illegal grade”);
}
switch 문
 switch에서 break의 역할
– grade가 ‘A’, ‘B’, ‘C’, ‘D’ 이면 “pass”, ‘F’이면 “fail”, 그 외는
“error”를 출력
14
switch (grade) {
case ‘A’ :
case ‘B’ :
case ‘C’ :
case ‘D’ : printf(“passn”); break;
case ‘F’ : pritnf(“failn”); break;
default : printf(“errorn”); break;
}
15
switch 문
 switch에서 break의 역할
– 앞의 예제를 if-else로 변환
if ( grade == ‘A’ || grade == ‘B’ || grade == ‘C’ || grade == ‘D’ )
printf( “passn” ) ;
else if( grade == ‘F’ )
printf( “failn” ) ;
else
printf( “errorn” ) ;
16
Short-Circuit
 Short-Circuit Evaluation
– &&와 ||의 연산에서 true와 false의 값이 결정됨과 동시에 계
산과정은 멈추게 된다.
 expr1 && expr2
– expr1의 결과가 F이면, expr2 비교가 수행되지 않음.
 expr1 || expr2
– expr1의 결과가 T이면, expr2 비교가 수행되지 않음.
17
Short-Circuit
 Short-Circuit Evaluation의 예
int i=2, j=3;
if( (i == 2) && ( j++ == 3) )
printf( “Truen” ) ;
else
printf( “Falsen” ) ;
printf(“%d %dn”, i, j);
int i=2, j=3;
if( (i == 2) || (j++ == 3) )
printf( “Truen” ) ;
else
printf( “Falsen” ) ;
printf(“%d %dn”, i, j);
int i=2, j=3;
if( (i == 3) && ( j++ == 3) )
printf( “Truen” ) ;
else
printf( “Falsen” ) ;
printf(“%d %dn”, i, j);
int i=2, j=3;
if( (i == 3) || (j++ == 3) )
printf( “Truen” ) ;
else
printf( “Falsen” ) ;
printf(“%d %dn”, i, j);
18
Conditional Operator
 Conditional Operator Syntax
– 조건식 연산자 ? : 는 삼항 연산자이다.
– expr1이 먼저 계산된 후, 참이면 expr2가 실행, 거짓이면
expr3이 수행된다.
 if-else 문 Conditional Operator
expr1 ? expr2 : expr3
if ( y < z)
x = y;
else
x = z
x = ( y < z ) ? y : z
19
Conditional Operator
 Example
int a = 5, b = 6 ;
int max = (a < b) ? b : a ;
int min = (a > b) ? b : a ;

3 2. if statement

  • 1.
  • 2.
    3. 비교문변환 (1) Type 1  Type 2 2 조건 T F D C B A E if( 조건 ) { A ; B ; } else { C ; D ; } E ; 조건 T F D C B A if( 조건 ) { A ; B ; } C ; D ;
  • 3.
    2. 비교문 변환(2)  if 문 3 if( 조건 ) { A ; B ; } else { C ; D ; } E ; 조건이 만족되면 하는 일 조건이 거짓이면 하는 일 if 문 다음에 할 문장 조건 T F D C B A E
  • 4.
    2. 비교문 변환(3)  Example 4 조건1 T F B C D A 조건2 E if( 조건1 ) { A; } else { if( 조건2 ) { C ; } else { B ; } D ; } E ; TF
  • 5.
    Example 2  Reada number and print “Yes” if it is 2 or “No” 5 Start x x “Yes” Stop x = 2 “No” T F #include <stdio.h> int main() { int x ; scanf( “%d”, &x ) ; if( x == 2 ) { printf( “Yesn” ) ; } else { printf( “Non” ) ; } return 0; }
  • 6.
    Example 3  Findthe maximum among 3 numbers 6 Start Var a, b, c Stop a > b a T F a > c Input a, b, c b > c c b c #include <stdio.h> int main() { int a, b, c ; scanf( %d%d%d”, &a, &b, &c ) ; if(a > b ) { if(a > c ) { printf( “%dn”, a ) ; } else { printf( “%dn”, c ) ; } } else { if( b > c ) { printf( “%dn”, b ) ; } else { printf( “%dn”, c ) ; } } return 0; }
  • 7.
    Example 4  Sort3 numbers 7 Start a, b, c Stop a > b a, b, c T F b > c a, b, c a > c a, c, b b, a, c b, c, a a > c b > c c, a, b c, b, a T F T F T F T F #include <stdio.h> int main() { int a, b, c ; scanf( %d%d%d”, &a, &b, &c ) ; if( a > b ) { if( b > c ) { printf( “%d %d %dn”, a, b, c ) ; } else { if( a > c ) { printf( “%d %d %dn”, a, c, b ) ; } else { printf( “%d %d %dn”, c, a, b ) ; } } } else { if( a > c ) { printf( “%d %d %dn”, b, a, c ) ; } else { if( b > c ) { printf( “%d %d %dn”, b, c, a ) ; } else { printf( “%d %d %dn”, c, b, a ) ; } } } return 0; }
  • 8.
    8 if and if-elseStatements  Nested if statement if ( 조건1 ) { A; } else { if( 조건2 ) { B; } else { if( 조건3 ) { C; } else { D; } } } E; 조건1 조건2 조건3 D E A B C T F T F T F
  • 9.
    9 if and if-elseStatements  Nested if statement if ( 조건1 ) { A; } else if( 조건2 ) { B; } else if( 조건3 ) { C; } else { D; } E; 조건1 조건2 조건3 D E A B C T F T F T F
  • 10.
    10 if and if-elseStatements  Nested if statement – 문자를 입력 받아 대문자, 소문자, 숫자, 그 외 문자인지 확인 하시오. scanf( “%c”, &ch ) ; if (‘0’ <= c && c <= ‘9’) printf( “숫자n” ) ; else if ( ‘A’ <= c && c <= ‘Z’) printf( “대문자n” ) ; else if (‘a’ <= c && c <= ‘z’) printf( “소문자n” ) ; else printf( “그외 문자n” ) ;
  • 11.
    switch 문  특정형태의Nested if statement 11 변수==값1 변수==값2 변수==값3 D E A B C T F T F T F switch( 변수 ) { case 값1 : A ; break ; case 값2 : B ; break ; case 값3 : C ; break ; default : D ; }
  • 12.
    switch 문  swtich문을Nested if 문으로 변환하기 12 switch( 변수 ) { case 값1 : A ; break ; case 값2 : B ; break ; case 값3 : C ; break ; default : D ; } if( 변수==값1 ) { A ; } else if(변수==값2 ) { B ; } else if(변수==값3 ) { C ; } else { D ; }
  • 13.
    switch 문  switch에서break의 역할 – grade == 4 일 때 13 switch (grade) { case 4 : printf(“A”) ; break; case 3 : printf(“B”) ; break; case 2 : printf(“C”) ; break; case 1 : printf(“D”) ; break; default : printf(“Illegal grade”); } switch (grade) { case 4 : printf(“A”) ; case 3 : printf(“B”) ; case 2 : printf(“C”) ; case 1 : printf(“D”) ; default : printf(“Illegal grade”); }
  • 14.
    switch 문  switch에서break의 역할 – grade가 ‘A’, ‘B’, ‘C’, ‘D’ 이면 “pass”, ‘F’이면 “fail”, 그 외는 “error”를 출력 14 switch (grade) { case ‘A’ : case ‘B’ : case ‘C’ : case ‘D’ : printf(“passn”); break; case ‘F’ : pritnf(“failn”); break; default : printf(“errorn”); break; }
  • 15.
    15 switch 문  switch에서break의 역할 – 앞의 예제를 if-else로 변환 if ( grade == ‘A’ || grade == ‘B’ || grade == ‘C’ || grade == ‘D’ ) printf( “passn” ) ; else if( grade == ‘F’ ) printf( “failn” ) ; else printf( “errorn” ) ;
  • 16.
    16 Short-Circuit  Short-Circuit Evaluation –&&와 ||의 연산에서 true와 false의 값이 결정됨과 동시에 계 산과정은 멈추게 된다.  expr1 && expr2 – expr1의 결과가 F이면, expr2 비교가 수행되지 않음.  expr1 || expr2 – expr1의 결과가 T이면, expr2 비교가 수행되지 않음.
  • 17.
    17 Short-Circuit  Short-Circuit Evaluation의예 int i=2, j=3; if( (i == 2) && ( j++ == 3) ) printf( “Truen” ) ; else printf( “Falsen” ) ; printf(“%d %dn”, i, j); int i=2, j=3; if( (i == 2) || (j++ == 3) ) printf( “Truen” ) ; else printf( “Falsen” ) ; printf(“%d %dn”, i, j); int i=2, j=3; if( (i == 3) && ( j++ == 3) ) printf( “Truen” ) ; else printf( “Falsen” ) ; printf(“%d %dn”, i, j); int i=2, j=3; if( (i == 3) || (j++ == 3) ) printf( “Truen” ) ; else printf( “Falsen” ) ; printf(“%d %dn”, i, j);
  • 18.
    18 Conditional Operator  ConditionalOperator Syntax – 조건식 연산자 ? : 는 삼항 연산자이다. – expr1이 먼저 계산된 후, 참이면 expr2가 실행, 거짓이면 expr3이 수행된다.  if-else 문 Conditional Operator expr1 ? expr2 : expr3 if ( y < z) x = y; else x = z x = ( y < z ) ? y : z
  • 19.
    19 Conditional Operator  Example inta = 5, b = 6 ; int max = (a < b) ? b : a ; int min = (a > b) ? b : a ;