2024. 3. 19. 13:32ㆍC
C 프로그래밍 입문 강의
https://mcode.co.kr/video/list2?viewMode=view&idx=98
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를 각각의 관계식이라 했을 때
&& | A && B 에서 A와 B가 모두 TRUE(1)일 때 TURE를 반환, 둘 중 하나만 FALSE여도 FLASE을 반환 |
|| | A || 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);
}
'C' 카테고리의 다른 글
C 프로그래밍 변수의 특성(정수, 실수, 문자열, 실습문제) (2) | 2024.03.15 |
---|---|
C 프로그래밍 기초(기초 문법, 변수, 표준 입출력, 산술 연산자, main 함수) (1) | 2024.03.14 |
C 프로그래밍 기초(C 언어, Dev-C++ 설치, Hello world 실습) (1) | 2024.03.14 |