C# 문법-2

맛없는콩두유·2022년 10월 25일
0
post-thumbnail
post-custom-banner

반복문 (foreach)

//foreach

string[] items = { "506호", "507호" };


foreach (var item in items)
{
    Console.WriteLine("포함되어있는 호수는 {0}",item);
}

->

포함되어있는 호수는 506호
포함되어있는 호수는 507호

int[] numbers = { 10, 20, 30, 40, 50 };
int sum = 0;
int avg = 0;

foreach (var item in numbers)
{
    sum += item;
}

avg = sum / numbers.Length;

Console.WriteLine(sum);
Console.WriteLine(avg);

->

150
30

int[] scores1 = { 10, 20, 30, 40, 50, 100 };

int[] index = { 0, 1, 2, 3, 4 };

foreach (var item in index)
{
    Console.WriteLine(scores1[item]);
}

->

10
20
30
40
50

int[] scores1 = { 10, 20, 30, 40, 50, 100 };

int[] index = { 0, 1, 2, 3, 4 };

int[] scores2 = new int[5];

int i = 0;

foreach (var item in index)
{
    Console.WriteLine(item);
}

foreach (var item in index)
{
    scores2[i] = scores1[item];
    i++;
}
foreach (var item in index)
{
    Console.WriteLine(item);
}

->

0
1
2
3
4
0
1
2
3
4

int[,] scores =
{
    { 75, 80, 60},
    { 70, 65, 90}
};
int sum = 0;
int cnt = 0;


foreach (var item in scores)
{
    sum += item;
    cnt++;
    if(cnt > 2)
    {
        Console.WriteLine(sum / cnt);
        sum = 0;
        cnt = 0;
    }
}

->

71
75

증감 및 논리연산자

단항, 논리연산자

double a = 1.0;
double b = -a;

Console.WriteLine(b);
Console.WriteLine(-a);

->

-1
-1

int a = 20;
int b = 0;

try
{
	Console.WriteLine(a/b);
}
catch (DivideByZeroException)
{

	Console.WriteLine("0으로 나누려고 시도했습니다.");
}

->

0으로 나누려고 시도했습니다.

AND/ OR /NOT

논리연산자

Console.WriteLine(true | false);
Console.WriteLine(true & false);

->

True
False

조건부 논리 연산자

bool Calculated()
{
    Console.WriteLine("실행됩니다.");
    return true;
}

bool a = true && Calculated();
Console.WriteLine(a);

bool b = false && Calculated();
Console.WriteLine(b);
실행됩니다.
True
False

bool qwe()
{
    Console.WriteLine("첫번쨰");
    return true;
}

bool asd()
{
    Console.WriteLine("두번쨰.");
    return true;
}


bool a = true || qwe();
bool b = false || asd();

->

두번쨰.

비트 및 조건 연산자

2진법

//int a = 255;
int a = 0b_1111_1111;

Console.WriteLine(Convert.ToString(a, 2));

->

11111111

int a = 0b_0000_0001;
Console.WriteLine(Convert.ToString(a << 7, 2));


-->

10000000

int a = 0b_0000_0001;

Console.WriteLine($"기존 b의 값 : {a}");
Console.WriteLine($"10진법 : {a << 3}");
Console.WriteLine($"2진법 : {Convert.ToString(a << 4, 2)}");

->

기존 b의 값 : 1
10진법 : 8
2진법 : 10000

조건 연산자

int x = 10;


Console.WriteLine(x>0 ? "positve" : "negative");

->

positve

람다 연산자

//람다연산자 => 


Action<string> greeting = (name) =>
Console.WriteLine($"Hello {name}");

greeting("ALZIO!");

->

Hello ALZIO!

조건문 (switch-case / case)

switch-case

int num = 40;

switch (num)
{
	case 10:
		Console.WriteLine("값은 10입니다.");
		break;
	case 20:
		Console.WriteLine("값은 20입니다.");
		break;
	case 30:
		Console.WriteLine("값은 30입니다.");
		break;
	case 40:
		Console.WriteLine("값은 40입니다.");
		break;

	default:
		break;
}

->

값은 40입니다.

크기비교

int number = 5;

switch(number)
{
    case > 0 and < 10:
        Console.WriteLine("p");
        break;
}

->

p

double bmi = 20;

