C#_02: 연산자, 조건문

SeonggyuMin·2025년 3월 12일

CSharp

목록 보기
2/12

1. 연산자

1) 산술 연산자(이진 연산자)

Console.WriteLine(); 의 소괄호 안에 연산이 있으면 계산 후 표기한다.

Console.WriteLine(5 + 2); //    더하기(7)
Console.WriteLine(5 - 2); //    빼기(3)
Console.WriteLine(5 * 2); //    곱하기(10)
Console.WriteLine(5 / 2); //    나누기(2)
Console.WriteLine(5 % 2); //    나머지를 출력(1)

나누기(/)의 주의 사항: 정수와 정수를 소수점 없이 몫만 출력한다.

Console.WriteLine(5.0 % 2.0); // double
Console.WriteLine(5f % 2f); // float
Console.WriteLine(5/2f);
Console.WriteLine(5f/2);

위의 형태처럼 하나라도 실수형이 포함되면 소수점 이하도 출력한다.

자리 수 구하기:

  • 1의 자리 숫자
    Console.WriteLine(984564 % 10);
  • 10의 자리 숫자
    Console.WriteLine(984564 / 10 % 10);
  • 100의 자리 숫자
    Console.WriteLine(984564 / 100 % 10);

2) 대입 연산자

이진 연산자(op)의 경우
x op= y 는 x = x op y 와 동일

x += y는 x = x + y //    덧셈 후 대입
x -= y는 x = x - y //    뺄셈 후 대입
x *= y는 x = x * y //    곱셈 후 대입
x /= y는 x = x / y //    나눗셈 후 대입
x %= y는 x = x % y //    나머지 후 대입

3) 단항 연산자

++    // 증가연산자: 값을 1 증가
--    // 감소연산자: 값을 1 감소
예시
level = level + 1
++level;    //전위증가연산자: 값을 1 증가
level++;    //후위증가연산자: 값을 1 증가

모두 같은 내용이며 -가 들어가도 된다.

level = +level;    // 단항연산자(양수): 그대로 두기
level = -level;    // 단항연산자(음수): 값을 반전하여 바꾸기

값을 반전하는 연산자도 있다.

문자열 보간, $

Console.WriteLine("나이를 입력해주세요: ");
string age = Console.ReadLine();
Console.WriteLine("입력하신 나이: {0}", age);
Console.WriteLine("다음 해의 나이: {0}", age + 1);

자리표시자와 보간을 통해 여러가지 방법으로 표현할 수 있다.

Console.WriteLine("정수 더하기 {0}", 20 + 1); // 21
Console.WriteLine("문자열 더하기 {0}", "20" + 1); // 201
Console.WriteLine("문자열의 더하기는 문자 연결하기 {0}", "김전사" + 1 + "세"); // 김전사 1세

문자열 더하기는 비효율적, 실수할 가능성 등의 이유로 잘 안쓴다. 자리표시자 혹은 보간을 많이 쓴다. 그러나 자리표시자는 같은 내용을 중복해서 쓸 때 편리할 수 있다.

int age = 1 ;
Console.WriteLine("다음년도의 나이: {0}", age + 1); // 2
Console.WriteLine($"다음년도의 나이: {age + 1}"); // 2
Console.WriteLine($"다음년도의 나이: " + age + 1); // 11 (문자열 결합 연산자)

맨 아래의 결과 값이 다른 이유는 문자열 결합 연산자(+)가 먼저 다음년도의 나이age를 합쳐 다음년도의 나이: 1을 만든 후에 1을 합치기 때문에 결과가 다르다.

전위 연산자와 후위 연산자의 차이
int iValue = 0;
Console.WriteLine(iValue);    // 0
Console.WriteLine(++iValue);    // 1
Console.WriteLine(iValue);    // 1

iValue = 0;
Console.WriteLine(iValue);    // 0
Console.WriteLine(iValue++);    // 0
Console.WriteLine(iValue);    // 1

전위연산자는 값을 반환하기 전에 연산하고 후위연산자는 값을 반환한 후에 연산한다.

4) Parse, TryParse

Console.WriteLine("나이 입력: ");
int age = Console.ReadLine();

string age = Console.ReadLine();
  • 위 내용은 키보드로 쓰는 내용이기에 문자이지 숫자가 아니다. 따라서 int로 받지 못한다.
