C 프로그래밍 조건문(if, if-else, switch, 삼항연산자, 실습문제)

2024. 3. 19. 13:32C

728x90
반응형

 

728x90

 

 

 

 

 

 

 

C 프로그래밍 입문 강의

https://mcode.co.kr/video/list2?viewMode=view&idx=98

 

메타코드M

빅데이터 , AI 강의 플랫폼 & IT 현직자 모임 플랫폼ㅣ메타코드 커뮤니티 일원이 되시기 바랍니다.

mcode.co.kr

 

 

 

Chapter. 4 :조건문

 

조건문

조건식을 판단하여 참, 거짓일때 각각 다른 실행문을 수행

각 조건에 따라 다른 동작을 수행하게 함으로써 본격적인 제어 구조를 갖춘다고 볼 수 있음

 

시작      
     
조건식 → true → 실행문 1
→ false → 실행문 2
      종료

 

 

 

 

조건연산자 및 조건식

 

관계연산자

관계식이 맞으면 TRUE (1)을 반환

주로 조건문에서 조건을 판단할 때 사용

A > B 에서 A가 크면 1을 반환, 그렇지 않으면 0을 반환 
>= A >= B 에서  A가 크거나 같으면 1을 반환, 그렇지 않으면 0을 반환 
A < B 에서 A가 작으면 1을 반환, 그렇지 않으면 0을 반환
<= A <= B 에서 A가 작거나 같으면 1을 반환, 그렇지 않으면 0을 반환
== A == B 에서 A와 B가 같으면 1을 반환, 그렇지 않으면 0을 반환
!= A  != B 에서 A와 B가 다르면 1을 반환, 그렇지 않으면 0을 반환

 

 

논리연산자

주로 조건문에서 여러개의 관계식을 고려할 때 사용

A와 B를 각각의 관계식이라 했을 때

&& &&  B 에서 A와 B가 모두 TRUE(1)일 때 TURE를 반환, 둘 중 하나만 FALSE여도 FLASE을 반환
|| ||  B 에서 A와 B 중 하나만 TRUE여도 TURE를 반환, 둘 다 FALSE 일 때 FLASE을 반환
! !A 에서 A가 모두 FALSE이면 TURE를 반환, A가 TRUE이면 FLASE을 반환

 

 

 

 

if - else 구문

조건식을 다양하게 기술

 

if 하나만 있을때 

조건식_1 이 참이면 실행문_1 을 수행하고 거짓이면 수행하지 않는다.

조건식의 연산이 1을 반환해도 참이라 가정한다.

if(1) {  //무조건 실행
실행문_1;
}


if(0) {  //무조건 skip
실행문_2;
}

 

 

if-else 구문

if(조건식_1) {  //조건식1이 참이면 실행문1을 수행
실행문_1;
}
else {  //조건식1이 거짓이면 실행문2을 수행
실행문_2;
}

 

 

if-else if-else 구문

if(조건식_1) {  //조건식1이 참이면 실행문1을 수행
실행문_1;
}
else if(조건식_2) {  //조건식1이 거짓이고 2가 참이면 실행문2을 수행
실행문_2;
}
else if(조건식_3) {  //조건식1, 2가 거짓이고 3가 참이면 실행문3을 수행
실행문_3;
}
else{  //조건식1, 2, 3이 거짓이면 실행문4을 수행
실행문_4;
}

 

 

if-else if 구문

if(조건식_1) {  //조건식1이 참이면 실행문1을 수행
실행문_1;
}
else if(조건식_2) {  //조건식1이 거짓이고 2가 참이면 실행문2을 수행
실행문_2;
}
else if(조건식_3) {  //조건식1, 2가 거짓이고 3가 참이면 실행문3을 수행
실행문_3;
}

 

 

if-else 조건문 규칙

하나의 조건문은 반드시 if로 시작해야 함

하나의 조건문에서 else가 있으려면 맨 마지막에 있어야 함

 

 

이중 조건문

if-else if-else의 실행문 내에 또 다른 조건문이 있는 경우

