본문 바로가기

컴퓨터 일반/프로그래밍언어론

프로그래밍(3) 제어문

제어문

프로그램과 c언어는 특별하지 않으면 위에서부터 아래로 흐른다.

하지만 효율성을 위해 조건에 맞지 않으면 다시 하거나 반복하는 흐름을 만들기도 한다.

흐름의 방향을 바꿔주는 것을 제어문이라고 한다.

if문, for문, while문, do-while문, switch case문, break문, continue문이 있다.

https://www.youtube.com/watch?v=DwPeoK3Ndzg&list=PLpYNFXUfkvDomFmLaDEVtwDs7e9NhT_j2&index=76

순서도가 나오면 먼저 변수를 적는다 (준비 기호)

a even odd
10 0 0

 

반복 변수 i가 1에서 시작되고(초기값) a가 될때까지(최종값) 1을 증가시킨다(증가값)

i를 2로 나눠서 나머지가 0이면 even = even + i

아니라면 odd에 누적시킨다

(나머지가 0이면 짝수, 1이면 홀수)

1이 증가해서 2가 된다

a가 될때까지 반복한다 (a=10)

a even odd i
10 0 0 1
    1  
  2   2
    4 3
  6   4
    9 5
  12   6
    16 7
  20   8
    25 9
  30   10
      11

 

https://www.youtube.com/watch?v=DwPeoK3Ndzg&list=PLpYNFXUfkvDomFmLaDEVtwDs7e9NhT_j2&index=76

a even odd i
10 0 0 1
    1 2
  2   3
    4 4
  8   5
    9 6
  14   7
    16 8
  22   9
    25 10
  32   11

 

if 문

조건에 따라서 실행하는 문장을 두 개 중 하나 선택한다

if(조건)

실행할 문장 1;

else

실행할 문장 2;

→ 조건이 참이면 문장 1을 실행하고 빠져나간다.

https://www.youtube.com/watch?v=DwPeoK3Ndzg&list=PLpYNFXUfkvDomFmLaDEVtwDs7e9NhT_j2&index=76

a b
15  
  5
  10

 

switch 문

분기가 여러개일 때 간단히 처리할 수 있는 제어문으로 다중 if문으로 표현 가능하다

if는 분기할 곳이 yes, no 두군데인데, 여러개로 분기할 경우 다중 if문을 만든다

switch문은 분기할 곳을 애초에 여러개 만들어놓는다.

형식

switch(식)

{

case 레이블 1 : 실행할 문장 1; break;

case 레이블 2 : 실행할 문장 2; break;

case 레이블 3 : 실행할 문장 3; break;

default 실행할 문장 4;

break;

}

  • 식의 결과가 레이블 중 하나가 나와야 한다
  • break는 탈출

https://www.youtube.com/watch?v=DwPeoK3Ndzg&list=PLpYNFXUfkvDomFmLaDEVtwDs7e9NhT_j2&index=76
https://www.youtube.com/watch?v=DwPeoK3Ndzg&list=PLpYNFXUfkvDomFmLaDEVtwDs7e9NhT_j2&index=76

 

for 문

초기값, 최종값, 증가값을 지정하는 수식을 이용해 정해진 횟수를 반복하는 제어문

형식

for(식1; 식2; 식3)

실행할 문장;

  • 식1은 초기값을 지정하는 식 (한번만 한다)
  • 식2는 최종값이 나오게 하는 수식 (조건을 따지고 실행하고)
  • 식3은 증가값이 나오게 하는 수식 (증가)

 

1부터 10까지 합을 더하는 순서도와 프로그램

먼저 순서도로는 알고리즘을 확인한다, 그림을 보면 누구나 국적 관계없이 이렇게 코딩하는구나 이해한다 (표준적인 기호를 사용하기 때문에) 이것을 보고 코딩을 한다.

https://www.youtube.com/watch?v=DwPeoK3Ndzg&list=PLpYNFXUfkvDomFmLaDEVtwDs7e9NhT_j2&index=76

*10까지니까 10까지는 반복하고 11부터는 stop, 마지막에 i=11이 찍힌다

