[C 문법공부] if 조건문
if 조건문
예시
#include <stdio.h>
int main() {
int i;
printf("입력하고 싶은 숫자를 입력하세요:");
scanf("%d", &i);
if (i == 7) {
printf("당신은 행운의 숫자 7을 입력했습니다");
}
return 0;
}
터미널에서 7을 입력받았을때만 i변수에 7이 저장되고,
if 조건문의 괄호 안의 내용이 true가 되면서 중괄호 안의 내용이 실행된다.
입력하고 싶은 숫자를 입력하세요:7
당신은 행운의 숫자 7을 입력했습니다
------------------------------------------------
입력하고 싶은 숫자를 입력하세요:5
활용
#include <stdio.h>
int main() {
double i, j;
printf("나누고싶은 두 정수를 입력하세요 : ");
scanf("%lf %lf", &i, &j);
printf("%f를 %f로 나눈 결과는 : %f \n", i, j, i / j);
return 0;
}
double 자료형을 scanf함수로 %lf
포맷으로 입력받는다.
이때, 10과 3을 입력으로 받는다면,
나누고싶은 두 정수를 입력하세요 : 10 3
10.000000를 3.000000로 나눈 결과는 : 3.333333
이렇게 출력된다.
그런데 0이 나누는 수로 들어온다면,
나누고싶은 두 정수를 입력하세요 : 1
0
1.000000를 0.000000로 나눈 결과는 : inf
1을 0으로 나누면 inf라는 수를 출력하게된다.
Zero division Error를 파이썬에서 본적이 있을테넫, 이 경우가 이에 해당하는 오류이다.
변수 자료형이 int형이었다면 inf가 아닌 오류가 출력되었을 것이다.
입력 체크
그래서 사용자의 입력을 체크하기위해서 if문으로 체크를 할 필요가 있다.
#include <stdio.h>
int main() {
double i, j;
printf("나누고싶은 두 정수를 입력하세요 : ");
scanf("%lf %lf", &i, &j);
if (j == 0) {
printf("0으로 나눌 수 없습니다.");
return 0;
}
printf("%f를 %f로 나눈 결과는 : %f \n", i, j, i / j);
return 0;
}
나누고싶은 두 정수를 입력하세요 : 10 0
0으로 나눌 수 없습니다.%
가운데 있는 if 문제서 나누는 수가 0으로 변수에 할당되면 조건이 true가되면서 printf()함수를 실행하게되고,
return 0;으로 프로그램이 종료가된다.
점수확인하기
#include <stdio.h>
int main() {
int score;
printf("당신의 수학점수를 입력하세요 ");
scanf("%d", &score);
if (score >= 90) {
printf("당신은 합격입니다! \n");
}
if (score < 90) {
printf("당신은 불합격입니다! \n");
}
return 0;
}
당신의 수학점수를 입력하세요 89
당신은 불합격입니다!
--------------------
당신의 수학점수를 입력하세요 90
당신은 합격입니다!
이렇게 if문을 2개를 사용할수도 있다.
이런 관계 연산자들에는
, <, <=, >=, !=, == 등이 있다.
if~else
기본적인 사용법
#include <stdio.h>
int main() {
int num;
printf("아무 숫자나 입력하세요: ");
scanf("%d", &num);
if (num == 7) {
printf("당신은 7을 입력했습니다");
} else {
printf("그냥 보통 숫자인 %d를 입력했습니다.", num);
}
return 0;
}
else는 앞의 if문이 조건을 만족하지 않을 때를 나타낸다.
그래서
아무 숫자나 입력하세요: 10
그냥 보통 숫자인 10를 입력했습니다.%
------------------------
아무 숫자나 입력하세요: 7
당신은 7을 입력했습니다%
중첩
이런 if ~ else문을 중첩해서 사용할수도 있는데,
#include <stdio.h>
int main() {
int num;
printf("아무 숫자나 입력하세요 : ");
scanf("%d" , &num);
if (num == 7) {
printf("행운의 숫자 7입니다!\n");
} else {
if (num == 4) {
printf("죽음의 숫자 4입니다.");
} else {
printf("보통 숫자 %d입니다", num);
}
}
return 0;
}
7과 4를 체크하는 프로그램이다.
이런식으로 중첩사용하는 것은 가독성 면에서나 재사용성 면에서 좋지 않은데,
이를 else ~ if로 바꿀 수 있다.
else~if
#include <stdio.h>
int main() {
int num;
printf("아무 숫자나 입력하세요 : ");
scanf("%d" , &num);
if (num == 7) { //7일때
printf("행운의 숫자 7입니다!\n");
} else if (num == 4) { //4일때
printf("죽음의 숫자 4입니다.");
} else { //나머지
printf("보통 숫자 %d입니다", num);
}
return 0;
}
훨~씬 가독성이 좋아졌고, 로직을 파악하기에도 쉬운 것을 볼 수 있다.
논리연산자
논리곱 연산자 &&
논리 곱 연산자는 &&
로 사용한다.
&&
연산자는 조건식을 1 또는 0으로 판단한다.
#include <stdio.h>
int main() {
int a;
printf("아무 숫자나 입력하세요 : " );
scanf("%d", &a);
if (a >= 10 && a < 20) {
printf("%d는 10이상, 20미만인 수입니다.",a);
}
return 0;
}
비트연산자에서는 & 하나만을 사용하는데,
&
는 비트 사이의 AND연산을 사용할 때 사용한다.
조건식 사이의 관계를 표현하기 위해서는 &&
를 사용한다.
SCE
컴퓨터는 연산시 Short Circuit Evaluation을 한다.
조건 식에서 && 연산자를 만나면, 앞의 조건이 false(0)이라면 뒤의 조건식을 연산하지 않는다.
논리합 연산자 ||
이 역시 비트연산자 |
와 다르게 ||
를 사용한다.
#include <stdio.h>
int main() {
int height, weight;
printf("당신의 키와 몸무게를 입력하세요:");
scanf("%d %d",&height, &weight);
if (height >= 190 || weight >= 100) {
printf("당신은 거구입니다.");
}
return 0;
}
이 역시 조건 식의 좌우를 보고, 하나라도 참이면 if의 printf가 실행된다.
부정 !
#include <stdio.h>
int main() {
int height, weight;
printf("당신의 키와 몸무게를 입력하세요:");
scanf("%d %d",&height, &weight);
if (height >= 190 || weight >= 100) {
printf("당신은 거구입니다.");
}
if (!(height >= 190 || weight >= 100)) {
printf("당신은 거구가 아닙니다.");
}
return 0;
}
!
는 조건식 안이 0이라면 1로, 1이라면 0으로 바꿔주는 부정연산자이다.
!연산자는 0이 아닌 값은 0으로 변환해준다는 특성이 있어서 변수의 값이 0인지 아닌지 판별할 수 있다.
continue, break
break
반복문을 탈출할 때 사용하는 키워드.
break은 break문을 감싸는 가장 가까운 반복문 하나를 탈출한다.
예를 들어, 이중중첩된 반복문의 제일 안쪽에서 break을 걸면 가장 안쪽 반복문 하나만을 탈출한다는 의미이다.
#include <stdio.h>
int main()
{
int sum = 0, num = 0;
while (1)
{
sum += num;
if(sum > 5000)
break;
num ++;
}
printf("sum %d\n", sum);
printf("num %d\n", num);
return 0;
}
continue
continue를 실행하면 위치에 상관없이 실행중인 반복문의 조건검사 위치로 이동한다.
검사결과 반복조건이 여전히 참이라면, 반복문을 이어서 실행한다.
#include <stdio.h>
int main(void)
{
int num;
printf("start!\n");
for (num = 1;num < 20; num++)
{
if (num % 2 ==0 || num % 3 == 0)
{
continue;
}
printf("%d\n", num);
}
return 0;
}
switch
► 조건에 따른 분기를 할 때 또 사용되는데 switch
문이다.
► 단, if보다는 사용이 제한적이다.
#include <stdio.h>
int main(void)
{
int num;
printf("1이상 5이하의 정수를 입력하시오:");
scanf("%d", &num);
switch(num)
{
case 1:
printf("1은 one\n");
break;
case 2:
printf("2는 two\n");
break;
case 3:
printf("3은 three\n");
break;
case 4:
printf("4은 four\n");
break;
case 5:
printf("5은 five\n");
break;
default:
printf("이게뭐람?\n");
}
return 0;
}
► switch문의 괄호 안에는 전달되는 인자가 들어온다. 정수형 변수
여야한다.
► 이 인자에따라 case 뒤의 인자로 판단한다.
► break은 케이스들을 구분
해주는 역할을 한다.
break
switch문제서 break은 상황에따라 써야할수도, 쓰지 않아야할수도 있다.
#include <stdio.h>
int main(void)
{
int num;
printf("숫자를 입력하세요");
scanf("%d", &num);
switch(num)
{
case 1:
printf("A1");
printf("A2");
case 2:
printf("B1");
printf("B2");
default:
printf("기본값");
}
return 0;
}
이렇게 case별로 break이 걸리지 않은 swtich문에서,
num으로 2가 1이 입력되면 아래의 모든 printf 문이 실행된다.
댓글남기기