switch(bmi)
{
    case < 18.5:
        Console.WriteLine("저체중");
        break;
    case < 23:
        Console.WriteLine("저체중");
        break;
    case < 25:
        Console.WriteLine("저체중");
        break;
    default:
        Console.WriteLine("저체중");
        break;
}

->

저체중

반복문 (for/ while/ do while/ foreach)

for


int num = 10;

for (int i = 0; i < num; i+=2)
{
    Console.WriteLine(i);
}

->

0
2
4
6
8

for (int i = 1; i < 100; i++)
{
    if(i%6 == 0)
        Console.WriteLine(i);
}

->

6
12
18
24
30
36
42
48
54
60
66
72
78
84
90
96

for (int i = 1; i < 100; i++)
{
    if((i%4 == 0) && (i%6 == 0))
        Console.WriteLine(i);
}

->

12
24
36
48
60
72
84
96

string[] things = { "책", "연필", "서랍" };

for (int i = 0; i < things.Length; i++)
{
    if (things[i] == "연필")
    {
        things[i] = "향수";
    }
}

foreach (var item in things)
{
    Console.WriteLine(item);
}

->

책
향수
서랍

while

int i = 0;

while(i<10)
{
    Console.WriteLine($"참입니다{i}" );
    i++;
}

->

참입니다0
참입니다1
참입니다2
참입니다3
참입니다4
참입니다5
참입니다6
참입니다7
참입니다8
참입니다9

do - while

// do - while 문 최초로 한번은 실행해야할 때! 
//i가 10이라서 조건이 안맞지만 원래는 조건에의해 실행이안되지만
//최초 실행 한번이 됨! 


int num1;
do
{
    Console.Write("0이외의 값 입력 : ");
    num1 = Convert.ToInt32(Console.ReadLine());
} while (num1==0);

->

0이외의 값 입력 : 0
0이외의 값 입력 : 0
0이외의 값 입력 : 0
0이외의 값 입력 : 4

반복문 (break/ continue/ goto)

break

int i = 0;
while (true)
{
    Console.WriteLine(i);
    i++;
    if (i > 10) 
        break;
}

->

0
1
2
3
4
5
6
7
8
9
10

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

->

* * * * *
* * * * *
* * * * *
* * * * *
* * * * *

for (int i = 0; i < 5; i++)
{
	for (int j = 0; j < 5; j++)
	{
		if (j > i)
			break;

		Console.Write("* ");
	}
	Console.WriteLine();
}
for (int i = 0; i < 5; i++)
{
	for (int j = 0; j < i+1; j++)
	{
		Console.Write("* ");
	}
	Console.WriteLine();
}

->

*
* *
* * *
* * * *
* * * * *

continue

3의 배수 제외하고 출력

int sum = 0;
int cnt = 0;

while(cnt < 20)
{
    cnt++;
    if (cnt % 3 == 0)
        continue;
    Console.WriteLine(cnt);
}

->

1
2
4
5
7
8
10
11
13
14
16
17
19
20

int sum = 0;
int cnt = 1;

while(cnt <= 5)
{
    Console.Write($"값 {cnt} 입력 : ");
    int num = Convert.ToInt32(Console.ReadLine());

    if (num == 0)
        continue;
    sum += num;
    cnt++;
}
Console.WriteLine($"총합 : {sum}");

->

값 1 입력 : 1
값 2 입력 : 2
값 3 입력 : 3
값 4 입력 : 4
값 5 입력 : 0
값 5 입력 : 0
값 5 입력 : 5
총합 : 15

goto

for (int i = 0; i < 5; i++)
{
    for (int j = 0; j < 5; j++)
    {
        if (i == 3)
            goto Finish;
        Console.Write("* ");
    }
    Console.WriteLine();
}

Finish:
Console.WriteLine("끝났습니다.");

->

* * * * *
* * * * *
* * * * *
끝났습니다.

Random rand = new Random();
int n = rand.Next(1, 6);


for (int i = 0; i < 5; i++)
{
    for (int j = 0; j < 5; j++)
    {
        if (i == n)
            goto Finish;
        Console.Write("* ");
    }
    Console.WriteLine();
}

Finish:
Console.WriteLine($" {n}개 끝났습니다.");

->

* * * * *
* * * * *
* * * * *
* * * * *
 4개 끝났습니다.

데이터 형 변환

캐스팅 연산자

double x = 25.5;
int a = (int)x;

Console.WriteLine(a);

->

25

문자열 숫자열 변환

