[C언어] 선택문

이가영·2023년 8월 11일
0

C언어

목록 보기
6/16

관계연산자

  • 관계식은 두 값의 크기를 비교하는 연산이며 관계연산자를 사용
a > b  ->  a가 b보다 큰가?
  • 관계식의 결과는 참(1)과 거짓(0)이다.
printf("연산결과가 참인 경우 : %d\n", 20>10);
printf("연산결과가 거짓인 경우 : %d\n", 10>20);
->
연산결과가 참인 경우 : 1	
연산결과가 거짓인 경우 : 0

관계연산자 정리

  • 범위를 표현할 떄는 논리식을 사용
10 < a < 20 (X)
a > 10 and a < 20 (O)
  • 논리연산자는 두 피연산자의 참과 거짓에 따라 연산의 결과값을 결정하며, 논리식의 결과 역시 참과 거짓이다.
    -> a의 값이 15일 때 (a > 10) and (a < 20) -> 논리연산의 결과는 참!

논리연산자 정리


if문을 사용한 선택문

  • if문의 가장 기본이 되는 형태
if(조건식) 실행할 문장;
조건식: 참/거짓을 판단할 수 있는 조건
- 관계 연산식
- 논리 연산식
- 0 or 1
- etc
  • if~else구문을 사용한 선택문
if(조건식) 실행할 문장1;
else 실행할 문장2  //주의: else 뒤에는 조건식이 없다
  • if~else if~else구문을 사용한 선택문
if(조건식 1) 실행할 문장1;
else if(조건식 2) 실행할 문장2;
else 실행할 문장3;
  • else의 결합 문제(dangling else 문제)
    -> if문에 여러 개 중첩되어 있을 떄 else는 어떤 if문에 대응하는 가를 결정하는 문제

가장 간단한 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문을 사용할 선택문

  • 조건에 따라 선택할 문장이 많은 경우에 사용
  • 조건식은 정수식을 사용하며 case의 일치하는 문장을 실행
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을 실행한다.
}

※주의

  • 괄호 안이 정수값
  • case문도 정수값

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");
}
-> 출력결과
23번
당첨자가 없습니다.

예시문제5

  • 대학 등록금 계산 프로그램

예시문제6

  • 사칙연산 프로그램

예시문제7

  • 전기요금 계산 프로그램
profile
gy’s portfolio

0개의 댓글