논리 연산자 파트 3
Coddy C 여정의 Fundamentals 섹션에 포함된 레슨 — 63개 중 23번째.
여러 조건을 확인할 때, 프로그램은 최종 결과를 알게 되는 즉시 확인을 중단합니다. 이를 단락 평가(short-circuit evaluation)라고 합니다.
예를 들어:
int x = 0;
int y = 5;
int result = (x != 0) && (y / x > 2);여기서 x는 0과 같으므로, y / x > 2를 평가하지 않습니다. 만약 순서를 바꾼다면:
int result = (y / x > 2) && (x != 0);이것은 y가 0으로 나누어지기 때문에 오류를 발생시킬 것입니다. C 언어에서 0으로 나누는 것은 정의되지 않은 동작입니다. 따라서 정확하고 효율적이면서도 오류가 없는 코드를 작성할 수 있도록 연산 과정을 충분히 생각하는 것이 좋은 습관입니다.
이 기법은 논리식의 평가를 최적화하는 데 사용됩니다. 예를 들어:
int a = 0;
int b = 2;
int c = 3;
int d = 5;
int result = (a > 0 && b < 2) || (c < -5 && d < 10);이 예제에서 a > 0과 c < -5가 모두 거짓(false)이므로 b < 2와 d < 10은 평가되지 않습니다.
챌린지
쉬움태양광 에너지 생산에 적합한 날인지 결정하는 프로그램을 작성하세요.
다음 변수들을 초기화하세요:
isSunny를 값 1 (true)로windSpeed를 값 5.4로temperature를 값 23으로solarPanelOutput을 값 9로isCloudy를 값 0 (false)로
다음의 모든 조건을 확인하는 하나의 논리식을 작성하세요:
- 날씨가 맑음
- 풍속이 10 미만임
- 태양광 패널 출력이 15 미만임
- 온도가 20 초과 또는 구름이 없음
모든 조건이 충족되면 "Good day for solar energy"를 출력하고, 그렇지 않으면 "Not ideal for solar energy"를 출력하세요.
치트 시트
단락 평가(Short-circuit evaluation)는 최종 결과가 결정되는 즉시 조건 확인을 중단하여 논리식 평가를 최적화합니다.
&& (AND) 연산자의 경우, 첫 번째 조건이 거짓(false)이면 두 번째 조건은 평가되지 않습니다.
int x = 0;
int result = (x != 0) && (y / x > 2); // y/x는 평가되지 않음|| (OR) 연산자의 경우, 첫 번째 조건이 참(true)이면 두 번째 조건은 평가되지 않습니다.
int result = (a > 0 && b < 2) || (c < -5 && d < 10);
// 만약 a > 0이 거짓이면, b < 2는 평가되지 않음
// 만약 첫 번째 부분이 참이면, 두 번째 부분은 평가되지 않음순서가 중요합니다. 0으로 나누기처럼 오류를 일으킬 수 있는 조건은 안전 확인 조건 뒤에 배치하세요.
// 안전함: x != 0을 먼저 확인
int result = (x != 0) && (y / x > 2);
// 안전하지 않음: 0으로 나눌 수 있음
int result = (y / x > 2) && (x != 0);직접 해보기
#include <stdio.h>
int main() {
// 변수 초기화
int isSunny = 1;
float windSpeed = 5.4;
int temperature = 23;
int solarPanelOutput = 9;
int isCloudy = 0;
// 논리식 생성
int isGoodDay =
// 아래 내용은 변경하지 마세요
if (isGoodDay) {
printf("Good day for solar energy\n");
} else {
printf("Not ideal for solar energy\n");
}
return 0;
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.