string s = "삼백";

try
{
	int n = Int32.Parse(s);
	Console.WriteLine(n);
}
catch (FormatException)
{
	Console.WriteLine($"{s}를 int형으로 변환할 수 없습니다.");

;}
catch(ArgumentNullException)
{
	Console.WriteLine($"null를 int형으로 변환할 수 없습니다.");
}

->

삼백를 int형으로 변환할 수 없습니다.

TryParse, Parse

//TryParse : bool값(true/ false)
//Parse : 변환 값 / 에러(try-catch)

string s = " -130";
if(Int32.TryParse(s, out int n))
{
    Console.WriteLine(n);
}
else
    Console.WriteLine("실패");

->

실패

ConverTo

//Convert.TO(자료형)

//short형 범위 내의 값을 키보드로 입력받고 변환하기
//매 반복마다 계속할지 물어보고 y값 입력 시 계속 반복하기.
//예외처리 : 형식(ㅜㅅ자 입렦?) 오버플로우

short num = 0;
bool flag = true;

while(flag)
{
    Console.Write($"{short.MinValue} ~ {short.MaxValue}사이의 값 입력 : ");
    string input = Console.ReadLine();

	try
	{
		num = Convert.ToInt16(input);
	}
	catch (FormatException)
	{
		Console.WriteLine("숫자만 입력하세요.");
	}   
	catch (OverflowException)
	{
		Console.WriteLine("Short범위를 초과했습니다.");
	}

	Console.WriteLine($"입력값 : {num}");
	Console.WriteLine("계속할까요? Y / N");
	string keep = Console.ReadLine();
	if ((keep != "Y") && (keep != "y"))
		flag = false;

}

->

-32768 ~ 32767사이의 값 입력 : 4
입력값 : 4
계속할까요? Y / N
Y
-32768 ~ 32767사이의 값 입력 : 4
입력값 : 4
계속할까요? Y / N
N

데이터 서식

서식지정자

string s1 = "Hello";
string s2 = "Alzio";

Console.WriteLine("{0} {1}!");
Console.WriteLine("{0} {1}!", s1, s2);
Console.WriteLine("{1}", s1, s2);

Console.WriteLine("{0} {0} {0}", s2, s1);
Console.WriteLine($"{s1} {s2}!");

->

{0} {1}!
Hello Alzio!
Alzio
Alzio Alzio Alzio
Hello Alzio!

통화 서식지정자

int price = 15400;
Console.WriteLine($"Price: {price:C}");

->

Price: \15,400

숫자 서식지정자

string pld = "1234";
string pName = "Alzio";
string pTotal = "\\5,000";

Console.WriteLine("00000000-00000000-00000000");

string concat = pld.PadRight(9);
concat += pName.PadRight(8);
concat += pTotal.PadLeft(9);

Console.WriteLine(concat);

->

00000000-00000000-00000000
1234     Alzio      \5,000

날짜 서식지정자

DateTime date1 = new DateTime(2030,5,24,8,30,25);
Console.WriteLine(date1);
DateTime date2 = date1.Date;
Console.WriteLine(date2);

Console.WriteLine(date1.ToString("yy-MM-dd HH:mm"));

->

2030-05-24 오전 8:30:25
2030-05-24 오전 12:00:00
30-05-24 08:30

StringBuilder 클래스

using System.Text;

StringBuilder myStringBuilder = new StringBuilder("Hello");
myStringBuilder.Append(" My first SringBuilder");
Console.WriteLine(myStringBuilder);

->

Hello My first SringBuilder

using System.Text;

int num1 = 10;
int num2 = 20;

var test = new StringBuilder();
test.AppendLine("StringBuilder Test");
test.AppendLine("Hello?");
test.AppendLine($"숫자1 : {num1}, 숫자2 : {num2}");

test.Replace('?', '!');
Console.WriteLine(test);

->

StringBuilder Test
Hello!
숫자1 : 10, 숫자2 : 20

배열 연산

배열 연산

int[] arr = { 10, 8, 5, 9 };
Array.Sort(arr);

foreach (var item in arr)
{
    Console.Write($" {item}");
}

Console.WriteLine();

Array.Reverse(arr);

foreach (var item in arr)
{
    Console.Write($" {item}");
}

->

 5 8 9 10
 10 9 8 5

string[] ids = { "OB11", "3C14", "5D18", "1A06", "AWW1", "AWW1" , "AWW1" };

