상세 컨텐츠

본문 제목

0904 TIL - C# 기초문법 3

본문

아 작성하다가 컴파일이랑 새로고침 키가 같아서 다 날아가서 너무 작성하기 싫은데

힘내서 다시 작성해보자

 

아.... 어디서부터 써야되지... 흑흑...

 

첫 번째 목표 : 두 수를 입력받아 두 수가 다 숫자인지 그 외인지 비교하기

 

아... 진짜 열심히 썼는데 내용이 다 날아가버렸다... 여러분은 임시저장을 항상 애용하십시요...

 

거두절미하고 비교연산자와 논리연산자가 이번에 핵심이다

 

비교연산자란? 두 수를 비교하여 참과 거짓값을 반환해준다.

종류로는 >, <, =, >= 등의 연산자가 있으며

1 > 3 의 경우에는 거짓

3 > 1 의 경우에는 참을 반환해준다.

 

논리연산자란? 두 값을 비교하여 참과 거짓을 반환해준다.

종류로는 ==, !=, ^, &, |, !가 있다.

 

어라 작대기는 키보드에 없는데 어디서 가져오신건가요??

엔터 위에 역슬래시(₩)를 쉬프트 누르고 누르면 나온다.

 

==(equal)의 경우에는 두 논리 값이 같다면 참 (false == false) 다르다면 거짓을 반환 (true == false)

!=(not equal)의 경우에는 두 논리 값이 다르다면 참 (true != false) 같다면 거짓을 반환 (true != false)

^(xor)의 경우에는 두 논리 값이 다르다면 참 (true ^ false) 같다면 거짓을 반환 (true ^ true)

&(and)의 경우에는 둘 다 참일 경우에만 참 (true & true) 하나라도 다르다면 거짓 (true & false)

|(or)의 경우에는 하나라도 참이라면 참 (true | false) 둘다 거짓이라면 거짓(false | false)을 반환하게 된다.

!(not)의 경우에는 그 반대의 논리값을 반환한다. (!true는 거짓 !false는 참)

 

똑같은거 두 번 쓰려니까 너무 힘들어요...

 

그 외에 조건논리연산자라는게 존재하는데

 

&&와 ||으로 &와 |의 경우 둘 중에 하나라도 참이거나 거짓일 경우 나머지 연산을 하지 않게 만들어준다.

&&의 경우 하나라도 거짓이면 전부 거짓이기에 첫 연산자가 거짓일 경우 그 후로 연산을 하지 않고

||의 경우 하나라도 참이면 전부 참이기에 첫 연산자가 참일 경우 추가로 연산을 하지 않는다.

 

엥? 읽다보니 not equal과 xor이 같은거 아닌가요? 라고 물어볼 수도 있다.

 

결론부터 말하자면 그렇다.

 

아래는 A == B의 결과 반환표이다.

A B 결과
거짓 거짓
거짓 거짓
거짓 거짓

 

아래는 정확히 그것을 반대로 뒤집은 (!(A == B)) = (A != B) = (A^B)이다.

A B 결과
거짓
거짓
거짓
거짓 거짓 거짓

 

자세한 내용은 이산수학 교재를 참조하도록 하고

 

자 이제 코드를 작성해보자.

 

이번에는 반복문과 배열을 사용해 짧고 간단하게 만들어보자.

using System;

{
    int[] isNumb = { 0, 0 };
    bool[] isSuccess = { true, true };
    for (int i = 0; i < 2; i++)
    {
        Console.WriteLine((i + 1) + "번째 숫자를 입력해주세요.");
        isSuccess[i] = int.TryParse(Console.ReadLine(), out isNumb[i]);
    }
    if (isSuccess[0] && isSuccess[1]) Console.WriteLine("두 데이터는 모두 숫자입니다.");
    else if (isSuccess[0] ^ isSuccess[1]) Console.WriteLine("하나의 데이터만 숫자입니다.");
    else Console.WriteLine("두 데이터는 모두 문자입니다.");
}

코드라도 메모장에 복사 붙여넣기 해놓았던 나 칭찬해...

 

우선 배열에 대해 간략하게 알아보자

 

배열이란 하나의 변수명으로 여러 개의 데이터를 보관할 수 있게 해준다.

 

예를 들어 여러명의 인적사항을 추가할 때

string cheolsuName, string YuriName, string HunbalnomName 등으로 작성하면

작성하는데 피로감이 많이 들고 변수가 너무 많아져 추후에 찾아오기 힘들어질 수 있다.

 

그럴때는 string[] Name = {Cheolsu, Yuri, Hunbalnom}; 으로 작성하면

Name이라는 문자열 배열이 선언되고 하나의 변수명에 여러가지 데이터를 저장할 수 있게 된다.

불러올 때는 0부터 시작하는 데이터값을 대괄호 안에 넣어서 불러와주면 된다.

Console.WriteLine(Name[0]); //실행결과 Choelsu

 

주의 할 점은 첫 번째 순서를 불러오려면 1이 아닌 0을 대괄호 안에 집어넣어야한다는 점이다.

 

