본문 바로가기
UNITY/유니티게임스쿨

[유니티게임스쿨 TIL] C# 기초 문법 이해 :: 데이터 타입과 반복문

by 램플릿 2024. 5. 29.

 

오늘의 공부


 

VS에서 C# 프로젝트 시작

VS2022 실행
→ '새 프로젝트 만들기'
→ '콘솔 앱(C#)'

 

 

디버깅하기

C# 코드 작성
→ 디버그 탭
→ '디버깅 시작' (=단축키 F5)

 

 

변수의 데이터 타입

  • bool : true or false
  • char : 문자(1byte = 8bit) 
  • string : 문자열
  • short : 작은 숫자
  • long long : 큰 숫자(=int64, big integer와 비슷한 개념)
  • int : 정수(소수점x)
  • float : 작은 실수
  • float64 or double : 긴 실수
int a; // 정수를 a라는 이름으로 변수화 하겠다고 선언
a=2000;

Console.WriteLine(a); //Console의 WriteLine함수로 콘솔창에 a를 출력

 

 

데이터의 표현 범위

  • 변수의 데이터 타입마다 표현 범위가 다르다.
🎓 새로운 지식
○ unsigned : 부호 없이 0부터 최대표현범위까지의 숫자 표현가능

(예시)
int : -2147483648 ~ 2147483647
unsigned int : 4294967295

 

↓참고자료 링크

https://learn.microsoft.com/en-us/cpp/c-language/cpp-integer-limits?view=msvc-170

 

 

bit의 이진수 표현 (10진수 to 2진수)

1 = 00000001 (2)
2 = 00000010 (2)
...

64 = 01000000 (2)
128 = 10000000 (2)

 

반복문

○ while(조건문) {  }

: 조건문이 참일때 계속해서 반복한다.

 

○ for(int i = 초기값; 조건식; 증감식) {  }

 : 조건식이 참일때 반복

 

※ 증감식의 ++, -- : ++는 기존 변수에 1을 더하고, --는 1을 빼는 연산자.

※ [ i++; ] 는 i를 먼저 반환한 후에 1을 더하고, [ ++i; ]는 i에 1을 더한후 반환한다.

※ += 는 좌항의 변수에 우항의 값을 더한 결과를 변수에 다시 저장하는 연산자이다.

int a = 10;
a += 20;
Console.WriteLine(a);
//a의 값 30이 출력된다.

string str = "abc";
str += "def";
Console.WriteLine(str);
//str "abcdef"가 출력된다.
💡질문 :: while문과 for문의 차이는 무엇인가요?
⇒ for문은 주로 정해진 범위 내에서 제한적으로 사용할 경우에 활용!
참고 링크👍 :: 반복문
https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/statements/iteration-statements#the-foreach-statement

 

○ foreach

형식 :: foreach (요소를 반환할 변수 in 데이터 소스) { }

- 데이터 소스(배열,리스트 등) 안의 모든 요소에 대해 반복문을 실행한다.

List<int> fibNumbers = new() { 0, 1, 1, 2, 3, 5, 8, 13 };
foreach (int element in fibNumbers)
{
    Console.Write($"{element} ");
    //== Console.Write("{0} ",element);
}
찾아볼 자료👍 :: $(을)를 사용하여 문자열 보간
https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/tokens/interpolated
https://woojoolog.tistory.com/4#google_vignette (C# 다양한 문자 출력 방법)

 

 

이중 반복문

  • 반복문 내에 반복문이 존재하는 경우, 이중반복문이라 함.

 

주석 단축키 활용

  • ctrl+K + ctrl+C
  • ctrl+K + ctrl+U

 

 

 


 

연습문제풀이


 

문제 1)

증가하는 별 출력하기

 

int num = 4;
string tree = "";

for(int i = 0;i < num; i++)
{
    tree = "";
    for(int j = 0; j <= i; j++)
    {
        tree += "*"; 
    }
    Console.WriteLine(tree);
}

 

 

문제 2)

오른쪽 정렬로 출력하기

for (int i = 0; i < num; i++) //num = 4;
{
    tree = "";

    for (int j = 1; j < num-i; j++)
    {
        tree += " ";
    }
    for(int k = 0; k <= i; k++)
    {
        tree += "*";
    }
    Console.WriteLine(tree);
}

 

 

문제 3)

대칭(트리모양)으로 출력하기

int n = 5;
string space = "";
string star = "";

for( int i = 0; i < n; i++)
{
    space = "";
    star = "";
    for(int j=1; j < n-i; j++)
    {
        space += " ";
    }
    for(int k = 0;k <= i*2; k++)
    {
        star += "*";
    }
    Console.WriteLine(space+star);
}

 

 

문제 4)

○ 조건 1.
w키를 누르면 △, a키를 누르면 ◁, s키를 누르면 ▽, d키를 누르면 ▷ 모양으로

별이 출력되도록 함.

○ 조건 2.
프로그램이 계속 반복 실행되도록함.

○ 조건 3.
ReadKey 활용

int line = 5;

void up()
{
    for (int i = 0; i < line; i++)
    {
        for (int j = 1; j < line - i; j++)        
            Console.Write(" ");
        
        for (int k = 0; k <= i * 2; k++)        
            Console.Write("*");       
        
        Console.WriteLine();
    }
    Console.WriteLine();
}

void left()
{
    for (int i = 1; i < line * 2; i++)
    {
        if (i <= line)
        {
            for (int j = 0; j < line-i; j++)
                Console.Write(" ");

            for (int k = 0; k < i; k++)
                Console.Write("*");
        }
        else
        {
            for (int j = 0; j < i % line; j++)
                Console.Write(" ");

            for (int k = 0; k < line - i % line; k++)
                Console.Write("*");
        }
        Console.WriteLine();
    }
    Console.WriteLine();
}

void down()
{
    for (int i = line; i > 0; i--)
    {
        for (int j = 0; j < line-i; j++)        
            Console.Write(" ");
        
        for (int k = 1; k < i * 2; k++)        
            Console.Write("*");
        
        Console.WriteLine();
    }
    Console.WriteLine();
}

void right()
{
    for (int i = 1; i < line*2; i++)
    {
        if (i <= line) {
            for(int j = 0;j < i; j++)
                Console.Write("*");            
        }
        else {
            for (int j = 0; j < line-i%line; j++)
                Console.Write("*");            
        }
        Console.WriteLine();
    }
    Console.WriteLine();
}

bool flag = true;

while (flag)
{
    Console.Write("키를 입력하세요. : ");
    ConsoleKeyInfo keyinfo = Console.ReadKey();

    Console.WriteLine("");

    char key = keyinfo.KeyChar;
    
    switch (key)
    {
        case 'w':
            up();
            break;
        case 'a':
            left();
            break;
        case 's':
            down();
            break;
        case 'd':
            right();
            break;
        case 'q':
            Console.WriteLine("프로그램을 종료합니다.");
            flag = false;
            break;
        default:
            Console.WriteLine("잘못된 입력입니다.");
            break;
    }

}

 

 

(추가 응용 문제)

  • 팩토리얼 출력하기
  • 피보나치 수열 출력하기 (재귀함수 활용)