1절 조선분기 제어문

1.     if

1)    단순 if

(1)   조건식

o  조건식의 결과 논리값이 참(true)이면 종속문장 실행, 거짓(false)이면 ifans을 빠져 나와 다음문장 실행

 

(2)   복합문

o  조선식이 참일 때 실행할 문장이 두 개 이상일 경우 { } 사용해 문장을 하나로 묶어줌

o  { } : 블록!

 

2)    if ~ else

u  두 문장 중 하나를 선택하여 처리할 경우 사용

(1) 조건식

o  if문의 조건이 참이면 종속문장 1 실행한 후 if문 빠져나오고, 거짓이면 else로 이동해 종속문장 2 실행하고 if문 종료

o  조건식의 결과에 따라 종속문장1, 종속문장2 중 하나를 선택적으로 실행

 

(2)   주의사항

o  조건식 뒤에 ; 붙이지 않음

o  else 뒤에 조건식 단독으로 사용할 수 없음

 

3)    중첩된 if

u  if문 안에 또 다른 if문 포함시키는 것

(1)  조건식

o  마지막 else 뒤의 문장 n은 조건식1 ~ 조건식n-1이 모두 거짓인 경우에 실행

 

(2)   주의사항

o  중첩된 if문이 else와 짝이 맞지 않을 때 해석 상 문제 발생

o  사용 범위를 명확하게 표시하기 위해 { }로 표시

 

2.     switch

n  중첩된 if문 사용하면 프로그램이 복잡해지고 이해하기 힘들ㅇㅇ

n  다중 분기문 : switch문은 조건식 값에 따라 여러 종류 중 한 가지만 선택해 실행할 때 많이 사용됨

n  1개 이상의 case문과 default문으로 구성됨

n  여러 case문 중 조건식의 결과 값이 일치하는 case를 찾아서 그 뒤에 나오는 문장들 실행

 

1)    switch문의 형식과 실행 흐름

(1)   조건식

o  조건식의 결과 값은 반드시 정수여야 함

è 논리식은 결과가 참일 때 정수 1, 거짓일 때 정수 0으로 변환

o  ASCII 코드 값이 정수형이므로 문자인 수식도 결과 값으로 사용 가능

 

(2)   case

o  case문에 명시하는 값은 반드시 정수형 상수 한 개만 가능

o  변수를 포함한 수식은 가능한데 상수끼리의 수식은 불가능

o  문자상수 가능

o  case문 뒤 문장에 일반적으로 break문 가짐(switch문 종료)

 

(3)   실행의 흐름

o  switch문은 조건식을 평가한 결과 값이 case문의 값을 차례대로 비교해 같은 값을 가진 case문 뒤의 문장을 실행

그 후 break문 만나면 switch문 빠져나옴

 

(4)   default

o  조건식 결과 값과 case 뒤의 값을 비교하여 일치하는 값을 찾지 못하면 default문 뒤의 내용 실행

o  불필요하면 생략 가능

o  default문이 case문 중간에 위치하면 default문 뒤의 내용을 실행한 다음 뒤의 case문 계속 실행

 

2)    주의사항

(1)   switch문에서 break문을 생략할 경우

o  실행문장 뒤에 break문 없으면 그 뒤 case문과 상관없이 다음 문장을 계속 실행해 모든 문장 실행한 후 switch문을 빠져 나옴

 

(2)   여러 결과 값에 따라 동일한 코드를 처리할 경우

o  break를 사용하지 않음으로써 조건식의 여러 결과 값에 따라 동일 코드 처리 가능

case 1 : case 2 : 실행문

casel 3 : case 4 : 실행문

case 1, 2 : <- 이렇게는 안됨

 

2절 반복 제어문

l  동일한 내용을 특정횟수만큼 반복하여 처리할 때 사용

l  Loop 루프라고도 함

l  반복문 작성할 때는 먼저 어떤 내용을 반복해야 하는지부터 분석해야 함!

 

1.     for

n  for문은 반복횟수가 분명할 때 사용

1)    for문의 형식과 실행 흐름

(1)   for문 헤더

o  for문의 첫 행

o  세 부분으로 나뉘고 반드시 ;로 구분

    초기식 : 반복 루프가 시작될 때 한 번만 실행. 루프 반복을 제어하는 제어변수 초기화하는 용도로 사용. 제어변수도 변수를 먼저 선언해야 함.

    조건식 : 조건식의 결과 값이 참이면 for문의 본체를 실행, 거짓이면 본체를 실행하지 않음

    증감식 : 제어변수를 증가시키거나 감소시키는데 사용. for문의 본체를 실행하면 실행 순서가 증감식으로 이동

-      증감식 실행 한 후에는 언제나 조건식 부분으로 이동

-      증감식의 실행으로 제어변수의 값이 변경되어 조건식의 결과 값이 거짓이 되면 반복이 끝남

 

(2)   for문 본체

o  본체의 마지막 문장을 실행하면 언제나 헤더의 증감식으로 돌아감

 

(3)   주의사항

