비교 연산자, 조건문, 논리연산자, 비트 쉬프트, 반복문

Yama·2023년 11월 30일
0

어소트락 수업

목록 보기
3/55

비교 연산자

  1. '=='(같은지 비교)
  2. '!='(같은지 않은지를 비교)
  3. '>'(왼쪽이 더 큰지 비교)
  4. '<'(오른쪽이 더 큰지 비교)
  5. '>='(왼쪽이 크거나 같냐 비교)
  6. '<='(오른쪽이 크거냐 같냐 비교)

비교 연산자 예시

  • 4 == 4
    • 참이들어오면 1이 들어오고 거짓이 들어오면 0이 들어감.
  • int i = 4 == 5
    • 거짓이라 i에 0이 대입된다.
  • int i = 4 == 4면
    • 참이여서 i에 1이 대입된다.
  • i = 4 != 4
    • 거짓이라 0이 들어감
  • i = 4 != 5
    • 다른값이 이기떄문에 참이라 1이 들어감.
  • i = 10 > 1;
    • 10이 1보다 커서 참
  • i = 10 < 1;
    • 10이 1보다 커서 거짓
  • i = 10 >= 10;
    • 10이 10보다 같아서 참
  • i = 10 <= 5;
    • 10이 5보다 작거나 같지않아서 거짓.

같은 의미

  • 변수 = 변수 - 10
  • 변수 -= 10
  • 모든 연산자에 적용가능?

조건문

  1. if 구문 + if else 구문 + else 구문

if 구문

	if (1) /
	{
		printf("출력\n");
	}
    if (or 거짓)
	{		
		괄호안이 참이면 실행, 거짓이면 건너띔.
	}

if구문 예시

	int HP = 100;
    int HP -= 10;

	if (HP <= 0)
	{
		// 콘솔창에 출력하는 함수.
		printf("캐릭터 사망\n");
	}
	// 이 조건문들은 저 괄호안에 있는걸 수행할지 말지를 분기처리한다.
	// 1 ~ 30
	else if (HP <= 30) // else if는 위에 if나 else if가 성공한다면 그냥 확인도 안하고 건너띈다.
	{

	}
	// 31 ~ 60
	else if (HP <= 60)
	{

	}
	// else if는 처음에 나올수 없고 if다음에 나와야함.

	// 61 ~ 
	else // 위에거 다 실패하면 조건에 상관없이 else 안에 구문 실행. // else는 굳이 안넣어도 상관 x
	{

	}

if구문과 else if 구문 사용시 고려사항

	// 1
	if (-> z키가 눌렸으면) 
	{
		오른쪽으로 이동하기
	}
	else if (space 키가 눌렸으면)
	{
		점프하기 // 오른쪽 키를 눌르면서 점프가 안된다 이런식으로 코드를 짜면.
	}

	// 2 
	if (-> z키가 눌렸으면) 
	{
		오른쪽으로 이동하기
	}
	if (space 키가 눌렸으면)
	{
		점프하기 // 오른쪽 키를 눌르면서 스페이스키 눌르면 오른쪽 가면서 점프가됨.
	}
  • 내가 오른쪽으로 이동하면서 점프를 하고싶은 사항을 만들고싶다면 1번같이 코드를 짜면 오른쪽으로 달리면서 else if 구문은 스킵이 되기떄문에 스페이스를 키를 입력해도 오른쪽으로만 달릴것이다.(오른쪽키를 그만 눌르고 눌르지않는이상)
  • 그래서 오른쪽으로 이동하면서 점프를 같이할려면 위에 2번같이 코드를 if 와 if를 연결해서 써야한다.

요약

  • 여러가지 조건중에 하나만 실행되어야 한다면
    • if -> else if
  • 여러가지 조건중에 실행되면서 다른조건이 동시에 실행되어야 한다면
    • if -> if
  • if와 else if가 연결되어있는 경우, 하나의 조건만 성공할수 있다.
  • else는 if나 else if 어떤 조건에도 해당하지 않을 떄를 잡아내고 싶을떄 사용한다.

switch case 구문

	HP = 100;
	switch (HP) 
	{
	case 100:
		printf("체력이 100이다\n");
		break; // 탈출구문. 책갈피 느낌.
	case 60:
		printf("체력이 60이다\n");
		break;
	default :
		printf("체력이 100도 아니고 60도 아니다.\n");
		break;
	}
  • switch (변수)
    • 변수랑 맞는 케이스가 있다면 그 쪽 case에 보내고 없다면 default에 보낸다.
  • printf("출력문")
  • 출력함수
  • break;
    • 탈출구문(책갈피느낌)

switch case에 break 없는경우(fall through)

	int HP = 100;
	switch (HP)
	{
	case 100:
		printf("체력이 100이다\n");
	case 60:
		printf("체력이 60이다\n");
		break;
	default:
		printf("체력이 100도 아니고 60도 아니다.\n");
		break;
	}
  • 이런경우 HP에 100이 들어오면 바로 탈출하는게 아니라 case 60에 해당하는 구문도 같이 출력
    • 문법오류가 아니라 실수가 나올 수 있다.
    • 의도한것이 아니면 break; 잘 넣기.
  • case나 default하나당 break가 한개씩 깔맞춤이 문법오류가 아닌 이유?
    • 프로그래머가 의도적으로 case를 묶어서 사용할수 있는걸 고려해서 만들었기 떄문이다.