벗어날때 증가값보다 +1 커지는것 주의하기

i hap
  0
1 1
2 3
3 6
4 10
5 15
6 21
7 28
8 36
9 45
10 55
11  

 

while 문

while이란 ~동안, 즉 참인동안 반복한다

조건이 참인 동안 정해진 문장을 반복 수행하다가 조건이 거짓이면 벗어나는 반복문이다

형식

while(조건)

실행할 문장;

  • 조건이 참인 동안 무한 반복한다
  • 조건에 참과 거짓을 구분할 수 있는 문장을 쓴다
  • 조건에 어긋나야만 벗어나기 때문에 문장 어디선가 조건에 어긋나는 내용이 있어야 한다

순서도에 반복기호가 없고 돌아가는 화살표가 있다

조건 <>은 참과 거짓을 만드는 수식이다

while문은 조건에 어긋나면 바로 끝나버린다

do while문은 조건이 밑에 있다, 그래서 한번은 실행한다.

*예전에는 goto문을 사용해서 수식을 많이 썼는데 요즘은 goto문을 거의 쓰지 않는다. 남발하면 스파게티 코드가 되어버린다, c는 지원하지만 거의 안쓰고 자바는 아예 지원을 안한다

 

(c언어는 모든 변수를 반드시 선언해야 하지만 그렇지 않은 언어도 있다

순서도에서 준비기호가 없는 경우는? 변수를 알아서 쓰라는 것임)

https://www.youtube.com/watch?v=DwPeoK3Ndzg&list=PLpYNFXUfkvDomFmLaDEVtwDs7e9NhT_j2&index=76

i hap
0 0
1 1
2 3
3 6
4 10
5 15
6 21
7 28
8 36
9 45
10 55

i가 10이 되면 문장은 멈춘다, for문과 다른 점은 10이 되면 더이상 문장을 실행하지 않는다는 것이다. i가 11이 아닌 10이 되어서 끝난다

 

do~while문

do while 이란 ~하는 동안 하라는 뜻,

while문은 조건을 먼저 물어보고 진행을 하다가 돌아간다.

do while문은 먼저 하다가 끝에 가서 조건을 따진다(조건이 나중에 나온다)

조건에 어긋나면 벗어나고 조건에 맞으면 돌아가서 다시 한다. 어떤 일을 처음에 무조건 해야 할 때 유용하다(데이터 읽기 등)

while 문과 같은 동작을 하지만 무조건 한번 실행한 다음 조건을 판단하여 탈출 여부를 결정

형식 :

do 실행할 문장

while(조건)

https://www.youtube.com/watch?v=DwPeoK3Ndzg&list=PLpYNFXUfkvDomFmLaDEVtwDs7e9NhT_j2&index=76

 

break, continue

반복문을 제어하는 명령이다

  • break는 swich-case 문이나 반복문을 벗어날 때 쓴다. 자기 블록을 벗어난다
  • continue는 반복문에서만 쓴다. 반복문을 수행하다가 건너 띄고 반복문을 수행하고 싶을때 coutinue문을 쓴다. continue 이후의 문장을 실행하지 않고 제어를 반복문의 처음으로 이동한다

https://www.youtube.com/watch?v=DwPeoK3Ndzg&list=PLpYNFXUfkvDomFmLaDEVtwDs7e9NhT_j2&index=76

프로그램과 순서도는 무조건 위에서 밑으로 내려간다

  • while(1)이란 계속 반복한다는 뜻이다, break를 만나지 않으면 계속 반복한다 (무한 루프)
  • if(i>10) break; 조건을 만족하면 해당 문장을 끝낸다
  • i%5=0 //i가 5의 배수인가를 물어보는 것
  • if(i%5==0) continue; //조건에 만족하면 해당 블록을 벗어난다 (while 문의 처음으로 돌아간다)
  • 아니라면 hap+=i;를 수행한다
i hap
0 0
1 1
2 3
3 6
4 10
5  
6 16
7 23
8 31
9 40
10  
11  

해당 문장의 결과로 i는 11, hap은 40이 출력된다.