string age;
age = Console.ReadLine();
int intAge;

intAge = int.Parse(age);
intAge = intAge + 1;
Console.WriteLine(intAge);
  • int.Parse, float.Parse, bool.Parse,short.Parse 등 자료형.Parse 하면 숫자로 변환
  • Parse 는 문제 없는 값이 들어온다는 보장이 있을 때 쓰면 좋다. 변환에 실패하면 에러가 난다.
int.TryParse("변환하려는 문자열", out b); // b는 변환된 값을 저장할 출력 변수
  • TryParse는 변환에 성공하면 true 실패하면 false를 출력
  • 잘못 입력해서 0 인지, 실제 입력 값이 0인지 구분이 안된다.
Console.WriteLine("잔고를 입력해주세요: ");
string input = Console.ReadLine();
int gold;
bool success = int.TryParse(input, out gold);
Console.WriteLine("입력의 유효 여부: {0}", success);
Console.WriteLine("입력하신 잔고: {0}", gold);
Console.WriteLine("만원 입금 후 잔고 : {0}", gold + 10000);
  • bool 을 사용하여 입력의 유효 여부가 판단 가능하다

5) 나눗셈 연산자와 유의할 점

float dividedNum;
dividedNum = 2 / 5;
Console.WriteLine(dividedNum); // 0
float dividedNum;
dividedNum = 2.0f / 5.0;
Console.WriteLine(dividedNum); // 0.4
  • 소수점을 포함하기 위해서는 적어도 한 개 이상의 숫자에 실수형을 사용해야 한다.
int award = 9;
int partyMember = 4;
float dividedMoney = (float)award / partyMember;
Console.WriteLine(dividedMoney);
  • 변수를 형변환할 때는 변수 앞에 괄호 열고 자료형 사용하면 임시로 변환 가능하다.
float distance = 9.8f;
int partyMember = 4;
Console.WriteLine((int)distance / partyMember);
  • 반대로 소수점을 버리고 싶으면 int로 형변환 할 수 있다.
 float distance = 9.8f;
 int partyMember = 4;
 Console.WriteLine((int) distance / partyMember); // 2
float distance = 9.8f;
int partyMember = 4;
Console.WriteLine((int)(distance / partyMember)); // 2
  • 형변환 되는 시점이 다르다.
  • 첫 번째 코드: 9 / 4 = 2
  • 두 번째 코드: 2.45f -> int 형변환 -> 2
소수점 계산의 오차에 주의
Console.WriteLine(1.1f + 0.3f); // 1.4000001
  • float는 소수점 7 자리 까지 보관할 수 있다.
  • 10진수의 소수점은 2진수로는 정확히 표현할 수 없어 근사값으로 저장하여 약간의 오차가 발생할 수 있다.
  • int * or / float = float

2. 조건문

1) if 문

if(여기 내용이 참일 경우)
{
	여기 중괄호 내용을 실행한다
}

조건문 if 는 위와 같은 형식으로 사용한다.

예시
int hp = 100;
int damage;
string input = Console.ReadLine();
damage = int.Parse(input);

bool alive = hp > damage;
if (alive)
{
    Console.WriteLine("살아남았다!");
}

Console.WriteLine("끝");
int exp = 150;
int level = 1;

if (exp >= 100)
{
    level++;
    Console.WriteLine("레벨 업!");
    exp -= 100;
}

Console.WriteLine("레벨: {0}", level);
Console.WriteLine("경험치: {0}", exp);
Console.WriteLine("끝");
  • 위와 같이 if문 괄호에 직접 비교할 수도 있다.

2) else if, else

  • else if는 조건문을 여러 개 사용할 때, 첫 번째 조건문이 거짓일 경우 다음 조건을 차례대로 확인하고 실행한다.
  • else는 앞선 if, else if 조건들이 모두 거짓일 때 실행된다.
//컴퓨터: 가위
Console.Write("가위 바위 보!: "); 
string playerChoice = Console.ReadLine();
if (playerChoice == "바위")
{
    Console.ForegroundColor = ConsoleColor.Green;
    Console.WriteLine("이겼습니다!");
    Console.ResetColor();
}
else if (playerChoice == "가위")
{
    Console.ForegroundColor = ConsoleColor.Yellow;
    Console.WriteLine("비겼습니다!");
    Console.ResetColor();
}
else if (playerChoice == "보")
{
    Console.ForegroundColor = ConsoleColor.Red;
    Console.WriteLine("졌습니다!");
    Console.ResetColor();
}
else
{
    Console.WriteLine("잘못 입력했습니다.");
}
int score = 82;