switch case 요약

  • 각 case 의 마지막에 break 를 이용해서 switch 구문을 종료한다.
  • 여러 case 의 조건을 묶고 싶은 경우 case 를 모아서 한번에 break 처리를 한다.
  • 각 case 를 break 로 별개 처리하려고 했지만, 실수로 break 를 작성하지 않아서
  • 의도치 않게 하나의 case 에 대해서 여러 case 의 작업 처리가 될 수 있으므로
  • break 작성에 유의해야한다.

논리 연산자

  1. &&(And)
  2. ||(or)

&&(And)

	if (100 < 200 && 400 > 300) // 참
	{

	}
    
    if (100 < 200 && 400 < 300) // 거짓
    {

	}
  • 둘다 참인 경우에만 참(교집합)

||(or)

	if (100 < 200 && 400 > 300) // 참
	{

	}
    
    if (100 < 200 && 400 < 300) // 참
    {

	}
    
   	if (100 > 200 && 400 < 300) // 거짓
    {

	}
  • 둘중에 하나만 참이라도 참을 반환
  • 모두 거짓이야 거짓.

비트 쉬프트 연산자

  • 종류 :

    1. '>>'
    2. '<<'
  • 비트 단위로 자리수를 이동

  • 실수 타입에서는 사용 불가.

  • 비트 값을 변경 시키는 연산자.

  • '<<' 2의 승수 배수만큼 증가

  • '>>' 2의 승수로 나눈 몫

    • 1 / 2 = 0, 17 / 4 = 4

비트 쉬프트 예시

		int i = 1 << 1; // 1을 왼쪽으로 1칸 밀어라. 2
		i <<= 1; // i = i << 1; 4  
		i <<= 1; // 8
		int o = 47 << 1; // 94 // << 2 47 * 4 = 188

반복문

  • 문장을 10번 출력하고싶을떄 반복문이 없다면.
    • 노다가해야함.
	printf("문장 출력\n");
	printf("문장 출력\n");
	printf("문장 출력\n");
	printf("문장 출력\n");
	printf("문장 출력\n");
	printf("문장 출력\n");
	printf("문장 출력\n");
	printf("문장 출력\n");
	printf("문장 출력\n");
	printf("문장 출력\n");
  • 종류
      1. for문
      1. while문
      1. do while문(거의 안씀)

for문

  • for (변수 초기화(한번만 실행); 반복 조건 테스트(참 or 거짓); 반복 수행마다 실행;
	for (int i = 0; i < 5; ++i)
	{
		printf("for문 출력\n");
	}
  • 위 코드 실행 순서
    1. int 변수 i를 0으로 초기화
    2. 0 < 5로 반복조건 체크 (참)
    1. for문 출력 한번 출력됨.
    2. 반복 수행마다 실행되는 구문 실행
    3. i가 0에서 1로 증가
    4. 2~5번 반복조건 참일떄까지 실행(4 < 5)
    5. 5 < 5가 되서 반복 조건이 거짓이 되는 순간
    6. for문 탈출.

while문

변수 초기화
while (조건)
{
	출력문
    반복 수행마다 실행.
}

int j = 0;
while (/*1*/j < 5)
{
	printf("while문 출력\n");
	++j;
}
	return 0;
}
  • 주의사항 : 괄호안이 참이면 게속 실행한다.

continue와 break;

  • continue
    • 반복 구문을 다 수행하지않고 이어서 계속 실행
  • break
    • 반복문 강제 중단
  • for문과 while에서 둘다 사용가능

continue와 break 예시.

	// 1 
	for (int i = 0; i < 5; ++i)
	{
		if (i == 2)
		{
			continue; // 반복 구문을 다 수행하지 않고 이어서 계속 실행
		}
		printf("for문 출력\n");
	}
    
    //2
    for (int i = 0; i < 5; ++i)
	{
		if (i == 2)
		{
			break; // i가 2일떄 그 for문 탈출 // 반복문 강제 중단
		}
		printf("for문 출력\n");
	}
    
  • 1번에 경우 i가 2일떄를 스킵해서 5번 for문 출력이 출력되는게 아니라 4번만 출력됨.
  • 2번에 경우 i가 2일떄 for문을 강제 탈출한다. 그래서 2번만 출력이 된다.'

강의 코드


#include <stdio.h>

int main(void)
{
	{
		bool b = 45;

		int i = 4 == 10;
		i = 4 != 10;
		i = 1 >= 1;
	}

	{
		if (100 < 200 && 400 < 300)
		{

		}

		int a = 200 || 0;

		if (200 || 0)
		{

		}
	}


	int HP = 10;
	HP -= 10;


	if (HP <= 0)
	{
		printf("캐릭터 사망\n");
	}

	else if (HP <= 30)
	{

	}

	else if (HP <= 60)
	{

	}

	else
	{

	}

	HP = 100;
	switch (HP)
	{
	case 100:
	case 60:
	case 62:
		printf("체력이 60 이다\n");
		break;
	default:
		printf("체력이 100도 아니고 60도 아니다.\n");
		break;
	}

	for (int i = 0; i < 5; ++i)
	{
		if (i == 2)
		{
			continue; 
			break;	
		}
		printf("for 문 출력\n");
	}

	int j = 0;
	while (j < 5)
	{
		// continue;
		// break;

		printf("while 문 출력\n");
		++j;
	}

	{
		int i = 3 << 5;
	}

	return 0;
}

1차 23.11.30
2차 23.12.01
3차 23.12.05
4차 23.12.11
5차 23.12.17
6차 23.12.24
7차 24.01.01
8차 24.01.22

0개의 댓글