o  for문의 헤더 뒤에 처리문장 없이 ;로만 구성된 문장(null문장)

-      for문의 헤더 부분만 반복 -> 결국 1번만 실행됨

-      int i;

for(i = 1; i <= 5; i++) ; <- 요걸로 끝

 

o  for문의 헤더에서 초기식, 조건식, 증감식을 구분하기 위해 ; 써야 함

 

2)    다양한 for문의 헤더

(1)   초기식에서 콤마 연산자를 이용하는 여러 문장 사용 가능, 증감식도 다양하게 사용 가능

o  초기화를 하는 식이니 다양한 변수를 초기화 할 수 있다

o  int i, sum;

for(sum = 0, i = 1 ; i <=10 ; i++) { } // 뭐 이렇게

for(i = 9 ; i > 0 ; i--, sum++) {} // 이렇게도 ok

 

(2)   for문의 조건식에서는 논리연산자를 이용해 여러 조건 결합 가능

o  int i, sum, n;

for(sum = 0, i = 1; i <= 5 && sum <= 10; i++) sum += i ; // 이런 식

 

(3)   초기식, 조건식, 증감식을 모두 생략할 수 있음

o  무조건 for문의 본체를 실행함. 무한반복!

o  본체 안에서 for문 탈출하는 방법을 반드시 포함시켜야 함

break문을 쓰는 것 같이

 

3)    중첩된 for

(1)   형식과 실행 흐름

o  반복문 안에 또 다른 반복문이 포함된 것

o  각 반복문의 제어변수가 달라야 함

 

(2)   중첩된 for문에서 제어변수의 활용

o  중첩된 for문에서 안쪽으로 중첩되는 for문들은 자신보다 밖에 있는 for문의 제어변수들을 많이 활용함

int line, star;

for(line = 1; line <= 5; line++){

           for(star=1; star <= line; star ++){}

}

for의 반복 횟수를 고정시키지 않고 외부 for문의 제어변수로 지정

-> 외부 제어변수가 증가할 때 내부 제어변수 반복 횟수가 같이 증가함

 

2.     while

n  while문은 반복횟수는 정확히 모르며 특정 조건을 만족하는 한 반복할 때 사용

1)    while문과 for문의 비교

u  while문 이전에 제어변수가 초기화되고 while문의 본체가 끝나기 전에 제어변수의 증감식이 포함됨

 

2)    while문과 무한루프

u  while문에서 무한루프를 만들려면 조건식이 항상 참이면 됨

u  보통 조건식으로 1을 넣으면 됨

u  반복을 끝내고 while문 탈출할 수 있도록 break문을 이용하는 경우가 많음

 

3.     do ~ while

n  do ~ while문은 반복횟수는 정확히 모르지만 무조건 한 번은 반복한 후 특정 조건을 만족하는 한 반복이 필요할 때 사용

1)    do ~ while문의 형식과 실행 흐름

(1)   형식과 실행 흐름

o  do문 뒤에 조건식이 없으므로 무조건 본체를 실행함. 본체를 실행한 후 while 뒤의 조건식을 검사해 참이면 다시 본체를 실행하고 거짓이면 do ~ while문을 탈출함

 

2)    do ~ while문의 본체

u  반복할 문장이 하나뿐이더라도 반드시 { }로 묶어야 함

u  본체가 끝난 후 while(조건식)을 붙임

u  마지막은 ;로 끝남

 

3절 기타 제어문

1.     break

n  switch, while, do ~ while문을 실행하는 중간에 완전히 탈출할 때 사용

n  break문 사용 시 주의 사항

u  개수에는 제한이 없음. 많이 쓰면 코드 복잡해짐

u  중첩된 루프인 경우 내부 루프에서 break문 사용하면 break문이 속한 내부루프만 탈출

u  if문 탈출은 안됨

u  break문은 반복문과 switch문에서만 사용.

 

2.     continue

u  continue문의 다음 내용만 실행하지 않은 채 다음 반복으로 진행하기 위해 루프의 시작이나 끝으로 이동

u  continue를 만나면

o  for : 무조건 헤더의 증감식으로 이동

o  while : 헤더의 조건식으로 이동

o  do ~ while : 맨 끝 while 뒤의 조건식으로 이동

 

3.     goto

n  프로그램 실행 중 레이블이 붙은 위치로 제어를 무조건 이동시킴

n  문장을 가리키는 레이블이 필요

n  레이블 구별하기 위한 이름과 콜론( : )이 필요

 

1)    goto문의 주의사항

u  중첩된 반복 루프에서 문제가 발생하였을 때 중첩된 루프를 단번에 빠져나올 수 있어 유용

u  C언어의 레이블 (세 가지)

o  switch ~ case문의 case 레이블, default 레이블

o  goto 레이블

u  레이블 이름은 작명규칙 준수, 레이블 이름 뒤에는 반드시 콜론

u  goto문은 switch문의 레이블에 갈 수 없고 해당 레이블 이름 있는 곳으로만 이동


+ Recent posts