지난 편 문제 풀이
제어문
제어문은 조건이 참이면 하는 작업과
거짓이면 하는 작업을 구분 지을 수 있습니다.
#include <stdio.h>
int main()
{
int a = 0;
if (a < 5)
{
printf("a < 5 \n");
}
if (a)
{
printf("a\n");
}
return 0;
}
if() 안에는 조건식, 변수, 값, 등등을 넣을 수 있습니다.
보통은 (변수가 포함된) 조건식을 넣죠
그러나 특징을 한번 알아보는 시간이 되었으면 합니다.
0이 아닌 모든 수가 참이라는 것은 앞에서 이야기해왔습니다.
이 기준은 끝까지 함께하는 기준이 될 것입니다.
a가 0이라 a < 5 식에서 참이 됩니다.
이 관계연산자에서 꼭 기억해야 할 내용은
연산자 왼쪽이 기준이 된다는 사실입니다.
a가 5보다 작으면이라는 얘기가 됩니다.
참이면 if의 구역이 블록으로 정해져 있으니
해당 if 문 구역 안 출력문으로 진행하게 됩니다.
거짓이면 내부로 진입하지 않습니다.
두 번째 if(a)는 a의 값이 0이 들어가 있기 때문에
0은 거짓이 되며 안의 내용을 실행하지 않게 됩니다.
int a=3;
1. if(a<5)
printf("a\n");
printf("b\n");
printf("c\n");
2. if(a<5) printf("a\n");
printf("b\n");
3. if(1 < a < 7)
printf("a\n");
4. if('a')
printf("a\n");
5. if('a'-97)
printf("a\n");
6. if("안녕하세요")
printf("a\n");
7. if(1 + 3 = a)
printf("a\n");
위의 다양한 조건들이 있습니다.
보통은 저렇게 쓸 이유가 없어서
모르는 경우가 많을 것 같습니다..
1. if(a<5)
printf("a\n");
printf("b\n");
printf("c\n");
if의 구역이 정해지지 않았을 경우에는
if 문의 영향은 바로 다음 문장까지 효과를 받습니다.
그래서 조건은 참이기 때문에 a b c 모두 출력이 됩니다.
2. if(a<5) printf("a\n");
printf("b\n");
1번과 비슷한 형태인데
if 문의 영향은 바로 다음 문장까지 효과를 받기 때문에
문장의 끝은 ;으로 나타내기 때문에
다음 문장의 끝 ;까지 만 영향을 줍니다.
그래서 조건이 참이라서
a b 모두 출력됩니다.
(거짓이라면 b만 출력될 것입니다.)
3. if(1 < a < 7)
printf("a\n");
이것은 1보다 크고 7보다 작은 조건을 달아보려고 한 것입니다.
a는 3이기 때문에 대입해서 다시 한번 살펴보도록 하겠습니다.
1 < 3 < 7
이게 참일까요 거짓일까요
같은 우선순위의 연산자가 만났을 경우 연산 방향을 확인해야 합니다.
그리고 연산자의 왼쪽이 기준이 됩니다.
1 < 3 < 7
└─<─┘
1─────7
1 =1
그래서 조건식이 참이 됩니다.
그러나 1보다 크고 7보다 작다는 조건식에는 위의 식보다
and 연산자를 이용하는 것이 좋습니다.
if(a > 1 && a <7)
이렇게 쓰시면 됩니다.
4. if('a')
printf("a\n");
'a'는 문자입니다.
문자는 곧 아스키코드 값과 연관이 있습니다.
그래서 if(97)과 같은 효과를 가지게 됩니다.
결론은 참
5. if('a'-97)
printf("a\n");
이것은 거짓입니다. 4번과 연관되는 내용입니다. a의 10진수 아스키코드는 97입니다.
6. if("안녕하세요")
printf("a\n");
문자열이 들어가 있습니다.
이렇게 쓸 일이 없기 때문에 이것에 대한 내용을 모르는 사람이 많을 것 같습니다.
문자열은 배열입니다.
배열은 포인터입니다
포인터는 주솟값을 참조합니다.
주솟값은 숫자로 되어있습니다.
그래서 참입니다.
7. if(1 + 3 = a)
printf("a\n");
= 대입 연산자 왼쪽은 변수여야 합니다.
또한 이런 식은 if에서 사용할 수 없습니다.
결론은 오류가 납니다.
if 안의 들어갈 수 있는 식으로 변환을 한다면 if (1 + 3 == a)
이렇게 되어야 오류는 피할 수 있을 것입니다.
if else
#include <stdio.h>
int main()
{
int a = 0;
if (a>5)
{
printf("a>5\n");
}
else
{
printf("a<=5\n");
}
return 0;
}
if 문이 참이 아닐 경우에 실행문을 달 수 있는 구조입니다.
기존의 if 문은 참이 아닐 경우에 실행문을 따로 달 수 없었습니다.
if (a>5)
{
printf("a>5\n");
}
else(a>5) //이렇게 조건을 달 수 없습니다.
{
printf("a<=5\n");
}
//----------위와 별개------------------//
else //if 없이 단독으로 사용이 불가능 합니다.
{
printf("a\n");
}
중첩 if 문
#include <stdio.h>
int main()
{
int a = 5;
if (a > 3)
{
if (a < 7)
printf("3 < a < 7\n");
else
printf("a >= 7\n");
}
else
printf("a <= 3\n");
return 0;
}
if 문 안에 if 문입니다.
조건을 판단 후 참이면 다시 조건을 판단하는 형태입니다.
처음 조건식에 거짓이 나온다면 가장 아래에 있는 else를 만나게 됩니다.
이렇게 if else if else 가 짝으로 이루어져 있고
어느 것이 짝인지 잘 확인하시기 바랍니다.
이런 식으로 내부에 if 문을 원하는 데로 넣을 수 있습니다. 3개 이상 중첩되는 일은 거의 없지 싶습니다.
if (a > 3)
{
if (a < 7)
이 조건식은 하나로 만들 수 있습니다.
if(a>3 && a <7) 이렇게 말입니다.
else if
#include <stdio.h>
int main()
{
int a = 0;
if (a > 5)
{
printf("a > 5\n");
}
else if (a > 4)
{
printf("a > 4\n");
}
else if (a > 3)
{
printf("a > 3\n");
}
else
{
printf("a == %d\n", a);
}
return 0;
}
else에는 조건식을 못 달지만 else if에는 가능합니다.
이것은 처음의 조건식이 거짓이면
아래의 else if에서 또다시 조건 판단을 하게 됩니다.
또 거짓이면 다시 아래로 가서 조건 판단을 하며
모든 else if 조건이 거짓이라면
마지막 else 안의 내용을 출력합니다.
int a = 5;
if (a > 5)
{
printf("a > 5\n");
}
if (a > 4)
{
printf("a > 4\n");
}
if (a > 3)
{
printf("a > 3\n");
}
else
{
printf("a == %d\n", a);
}
중간의 else if에서 else를 지우면 어떻게 될까요
a 가 5라면
a > 4
a > 3
식이 참이 되므로 두 개 모두 출력이 됩니다.
그리고 마지막 else는 위의 if 문과 짝이 됩니다.
또 단독 else는 삭제를 하더라도 if 문만 있다면 소스 코드 상의 오류는 없습니다.
'컴퓨터 프로그래밍 > C' 카테고리의 다른 글
C언어 제어문 (switch~case / break / continue) (0) | 2019.07.18 |
---|---|
C언어 제어문 (while / do while / for) (0) | 2019.07.18 |
C언어 증감 연산자 / 캐스팅 연산자 / sizeof 연산자 (0) | 2019.07.18 |
C언어 관계 연산자 / 논리 연산자 / 대입 연산자 (0) | 2019.07.18 |
C언어 연산자 우선순위 (0) | 2019.07.18 |