본문 바로가기

전자공학

구조제어구문(if문, while문, for문, if-else문, goto문)

728x90
반응형

요약

 

조건에 맞으면 지정한 코드를 실행하고 그렇지 않으면 실행하지 않거나(if문)

조건을 만족할때가지 지정한 코드를 반복하거나(while문), 

지정한 코드를 일정한 수만큼 반복하는 것(for문)




 정의상 가정

 고급 언어 (high-level language)어셈블리어(assembly language)

 내용상 가정

 

 공식

 

 단위

 

 응용

 


파란 박스의 글자를 클릭하시면 가정과 응용으로 넘어 가실 수 있습니다!!



고급언어에서 공통적으로 쓰는 구문 중 하나는 바로 

조건에 맞으면 지정한 코드를 실행하고 그렇지 않으면 실행하지 않거나(if문)

조건을 만족할때가지 지정한 코드를 반복하거나(while문), 

지정한 코드를 일정한 수만큼 반복하는 것입니다.(for문)


언어에 따라 다르지만 전반적으로 다음과 같은 형태를 취하고 있습니다.



여기서 조건이 맞는다는 것은 예를 들어 x라는 변수에 2가 저장되어있고, x>1이라는 논리 판단이 나왔을 경우

이는 TRUE입니다. 만약 x>3이라는 논리 판단에서는 FALSE입니다. 즉 조건이라는 곳에는 논리판단이 들어가는 것입니다.

(더 자세한 사용 방법은 마지막에 쓰겠습니다.)


그렇다면 프로그램 설계자는 이러한 구문을 왜 만들었을까요??


덧셈과 뺄샘, 곱셈과는 다르게 if문 while문, for문 같은 경우 어셈블리어에는 없습니다.

그렇다고 새로운 어셈블리어를 만든것은 아닙니다! 말도 안돼죠!

물론 어셈블리어에서 if문,while문, for문의 기능을 구현할 수 있으나 복잡합니다.

따라서 설계자는 이러한 기능을 고급언어에서 읽기 쉬고 쓰기 쉽게 즉 편리하게 하기 위해 만든겁니다.


만약 x가 3이맞으면 지정한 코드를 실행시키고 

그렇지 않으면 생략하는 기능을 구현시킬때

비교하는 기능과 코드마다 주소를 만들어 어느정도 뛰어넘어 코드를 실행시키는 기능을 가지고 만들 수 있을까요?

 


이렇게 한다면 if문을 구현할 수 있을 것 같습니다.


어셈블리어에는 비교하는 기능과 점프(다른 코드 주소로 뛰어넘는)하는 기능이 있습니다.

어셈블리어는 즉 기계인데 기계 회로를 구성할 때

논리소자의 NAND를 조합하면 충분히 구현할 수 있지 않을까요? 

점프에 대해선 CPU의 한 예시를 참고하시길 바랍니다!


이 점프랑 같은 기능이 고급언어에 있습니다!!

바로 goto문 입니다!!!


바로 C언어로 쓴 예시를 볼까요?

다음은 x가 양수인지 음수인지 0인지 판별하는 코드입니다.


#include <stdio.h>


void main()

{

int x=10;


if(x<=0)

{

goto A;

}

printf("x는 0보다 크다");

goto END;

A:

if(x>=0)

{

goto B;

}

printf("x는 0보다 작다.");

goto END;

B:

printf("x는 0이다.");

END:

return;

}


만약 0보다 작거나 같으면 A로 이동하고 0보다 크지거나 같지 않으면 "x는 0보다 작다."라는 문구를 출력하면서 END로 이동하여 프로그램을 종료합니다.

뭔가 더 편리하게 만들 수 있지 않을까요?

따라서 프로그래머가 만든 구문이 if-else구문입니다.

새로운것은 아닙니다. goto문을 알아보기 쉽게 만든것입니다.


#include <stdio.h>


void main()

{

int x=10;


if(x>0)

{

printf("x는 0보다 크다");

}

else if(x<0)

{

printf("x는 0보다 작다");

}

else

{

printf("x는 0이다.");

}

return;

}


어떠신가요?

훨씬 알아보기 쉽지 않나요??

심지어 쓰기도 쉽습니다.


사실 while문 for문 모두 goto문으로 구현할 수 있습니다.

이렇게 구성하면 조건을 만족할 때 까지 반복할테니까요.


그러나 while문이나 for문도 이러한 알기쉬운 코드, 쓰기쉬운코드를 위해 만든것입니다.

goto문으로 코드를 짜다보면 정신없고 난잡하고 하나하나 따라가야합니다.


while문과 for문은 사실 차이가 없습니다.

for문은 단순히 프로그래머의 의도를 더 잘 파악할 수 있기 때문에 씁니다.

이외 다른 반복문 모두 이러한 편의를 위해 만든것으로

엄청나게 심오한 뜻은 없습니다.


goto문을 또 다르게 쓰는 문법이 있습니다. 

바로 break문입니다. 

반복하는 코드를 loop라고 하는데 

break문을 만나게 되면 이 loop를 중단하고 빠져나오게 됩니다.

goto문이랑 같지만 바로 중단하고 나온다는 개념에서 쉽게 쓰일 수 있겠죠??




사용예



사용예는 모두 C언어로 하겠습니다.

모두 모양의 차이일뿐이므로 언어 사이트에서 적용하여 쓰시면 됩니다.

(foreach문의 경우 생략하겠습니다!)


if(i<100)

{

코드내용

}


i가 100보다 작아야 코드내용이 실행됩니다!

i가 100보다 작지 않다면 {}안에 있는 코드내용은 생략되고 다음으로 넘어갑니다.


while(i<100)

{

코드내용

}


i가 100보다 작다면 코드내용이 반복됩니다.

나오기 위해선 break문이나, i가 100보다 작지 않아야 합니다.


for(i=0;i<N;i++)

{

코드내용

}


코드내용이 N번 반복됩니다.

이때 당연히 N은 자연수이어야합니다! 







반응형

'전자공학' 카테고리의 다른 글

프로토콜 레이어(protocol layers)  (0) 2017.03.25
옴의 법칙(ohm's law)  (0) 2017.03.01
고급 언어 (high-level language)  (0) 2017.02.23
컴파일러(compiler)  (0) 2017.02.18
어셈블리어(assembly language)  (0) 2017.02.18