그리고 반복문에 대해서 간단하게 설명해보자면

 

이번에 사용한 것은 for문으로 for(시작문;조건문;종료문) {반복문} 으로 구성된다.

for (int i = 0; i < 2; i++)
    {
        Console.WriteLine((i + 1) + "번째 숫자를 입력해주세요.");
        isSuccess[i] = int.TryParse(Console.ReadLine(), out isNumb[i]);
    }

위 내용을 차례대로 분석해보면

시작 => int i = 0 변수를 선언 및 초기화한다.

조건 => i < 2라면 반복문을 실행한다.

종료 => i++ i에 1을 더해준다.

순으로 실행되며

 

풀이해보자면

 

시작 > i = 0 > i가 2보다 작은가? > 예 > 반복문을 실행한다. > i에 1을 더해준다.

> i = 1 > i가 2보다 작은가? > 예 > 반복문을 실행한다. > i에 1을 더해준다.

> i = 2 > i가 2보다 작은가? > 아니요 > 반복문을 멈춘다.

 

순으로 실행되며 마지막에는 반복문이 멈췄기 때문에 i에 수가 추가되지 않는다.

 

처음에 선언하는 변수는 굳이 변수명이 i가 아니더라도 상관없으며 종료문에도 굳이 i++이 아닌

i  += 1이나 i += 10으로 작성되어도 조건문만 만족한다면 반복한다.

 

한 번 실행해보자.

스크린 샷 3번 찍기 귀찮은 관계로 for 문을 추가하여 3회 반복 실행하였다.

 

두 번째 목표 : 간단한 퀴즈 만들어보기

 

================================

대한민국의 수도는 어디인가요?

 

1. 인천 2. 부산 3. 서울 4. 광주

================================

 

정답이라면 "정답입니다."

오답이라면 "오답입니다."

숫자가 아니라면 "숫자가 아닙니다."

보기 외의 숫자를 적었다면 "1~4 사이의 숫자를 입력해주세요."

 

가 출력되게 해보자

 

문제 난이도가 너무 쉬운 것 같지만 중요한 건 로직 구성이니 가볍게 넘어가자

 

이번에는 스위치 문과 함수를 이용해서 만들어보자

 

스위치문은 저번 시간에 배웠으니

함수에 대해 간략하게 설명해보자면

미리 만들어둔 입출력기 정도가 될 것이다.

 

수학에서도 함수는 f(x) = x + 1 이라면

 y(f(x))는 x + 1의 값을 만족하는 모든 값이 될 것이다.

ex) x = {1, 2, 3, 4, 5}  y = {2, 3, 4, 5, 6}

이런 식으로 미리 만들어둔 수식을 대입만 하면 사용할 수 있게 해주는 걸 함수라고 부른다.

 

코딩에서의 함수도 마찬가지다

윗 수식을 코드로 작성하면

int Plus(int x)
{
    int y = x + 1;
    return y;
}

이런식으로 작성될 것이다.

매개변수(int x)를 통해 받아온 값을 처리하고 그 결과 값을 반환(return y)해준다.

 

이런 식으로 미리 작성해둔 코드를 다시 작성 할 필요없이 불러오기만 하면 실행할 수 있게 도움을 주는 걸 함수라고 한다.

 

자 코드를 한번 작성해보자.

using System;

Question();//함수 실행

void Question() //함수 선언
{
    Console.WriteLine("==================================");
    Console.WriteLine("대한민국의 수도는 어디인가요?\r\n"); //\r\n으로 줄바꿈
    Console.WriteLine("1. 인천 2. 부산 3. 서울 4. 광주");
    Console.WriteLine("==================================");

    bool isSuccess = int.TryParse(Console.ReadLine(), out int input); //여태 써왔던 걸 압축

    switch (input)
    {
        case 1:
            Console.WriteLine("\r\n오답입니다.\r\n");
            Question();
            break;
        case 2:
            Console.WriteLine("\r\n오답입니다.\r\n");
            Question();
            break;
        case 3:
            Console.WriteLine("\r\n정답입니다.\r\n");
            break;
        case 4:
            Console.WriteLine("\r\n오답입니다.\r\n");
            Question();
            break;
        default:
            if (isSuccess) Console.WriteLine("\r\n1~4 사이의 숫자를 입력해주세요.\r\n");
            else Console.WriteLine("숫자가 아닙니다.\r\n");
            Question();
            break;
    }
}

void Question 이라는 함수를 만들고 정답이 아니라면 함수가 반복되게 만들었다.

이렇게 특정한 탈출구를 만들어놓고 같은 함수를 반복하게 만드는 것을 재귀함수라고 부른다.

 

실행해보자.

정답을 맞출 때까지 무한 반복으로 물어보는 퀴즈가 완성되었다.

 

쓰다가 중간에 날려먹고 다시 쓸려니까 진짜 어안이 벙벙해서 아.. 어떻게 썼더라.. 싶은 부분도 많았지만 

어찌저찌 좀 더 내용 보강해서 오늘 TIL도 무사히 종료되었다..

관련글 더보기