a > b -> a가 b보다 큰가?
printf("연산결과가 참인 경우 : %d\n", 20>10);
printf("연산결과가 거짓인 경우 : %d\n", 10>20);
->
연산결과가 참인 경우 : 1
연산결과가 거짓인 경우 : 0
관계연산자 정리
10 < a < 20 (X)
a > 10 and a < 20 (O)
논리연산자 정리
if(조건식) 실행할 문장;
조건식: 참/거짓을 판단할 수 있는 조건
- 관계 연산식
- 논리 연산식
- 0 or 1
- etc
if(조건식) 실행할 문장1;
else 실행할 문장2 //주의: else 뒤에는 조건식이 없다
if(조건식 1) 실행할 문장1;
else if(조건식 2) 실행할 문장2;
else 실행할 문장3;
가장 간단한 if문
- if문의 조건식이 참이면 실행할 문장을 실행한다.
int a, b, res; printf("두 정수를 입력하세요 : "); scanf("%d%d", &a, &b); if(b!=0) res = a/b; //b가 0이 아닌 경우만 선택적으로 실행된다 printf("a를 b로 나눈 몫: %d\n", res);
- 실행할 문장이 두 개 이상이면 중괄호로 묶어준다.
if(b!=0) { res = a/b; printf("a를 b로 나눈 몫: %d\n", res); } -> if(b!=0) res = a/b; printf("a를 b로 나눈 몫: %d\n", res);
예시문제
- 절대값 출력 프로그램
if~else구문을 사용한 선택문
- 조건식의 참, 거짓에 따라 각각 실행할 문장이 있을 때 사용한다.
- 조건식이 거짓일 때 실행할 문장이 여러 개라면 중괄호를 사용하여 묶어준다.
예시문제2
- 유료입장 & 무료입장
if~else if~else구문을 사용한 선택문
- 조건에 따라 선택한 문장이 많은 경우에 사용
예시문제3
- 학점계산 프로그램
예시문제4
- 입력 오류 확인 프로그램
else의 결합 문제
- if~else문에서 조건식이 참인 경우에 실행할 문장이 if문이면 예상치 못한 else가 달라 붙는 문제가 발생
-> 조건식이 참일 때 실행할 문장 자체가 새로운 선택문- 이 경우에 안쪽에 중첩된 if문이 하나의 문장일지라도 중괄호를 사용하여 구분한다
if(조건식1){ if(조건식2) 실행할 문장1; } else 실행할 문장2;
switch(정수값){
case 정수값1: //switch의 정수값이 case의 정수값1과 일치하면
실행할 문장1 //실행할 문장1을 실행한다. break문은 switch
break; //-case문의 블록을 벗어나는 역할을 한다.
case 정수값2:
실행할 문장2 //switch의 정수값이 case의 정수값2와 일치하면 실행할
break; //문장2를 실행한다
default:
실행할 문장3 //switch의 정수값과 일치하는 case의 정수값이 없으면
break; //default의 실행할 문장3을 실행한다.
}
※주의
break가 없으면 switch~case문은 분기문이다.
- break이 switch~case문을 선택문으로 사용할 수 있도록 한다.
- break문이 하나도 없고 2번이 당첨되었다면?
switch(lot){ case 1: printf("1번\n"); case 2: //일단 case 2로 간다. break가 없으므로 printf("2번\n"); case 3: printf("3번\n"); default: //블록 끝까지 모든 문장을 실행한다. printf("당첨자가 없습니다.\n"); } -> 출력결과 2번 3번 당첨자가 없습니다.
예시문제5
- 대학 등록금 계산 프로그램
예시문제6
- 사칙연산 프로그램
예시문제7
- 전기요금 계산 프로그램