Array.Clear(ids,2,3);
foreach (var item in ids)
{
    Console.WriteLine($"{item}");
}

->

OB11
3C14



AWW1
AWW1

배열 크기

string[] id = { "OB11", "3C14", "5D18", "1A06", "AWW1", "AWW1" };

int i = 2;
int n = 3;
Array.Clear(id, i, n); //인덱스 i부터 n개 만큼

id[2] = "5C14";

foreach (var item in id)
{
    Console.WriteLine($"{item}");
}

->

OB11
3C14
5C14


AWW1


//배열 크기 늘 리기
string[] id = { "OB11", "3C14", "5D18", "1A06", "AWW1", "AWW1" };

Array.Resize(ref id, 10);
id[6] = "1B59";
foreach (var item in id)
{
    Console.WriteLine($"{item}");
}

->

OB11
3C14
5D18
1A06
AWW1
AWW1
1B59



문자열 배열간 변환

string string1 = "abcd1234";
char[] arr = string1.ToCharArray();

foreach (var item in arr)
{
    Console.WriteLine($"{item}");
}

->

a
b
c
d
1
2
3
4

리스트

리스트

var names = new List<string> { "Apple", "Banana", "Cherry"};

names.Add("Mango");
names.Add("Orange");
names.Remove("Banana");
foreach (var item in names)
{
    Console.WriteLine(item);
}
var names = new List<string> { "Apple", "Banana", "Cherry"};

names.Add("Mango");
names.Add("Orange");

for (int i = 0; i < names.Count; i++)
{
    Console.WriteLine(names[i]);
}

->

Apple
Cherry
Mango
Orange

var names = new List<string> { "Apple", "Banana", "Cherry"};

names.Add("Mango");
names.Add("Orange");

var index = names.IndexOf("Apple");

if(index != -1)
    Console.WriteLine($"{names[index]} 의 인덱스 {index}");
else
    Console.WriteLine("해당 내용을 찾을 수 없습니다.");

->

Apple 의 인덱스 0

리스트 정렬하기

var names = new List<string> { "Banana", "Apple", "Cherry"};

var Sorted_names = new List<string> { };

Sorted_names = names.ToList();
Sorted_names.Sort();

foreach (var item in names)
{
    Console.WriteLine(item);
}

Console.WriteLine();

foreach (var item in Sorted_names)
{
    Console.WriteLine(item);
}

->

Banana
Apple
Cherry

Apple
Banana
Cherry

다른 리스트 추가하기

var numbers = new List<int> { 100, 200, 300 };
var addList = new List<int> { -50, 70, 80 };

numbers.Insert(1, 150);
numbers.InsertRange(0, addList);

foreach (var item in numbers)
{
    Console.WriteLine(item);
}

->

-50
70
80
100
150
200
300

함수의 개념

//함수

//반환자료형 함수명(자료형 매개변수)
//{
//    ...
//}

int f(int x)
{
    return x * 2;
}

int result = f(5);
Console.WriteLine(result);

->

10

// 반환형 X 
void Print(string x)
{
    Console.Write(x);
}

->

Hello Alzio!


//반환 X 매개변수X


//반환 X 매개변수X

void Enter()
{
    Console.WriteLine("\n");
}
Console.Write("hello");
Enter();
Console.Write("great");
Enter();

->

hello

great

// 반환 O, 매개 O

int Multiply(int i, int j)
{
    return i * j;
}

int result = 0;
result = Multiply(10, 55);

Console.WriteLine(result);

->

550

계산기 함수

//계산기 함수 
double Add(double x, double y)
{
    return x + y;

}
double Sub(double x, double y)
{
    return x - y;
}

double Mul(double x, double y)
{
    return x * y;
}

Console.WriteLine(Add(8,2));

->

10

인수 전달하기

// 인수 전달하기
void Print(int eng, int math)
{
    Console.WriteLine($"영어점수는 {eng}, 수학점수는 {math}");
}

Console.WriteLine("영어 점수 : ");
int e = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("수학 점수 : ");
int m = Convert.ToInt32(Console.ReadLine());

Print(e, m);

->

영어 점수 : 100
수학 점수 : 90
영어점수는 100, 수학점수는 90


//매개변수로 ref를 해야 원본 값이 바뀐다!! 

void Swap(ref int a, ref int b)
{
    int temp = a;
    a = b;
    b = temp;
    Console.WriteLine($"변경 후 a={a}, b={b}");
}