바깥의 조건식을 만족했을때 해당 조건문을 같은 규칙으로 실행

if(조건식_1) {
	실행문_1;  //조건식 1을 만족하면 실행문_1을 수행
	if(조건식_1_1) {  //조건식 1, 1_1을 다 만족하면 실행문_1_1을 수행
    	실행문_1_1;
    } else {  //조건식 1을 만족하면고 조건식1_1이 거짓이면 실행문_1_2을 수행
    	실행문_1_2;
	}
}

 

 

다중 조건문

이중조건문과 같은 원리로 하나의 조건문이 지속해서 다른 조건문을 포함하는 경우

if(조건식_1) {
	실행문_1;  //조건식 1을 만족하면 실행문_1을 수행
	if(조건식_1_1) {  //조건식 1, 1_1을 다 만족하면 실행문_1_1을 수행
    	실행문_1_1;
        if(조건식_1_1_1) {  //조건식 1, 1_1, 1_1_1을 다 만족하면 실행문_1_1_1을 수행
    		실행문_1_1_1;
        }
    }
} else { 
    	실행문_1_2;
}

 

 

다중 조건문과 논리연산자 비교

안에 있는 조건식은 바깥에 있는 조건식을 만족해야 실행하므로 동일한 식을 &&연산자를 통해 표현할 수 있음

if(조건식_1) {
	실행문_1;  
	if(조건식_1_1) {  
        if(조건식_1_1_1) {  
    		실행문_1_1_1;
        } else { 
    	실행문_1_2;
        }
    }
}

 

if(조건식_1 && 조건식_1_1 && 조건식_1_1_1) {
	실행문_1; 
    실행문_1_1; 
}
else if(조건식_1 && 조건식_1_1) {  
    실행문_1;
    실행문_1_1_2;
} 
else if(조건식_1){ 
    실행문_1;
}

 

 

 

switch - case 구문

조건을 특정 변수에 한정하여 실행시간을 단축시킬수 있음

 

비교식보다는 특정 변수(숫자, 문자 가능)가 가질 수 있는 값을 case로 기술하고 각 case에 해당되는 경우 실행문을 수행

대소비교는 불가하고 등가비교만 가능

 

switch(변수) {
	case값 1:
    	실행문_1;
        break;
    case 값 2:
    	실행문_2;
        break;
    default:
    	실행문;
}

 

if(변수 == 값1) {
	실행문_1;
}
else if(변수 == 값2) {
	실행문_2;
}
else {
	실행문_3;
}

 

 

break

break가 없으면 해당 case를 수행한 후 아래 case로 넘어가면서 break가 나타날때까지 계속 수행

break를 통해 각 case별 실행문을 구분지을 수 있음

맨 마지막 case는 아래에 더이상 case가 없으므로 break를 하지 않아도 관계 없지만 문법적으로 break 넣어주는 것을 추천

여러 개의 case에서 실행할 구문이 겹필땐 이를 역이용 할 수 있음

 

default

case 어느 곳에도 해당되지 않는 경우 기본으로 수행하는 조건

switch 문에서 모든 case를 다 기술한 후 마지막에 씀

default 역시 아래 조건이 없기 때문에 break 유무에 관계 없음

 

 

조건문 비교

if-else switch
조건식의 범위가 넓다
- 관계연산자, 논리 연산자 사용
- if-else if 각각 독립적인 조건식 사용

속도가 느림
- if 에서부터 조건을 차례대로 비교

switch 문을 전부 치환하는 것이 가능
조건식의 범위가 좁다
- 특정 변수(조건)에 대한 등가비교만 가능
- 한 변수에 대해서만 경우를 나눔

속도가 빠름
- 특정 변수의 case로 바로 가서 수행

if-else 문의 특정 경우 (한 변수에 대한 등가비교)만 치환가능

 

 

 

삼항연산자

조건에 따라 다른 연산을 수행해 assign 함

A ? B : C;  //A가 참이면 B를 반환하고 거짓이면 C를 반환

 

 

