방명록
- C# #4 메서드와 구조체2023년 08월 15일 23시 01분 28초에 업로드 된 글입니다.작성자: noun06
메서드
- 메서드는 특정한 작업을 수행하기 위해 사용되는 개념으로 함수라고도 불리움.
- 코드의 재사용성, 모듈화, 가독성과 유지보수성, 중복 제거, 추상화 등의 특징을 가지고 있음.
메서드의 구조와 문법
- 접근 제한자(Access Modifier) : 메서드가 어디서 접근 가능한지 범위 지정(public, private, protected 등 사용)
- 반환 타입(Return Type) : 메서드가 작업을 수행한 후 반환되는 값의 데이터 타입 지정.(반환하는 값이 없을 시 'void' 키워드 사용)
- 매개변수(parameter) : 메서드가 호출될 때 받아들일 매개변수 지정. 메서드에 필요한 입력 값 전달 시 사용하며 0개 이상의 매개변수를 정의할 수 있음.
- 반환값(Return Value) : 메서드가 결과를 반활할 때 사용하며 void가 아닌경우 해당 타입에 맞는 값 반환.
[접근 제한자] [반환 타입] 매서드명([매개변수]) { // 메서드 실행 코드 [return 반환값;] //반환 타입이 void가 아닌 경우 결과 반환 }
// 예시 1: 반환 값이 없는 메서드 public void SayHello() { Console.WriteLine("안녕하세요!"); } // 예시 2: 매개변수가 있는 메서드 public void GreetPerson(string name) { Console.WriteLine("안녕하세요, " + name + "님!"); } // 예시 3: 반환 값이 있는 메서드 public int AddNumbers(int a, int b) { int sum = a + b; return sum; } //메서드 호출 SayHello(); GreetPerson("John"); AddNumbers(1, 2);
- 메서드 오버로딩 : 동일한 이름의 동일한 기능을 하는 메서드를 여러 매개변수 리스트로 다중 정의하는 것. (매개변수의 개수, 타입, 순서 등)
void PrintMessage(string message) { Console.WriteLine("Message: " + message); } void PrintMessage(int number) { Console.WriteLine("Number: " + number); } // 메서드 호출 PrintMessage("Hello, World!"); // 문자열 매개변수를 가진 메서드 호출 PrintMessage(10); // 정수 매개변수를 가진 메서드 호출
재귀 호출(Recursion)
- 메서드가 자기 자신을 호출하는 것. 이를 통해 동일한 작업을 간단하게 표현하여 여러 번 수행할 수 있음.
- 종료 조건을 명확하게 정의하여 무한 재귀 호출 반복에 주의해야 함.
void CountDown(int n) { if (n <= 0) { Console.WriteLine("Done"); } else { Console.WriteLine(n); CountDown(n - 1); // 자기 자신을 호출 } } // 메서드 호출 CountDown(5);
구조체(Struct)
- 여러 개의 다양한 데이터를 묶어 하나의 사용자 정의 데이터 타입 만들기 위해 사용하며 'struct' 키워드로 선언.
- 구조체는 값 형식(Value Type)으로 분류되며 데이터를 저장하고 필요한 기능을 제공.
- 구조체는 클래스와 유사한 멤버를 가지며 변수와 메서드 등으로 구성될 수 있음.
struct Person { public string Name; public int Age; public void PrintInfo() { Console.WriteLine($"Name: {Name}, Age: {Age}"); } }
- 구조체는 변수를 선언하여 사용할 수 있으며 멤버에 접근할 때 '.' 연산자를 사용.
Person person1; person1.Name = "John"; person1.Age = 25; person1.PrintInfo();
실습 과제 [1]
- 구구단 출력하기
namespace GuguDan { internal class Program { static void Main(string[] args) { Console.Write("단을 입력하세요: "); int num = int.Parse(Console.ReadLine()); for(int i = 1; i < 10; i++) { int result = num * i; Console.Write($"{num} x {i} = {result} \n"); } } } }
실습 과제 [2]
- 별찍기
namespace Star { internal class Program { static void Main(string[] args) { //직각삼각형◺ for (int i = 0; i < 5; i++) { for (int j = 0; j <= i; j++) { Console.Write("*"); } Console.WriteLine(); } //역직각삼각형◸ for (int i = 0; i < 5; i++) { for (int j = 4; j >= i; j--) { Console.Write("*"); } Console.WriteLine(); } //피라미드 for (int i = 0; i < 5; i++) { for (int j = 0; j < 4 - i; j++) { Console.Write(" "); } for (int j = 0; j < 2 * i + 1; j++) { Console.Write("*"); } Console.WriteLine(); } //역피라미드 for (int i = 0; i < 4; i++) { for (int j = 0; j <= i; j++) { Console.Write(" "); } for (int j = 7; j >= 2 * i + 1; j--) { Console.Write("*"); } Console.WriteLine(); } //2중 배열 직각삼각형 int[,] map = new int[5, 5] { {1,0,0,0,0}, {1,1,0,0,0}, {1,1,1,0,0}, {1,1,1,1,0}, {1,1,1,1,1} }; for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { if (map[i, j] == 1) { Console.Write("*"); } else { Console.Write(""); } } Console.WriteLine(); } } } }
실습 과제 [3]
- 최댓값, 최솟값 찾기
namespace MaxMin { internal class Program { static void Main(string[] args) { //최댓값 최솟값 찾기 int[] num = new int[5]; for (int i = 0; i < 5; i++) { Console.WriteLine("숫자를 입력하세요: "); num[i] = int.Parse(Console.ReadLine()); } //입력 받은 후에 변수 선언 int maxNum = num.Max(); int minNum = num.Min(); Console.WriteLine("최댓값: " + maxNum); Console.WriteLine("최솟값: "+ minNum); } } }
실습 과제 [4]
- 소수 판별하기
namespace PrimeNumber { internal class Program { // 주어진 숫자가 소수인지 판별하는 함수 static bool IsPrime(int num) { if (num <= 1) // 1보다 작거나 같은 수는 소수가 아니다. { return false; } for (int i = 2; i * i <= num; i++) // 2부터 숫자의 제곱근까지만 확인한다. { if (num % i == 0) // 숫자가 i로 나누어 떨어진다면 소수가 아니다. { return false; } } return true; // 소수인 경우 } static void Main() { Console.Write("숫자를 입력하세요: "); // 사용자에게 숫자 입력 요청 int num = int.Parse(Console.ReadLine()); // 사용자가 입력한 값을 정수로 변환하여 저장 if (IsPrime(num)) // 입력 받은 숫자가 소수라면 { Console.WriteLine(num + "은 소수입니다."); // 소수임을 출력 } else // 소수가 아니라면 { Console.WriteLine(num + "은 소수가 아닙니다."); // 소수가 아님을 출력 } } } }
실습 과제 [5]
- 숫자 맞추기
namespace UpDownGame { internal class Program { static void Main(string[] args) { Random random = new Random(); int numberToGuess = random.Next(1, 101); int guessCount = 0; int myNum = 0; Console.WriteLine("숫자 맞추기 게임을 시작합니다.."); for(int i = 0; myNum != numberToGuess ; i++) { Console.WriteLine("숫자를 입력하세요: "); myNum = int.Parse(Console.ReadLine()); guessCount++; if (myNum > numberToGuess) { Console.WriteLine("너무 큽니다"); } else if (myNum < numberToGuess) { Console.WriteLine("너무 작습니다"); } else { Console.WriteLine("성공"); Console.WriteLine(guessCount + "번 만에 맞추셨습니다"); } } } } }
실습 과제 [6]
- 틱택토
using System; namespace TicTacToe { class Program { static char[] board = { '1', '2', '3', '4', '5', '6', '7', '8', '9' }; static int player = 1; // 1 or 2 static int choice; // 선택한 보드 위치 static int flag = 0; // 승리 경우 체크 // 보드 그리기 static void DrawBoard() { Console.WriteLine($" {board[0]} | {board[1]} | {board[2]} "); Console.WriteLine("---|---|---"); Console.WriteLine($" {board[3]} | {board[4]} | {board[5]} "); Console.WriteLine("---|---|---"); Console.WriteLine($" {board[6]} | {board[7]} | {board[8]} "); } // 체크 승리 조건 static int CheckWin() { //가로 승리 if (board[0] == board[1] && board[1] == board[2]) { return 1; } else if (board[3] == board[4] && board[4] == board[5]) { return 1; } else if (board[6] == board[7] && board[7] == board[8]) { return 1; } //세로 승리 else if (board[0] == board[3] && board[3] == board[6]) { return 1; } else if (board[1] == board[4] && board[4] == board[7]) { return 1; } else if (board[2] == board[5] && board[5] == board[8]) { return 1; } //대각선 승리 else if (board[0] == board[4] && board[4] == board[8]) { return 1; } else if (board[2] == board[4] && board[4] == board[6]) { return 1; } //비김 else if (board[0] != '1' && board[1] != '2' && board[2] != '3' && board[3] != '4' && board[4] != '5' && board[5] != '6' && board[6] != '7' && board[7] != '8' && board[8] != '9') { return -1; } else { return 0; } } // 보드 업데이트 static void UpdateBoard() { char sign = (player % 2 == 0) ? 'O' : 'X'; do { Console.WriteLine($"어디에 '{sign}'을 놓을까요?"); choice = int.Parse(Console.ReadLine()) - 1; } while (board[choice] != (choice + 1).ToString()[0]); board[choice] = sign; } static void Main(string[] args) { Console.WriteLine("틱택토 게임을 시작합니다."); do { Console.Clear(); Console.WriteLine("플레이어 1: X |||| 플레이어 2: O"); Console.WriteLine("\n"); if (player % 2 == 0) { Console.WriteLine("플레이어2 턴입니다."); } else { Console.WriteLine($"플레이어1 턴입니다."); } DrawBoard(); UpdateBoard(); flag = CheckWin(); player++; } while (flag != 1 && flag != -1); Console.Clear(); DrawBoard(); if (flag == 1) { Console.WriteLine($"플레이어 {(player % 2) + 1} 승리!"); } else { Console.WriteLine("무승부!"); } } } }
'C#' 카테고리의 다른 글
C# #6 알고리즘 기초 (0) 2023.08.17 C# #5 클래스, 객체, 상속, 다형성 (0) 2023.08.16 C# #3 배열과 컬렉션 (0) 2023.08.15 C# #2 조건문과 반복문 (0) 2023.08.14 C# #1 프로그래밍 기본 요소, 변수, 자료형, 연산자와 문자열 처리 (0) 2023.08.14 다음글이 없습니다.이전글이 없습니다.댓글