int a = 10;
int b = 20;
Console.WriteLine($"변경 전 a={a}, b={b}");

Swap(ref a, ref b);
Console.WriteLine($"원본 값 a={a}, b={b}");

->

변경 전 a=10, b=20
변경 후 a=20, b=10
원본 값 a=20, b=10

매개변수로 ref를 안써주면 원본값은 안바뀐고, ref를 적어주면 원본 값이 바뀐다.


재귀함수 및 오버로딩

재귀함수

//재귀함수
//팩토리얼 5!

Console.WriteLine(Factorial(5));

int Factorial(int n)
{
    if (n == 1)
        return 1;
    else
        return n * Factorial(n - 1);
}

->

120

피보나치

//파보나치
// 1 1 2 3 5 8 13 21 34 55


for (int i = 1; i < 11; i++)
{
    Console.Write(Fibonacci(i) + " ");
}

int Fibonacci(int n)
{
    if (n == 1 || n == 2)
        return 1;
    else
        return Fibonacci(n - 1) + Fibonacci(n - 2);

}

->

1 1 2 3 5 8 13 21 34 55

함수 오버로딩

//함수 오버로딩

namespace ConsoleApp5
{
    class Program
    {
        static void Print(int a)
        {
            Console.WriteLine($"숫자는 {a} 입니다.");
        }
        static void Print(int a,int b)
        {
            Console.WriteLine($"숫자는 {a},{b} 입니다.");
        }
        static void Print(string s)
        {
            Console.WriteLine($"입력내용은 {s} 입니다.");
        }


        static void Main(string[] args)
        {
            Print(10);
            Print(10,20);
            Print("랑방");
        }
    }
}

->

숫자는 10 입니다.
숫자는 10,20 입니다.
입력내용은 랑방 입니다.

객체지향과 클래스

클래스

//클래스 

var random = new Random();

while (true)
{
    int dice_number = random.Next(1, 7);
    Console.WriteLine("주사위를 굴리시겠습니까? 1. 예 2. 아니오");
    int i = Convert.ToInt32(Console.ReadLine());

    if (i == 1)
    {
        Console.WriteLine($"주사위 값 : {dice_number}");
    }
    else if (i == 2)
        break;
    else
    {
        Console.WriteLine("1 또는 2를 입력하세요.");
        Console.WriteLine("---------------------");
    }
}

->

주사위를 굴리시겠습니까? 1. 예 2. 아니오
1
주사위 값 : 5
주사위를 굴리시겠습니까? 1. 예 2. 아니오
1
주사위 값 : 2
주사위를 굴리시겠습니까? 1. 예 2. 아니오
1
주사위 값 : 4
주사위를 굴리시겠습니까? 1. 예 2. 아니오
1
주사위 값 : 1
주사위를 굴리시겠습니까? 1. 예 2. 아니오
3
1 또는 2를 입력하세요.
---------------------
주사위를 굴리시겠습니까? 1. 예 2. 아니오
2

인스턴스명

  • MyClass.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Csharp_1
{
    internal class MyClass
    {
        public string name;
        public void SetName(string n)
        {
            name = n;
        }
        public void Greeting()
        {
            Console.WriteLine($"Hello {name}!");
        }
    }
}
  • Program.cs
using Csharp_1;

MyClass myClass = new();
myClass.SetName("알지오");
myClass.Greeting();

myClass.SetName("Alzio");
myClass.Greeting();

myClass.name = " ";
myClass.Greeting();

->

Hello 알지오!
Hello Alzio!
Hello  !

  • Member.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Csharp_1
{
    internal class Member
    {
        string id = "";
        string password = "00000000";
    
        public void NewMember(string i, string p)
        {
            id = i;
            password = p;
        }

        public void FindPassword(string i)
        {
            if(i == id)
            {
                string shortPassword = password.Substring(0,4);
                Console.WriteLine($"비밀번호는 {shortPassword}**** 입니다.");
            }
            else
            {
                Console.WriteLine("해당 아이디를 찾을 수 없습니다.");
            }
        }
    }
}
  • Program.cs
using Csharp_1;

Member member = new();
member.NewMember("alzio", "12345678");
member.FindPassword("alzio");

->

비밀번호는 1234**** 입니다.

profile
하루하루 기록하기!
post-custom-banner

0개의 댓글