if (score >= 0)
{
    Console.WriteLine("브론즈입니다");
}
else if (score >= 80)
{
    Console.WriteLine("실버입니다");
}
else if (score >= 90)
{
    Console.WriteLine("골드입니다");
}
  • 점수는 실제로 더 높아 실버입니다가 출력되어야 하나 순서가 달라 브론즈입니다가 출력된다. 순서에 유의하자.

3) 논리 연산자

  • 비교 연산자
연산자설명예시
==두 값이 같음5 == 5 → true
!=두 값이 다름5 != 3 → true
>왼쪽 값이 큼5 > 3 → true
<왼쪽 값이 작음3 < 5 → true
>=왼쪽 값이 크거나 같음5 >= 5 → true
<=왼쪽 값이 작거나 같음3 <= 5 → true
  • 부울 논리 연산자
연산자설명예시
&&AND: 두 조건이 모두 참일 때만 참true && false → false
||OR: 두 조건 중 하나라도 참이면 참true || false → true
!NOT: 조건이 참이면 거짓으로, 거짓이면 참으로 변환!true → false
^XOR: 두 조건이 서로 다를 때만 참true ^ false → true

4) switch 문

int value = 1;
switch (value)
{
    case 1:
        Console.WriteLine("1입니다");
        break;

    case 2:
        Console.WriteLine("2입니다");
        break;

    case 3:
        Console.WriteLine("3입니다");
        break;

    default:
        Console.WriteLine("1,2,3 어느 것도 아닙니다");
        break;
}
  • default 는 if 문의 else 와 비슷한 역할을 한다
char key = 'a';
switch (key)
{
    case 'w':
        Console.WriteLine("위쪽으로 이동");
        break;
    case 'a':
        Console.WriteLine("왼쪽으로 이동");
        break;
    case 's':
        Console.WriteLine("아래쪽으로 이동");
        break;
    case 'd':
        Console.WriteLine("오른쪽으로 이동");
        break;
}    
  • switch 문을 썼을 때 if 문 보다 좋은 상황
  • 위 상황에서 w 대신 대문자 W, 한글 ㅈ 등의 상황에서 간단하게 case 'W', case 'ㅈ' 등 만 추가하면 된다.
  • 추가 삭제가 용이하다
  • 효율적인 측면에서도 if 문은 많은 내용이 있을 때 체크해봐야 할 내용이 많지만, switch문은 비교적 빠른 시간 내에 체크할 수 있다.

3. 기타

오늘 배운 매서드

out
Console.ForegroundColor = ConsoleColor.Red: 출력되는 글자 색 변환
Console.ResetColor(): 출력되는 글자 색 초기화

ReadLine: 입력 (WriteLine 과 반대)
  • ReadLine
string input;
input = Console.ReadLine(); // 내용 입력
Console.WriteLine(input); // 입력한 내용 출력

콘솔에서 출력은 WriteLine 이었다면 입력은 ReadLine(엔터 칠 때까지의 내용을 입력받음)이다.

오늘 배운 단축키

  • ctrl + k + c : 선택 부분 주석
  • ctrl + k + u : 선택 부분 주석 해제

메모해둔 것

  • 에러에 대해 검색해보는 습관 들이기
  • 진행 도중 에러가 나면 상단 중앙에 멈춤 버튼 눌러 멈출 수 있음
  • ctrl + F5 로 한다면 멈추지 않고 콘솔 창에 에러 뜸
  • 코드를 짜기 전 주석이나 메모에 어떤 식으로 짤 것인지 적는 습관 들이기(슈도코드, 의사코드)
  • 프로그램의 규모가 커질 때 한 눈에 보기 어려울 수도 있음. 그럴 때 일정 부분의 시작하는 부분에#region, 끝나는 부분에 #endregion 써서 접어둘 수 있음
  • 여러 #region을 쓰면 헷갈릴 수 있음, 그러면 #region 변수 이런 식으로 쓰면 변수만 표시됨.

0개의 댓글