머구리씨의 C언어 강좌,
안녕하세요. 머구리씨입니다.
오늘은 조건문의 원리에 대해서 알아보겠습니다.
기본적으로 조건문이라고 하면 만약에의 뜻을 가지고 있는 if문이 대표라 하겠는데요.
if문의 구조는 이렇습니다.
이 기본 구조는 변하지 않습니다. 무조건 적어야 합니다.
만약에의 뜻을 가지고 있는 “if”로 시작해서 두 영역이 있는데요.
if( 조건 ){
명령1 ;
명령2 ;
...
}
만약에의 조건을 적는 조건 영역,
명령어들의 묶음인 명령어 영역
이 있습니다.
명령어 영역에는 여러 개의 명령어가 들어올 수 있구요.
if문 다음에도 if 문과 관계없이 실행하는 명령어들이 자리잡을 수 있습니다.
이 구조를 풀어서 이야기하면 이렇습니다.
“조건 영역의 값이 참이면
명령어 영역의 명령들을 실행해라”
그럼 “조건 영역의 값이 참이면”이 어떤 의미일까요?
참이 있다면? 거짓도 있다는 의미이겠죠?
논리값으로 사용하면 TRUE, FALSE 라고 합니다.
이걸 스위치로 사용하면 ON, OFF 라고도 합니다.
그럼 참과 거짓을 컴퓨터는 어떻게 인식할까요? 모두 알고 있다시피 컴퓨터가 인식할 수 있는 값은 1, 0 두 개뿐이죠.
컴퓨터는 참은 1, 거짓은 0 으로 인식합니다.
모두 어디에서 사용하느냐에 따라 달라 보이긴 하지만 일맥상통하는 값입니다.
따라서, “조건 영역의 값이 참이면”이란 말은 “조건 영역의 값이
1 이면”이란 말과 같은 해석이 가능합니다.
결론적으로 다시 풀어서 설명해보면 “조건 영역의 값이 1이면
명령어 영역의 명령들을 실행해라”와 같은 뜻이라는 얘기입니다.
if( 1 ){
printf(“A”);
printf(“-”);
}
printf(“B”);
printf(“-”);
이 조건문을 실행하면 어떻게 될까요? 조건영역에 1이 있으므로 참이란 얘기죠. 그럼 if문 내부의 명령인
이 행이 실행되서 “A”,
그 다음 행이 실행되서 “-”,
그 다음 행이 실행되서 “B”,
마지막 행이 실행되서 “-” 가 순서대로 출력됩니다.
그럼 조건영역의 값 1 이 0 으로 바뀌면 어떻게 될까요?
if( 0 ){
printf(“A”);
printf(“-”);
}
printf(“B”);
printf(“-”);
0 은 참이 아니므로
명령어 영역에 있는 명령이 실행되지 않습니다.
if문을 떠나는 거죠~ 그리고 if 문 밖에 있는 행이
실행되서 “B”,
그 다음 행이 실행되서 “-” 가 순서대로 출력됩니다.
---------------------------------------
두 번째 경우로 조건영역에 값이 아닌 값을 저장하는 변수가 있으면 어떻게 될까요?
맞습니다 그 변수 안에 저장된 값에 따라 달라지겠죠?
예를 들어 변수 b를 사용한다고 하죠~
변수 b에 1이 저장되어 있느냐 0이 저장되어 있느냐에 따라 명령어 영역을 실행할 수도 있고 안할 수도 있다는 말입니다.
정수형 변수 b를 선언하고 1을 저장해보겠습니다.
int b=1;
if( b ){
printf(“A”);
printf(“-”);
}
printf(“B”);
printf(“-”);
조건영역의 값은... 1이죠. 참이라는 얘기입니다.
그럼 if문 내부의 명령인
이 행부터 순서대로 모두 실행되서 “A”, “-”, “B”, “-” 가 순서대로 출력됩니다.
만약에 변수 b에 1이 아닌
0을 저장하면
int b=0;
if( b ){
printf(“A”);
printf(“-”);
}
printf(“B”);
printf(“-”);
조건영역의 값은 참이 아니므로
명령어 영역에 있는 명령이 실행되지 않습니다.
if문을 떠나는 거죠~ 그리고 if 문 밖에 있는
행이 실행되서 “B”,
그 다음 행이 실행되서 “-” 가 순서대로 출력됩니다.
세 번째로 변수 b에 1이나 0 이런 값 대신에
이런 수식을 넣으면 어떨까요?
int b=5 2;
if( b ){
printf(“A”);
printf(“-”);
}
printf(“B”);
printf(“-”);
자.. “5가 2보다 큰가?”라는 이 연산의 결과가 변수 b에 저장되겠죠? 그럼 “5가 2보다 큰가?”의 연산 결과는 무엇일까요? 이 연산의 결과는 맞아/아니야, 진실/거짓 즉, 참 아니면 거짓 둘 중의 하나가 결과로 나타납니다.
자. 이 경우에 연산의 결과는 ... 참이죠~ 당연히 5가 2보다 크니까요. 따라서, 변수 b에는 연산의 결과값인 “참”이 저장이 되겠죠?.
그럼 변수 b에는 한글로 “참” 이란 값이 저장될까요? 컴퓨터에 “참”이라고 저장되진 않겠죠?
참이란 값은 컴퓨터에
1 로 저장이 된다고 했었죠? 따라서 변수 b에는 1이란 값이 저장되어집니다.
그럼 if문 내부의 명령인 이 행부터 순서대로 모두 실행되서 “A”, “-”, “B”, “-” 가 순서대로 출력되겠죠?
그럼 이런 경우는 어떤 결과가 나올까요?
“5가 2보다 작은가?”
int b=5 2;
if( b ){
printf(“A”);
printf(“-”);
}
printf(“B”);
printf(“-”);
네 맞습니다. “5는 2보다 작지 않죠” 따라서 이 연산의 결과는 거짓이 되구요.
거짓이라는 논리값은
컴퓨터에 0 이라는 값으로 저장이 됩니다.
따라서 if 문 내부는 실행이 안되고 밖에 있는 행이 실행되서 “B”, 그 다음 행이 실행되서 “-” 가 순서대로 출력됩니다.
그럼 이런 연산자로는 어떤 결과가 나올까요?
int b=5-2;
if( b ){
printf(“A”);
printf(“-”);
}
printf(“B”);
printf(“-”);
b에 저장되는 값이 3이겠죠? 그럼 조건영역에서 이 3이란 값을 참으로 인식할까요? 거짓으로 인식할까요?
여기서 잠깐, 컴퓨터가 인식하는 값은 0과 1뿐입니다. 그런데 그 외의 값은 어떻게 판단할까요?
컴퓨터가 값을 판단할 시에 참과 거짓으로 딱 떨어지는 논리값이 아닐 경우에
0 값만을 거짓으로 판단하고, 나머지 0 이외의 값은 모두 참으로 판단합니다.
즉, 여기에서는 변수 b에 0이 아닌 값 3이 저장되어 있으므로 참으로 인식한다는 얘기입니다.
그럼 if문 내부의 명령인 이 행부터 순서대로 모두 실행되서 “A”, “-”, “B”, “-” 가 순서대로 출력되겠죠?
자. 이 경우에는 b에 –4가 저장됩니다.
int b=5-9;
if( b ){
printf(“A”);
printf(“-”);
}
printf(“B”);
printf(“-”);
조건영역에서는 0 이 아닌 값으므로 참으로 판단하고 if 문 내부의 명령어들을 모두 실행합니다.
다만 이 경우에는 b에 0이 저장이 되겠죠~
int b=5-5;
if( b ){
printf(“A”);
printf(“-”);
}
printf(“B”);
printf(“-”);
당연히 0은 거짓임으로 if 문 내부의 명령어들을 모두 실행하지 않고, if 문 다음부터 실행함으로 이런 결과를 나타냅니다.
오늘은 조건문 if문의 아주 기본적인 작동 원리를 배웠습니다.
오늘 배운 if 문을 딱 2가지로 정리하겠습니다.
첫 번째, if문은 조건영역의 값이 참이면 정해진 구역 내의 명령어들을 실행하고 거짓이면 구역 내의 명령어들을 실행하지 않습니다.
두 번째, 조건영역에 있는 값중 0만을 거짓으로 인식하고, 그 외의 모든 값은 참으로 인식합니다.
감사합니다.
Информация по комментариям в разработке