조건문과 삼항연산자 비교

모든 조건문은 삼항연산자로 표현될 수 없음

삼항연산자는 우변의 연산을 좌변에 할당(assign)하는 것이므로, 삼항연산자 1줄로 표현하기 위해선 각 실행문마다 할당하는 변수가 동일해야 함

= 을 사용하는 변수 할당이 아니라 printf와 같은 함수 호출의 경우 표현할 수 없음

 

조건문

if(조건식_1) {
	out = a;
} else if(조건식_2) {
	out = b;
} else {
	out = c;
}

 

삼항연산자

out = 조건식_1 ? a : 조건식_2 ? b : c;

 


 

연습문제

 

if-else 사용

1. 삼각형 세변의 길이를 입력받아 삼각형의 종류를 알려주는 프로그램을 만드시오.

- 삼각형 성립여부, 정삼각형, 이등변삼각형, 예각/둔각/직각삼각형

 

#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main() {
	int a, b, c;
	int temp, no_triangle;
	
	printf("Input the length of 3 sides : ");
	scanf("%d %d %d", &a, &b, &c);
	
	if (a < b) {
		temp = a;
		a = b;
		b = temp;
	}
	
		if (a < c) {
		temp = a;
		a = c;
		c = temp;
	}
	
	if (a >= b) {
		printf("No tri-angle\n");
		no_triangle = 1;
	} else if(a==b && b==c) {
		printf("3 Sides are equal\n");
	} else if(a==b || b==c || c==a) {
		printf("2 Sides are equal\n");
	}
	
	
	if (no_triangle == 1) {
	} else if(a*a < b*b + c*c) {
		printf("Acute tri-angle\n");
	} else if (a*a == b*b + c*c) {
		printf("Right tri-angle\n");
	} else if (a*a > b*b + c*c) {
		printf("Obtuse tri-angle\n");
	}


}

 

 

 

 

 

 


 

 

 

2. 소득을 입력받아 근로소득게를 계산하는 프로그램을 만드시오.

- 정수를 사용하기 위해 소득은 100만원 단위로 입력

 

#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main() {
	int income, tax, income_100;
	
	printf("Input your income : ");
	scanf("%d", &income);
	
	income_100 = income / 100;
	
	if(income < 1400) tax = income_100 * 6;
	else if(income < 5000) tax = 126 + (income_100 - 14) * 15;
	else if(income < 8800) tax = 576 + (income_100 - 50) * 24;
	else if(income < 15000) tax = 1544 + (income_100 - 88) * 35;

	printf("Your tax is %d\n", tax);
}

 

 

 

 

 


 

 

switch 사용

1. 각 월의 날짜 수를 안내해주는 프로그램을 만드시오.

- 2월 입력시 28일 출력, 3월 입력시 31일 출력

 

#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main() {
	int month, day;
	
	printf("Which month?");
	scanf("%d", &month);
	
	switch (month) {
		case 1 : case 3 : case 5 : case 7 : case 8 : case 10 : case 12 :
			day = 31;
			break;
		case 4 : case 6 : case 9 : case 11 :
			day = 30;
			break;
		case 2 :
			day = 28;
			break;
		default :
			printf("Error\n");
			break;
	}
	printf("the Day of month %d is %d\n", month, day);
}

 

 

 

 

 

 


 

 

 

2. 숫자, 산술기호, 숫자를 차례로 입력받아 계산하는 계산기를 만드시오.

- 숫자는 실수, 산술기로는 "+, -, *, / "를 사용

#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main() {
	int a, b, out;
	char op;
	
	printf("Type your arithmatic expression : ");
	scanf("%d %c %d", &a, &op, &b);
	
	switch(op) {
		case '+' : out = a+b; break;
		case '-' : out = a-b; break;
		case '*' : out = a*b; break;
		case '/' : out = a/b; break;
		default : printf("Error\n"); break;
	}
	printf("the result is %d\n", out);
}

 

 

 

 

 

 

 

반응형

 

728x90
반응형