Object 형식
어떤 형식의 데이터라도 object에 담아 처리할 수 있다. (int, long, char, bool, string...)
ex) object a=123; object b=3.14f; object c = true; object d = "hello";
나머지 연산자 %
실수에 나머지 연산자 % 를 쓰는 건 추천하지 않는다.
static void Main(string[] args) { Console.WriteLine(5.0 % 2.2); }
정수라면 실행 결과로 2를 출력하겠지만 여기서는 0.6을 출력한다.
5.0 - (2.2 * 2) = 0.6
문자열
문자열은 다음과 같이 더할 수 있다.
하지만 문자 (한 글자)는 더할 수 없고, 문자를 숫자로 생각해 더하게 된다.
문자를 연결하고 싶다면 ' '로 감싸지말고 문자열을 뜻하는 " " 로 감싸야한다.
static void Main(string[] args) { Console.WriteLine("가나다" + "라마" + '바'); Console.WriteLine("안녕하세요" [0]); Console.WriteLine("안녕하세요" [2]); }
출력 결과 :
가나다라마바
안
하
숫자와 문자열을 더하면 자동으로 문자열로 형변환된다.
하지만 숫자와 '문자'를 더하면 아스키 코드값으로 출력된다.
static void Main(string[] args) { Console.WriteLine(2 + '3' + "4"); Console.WriteLine(2 + '3' + '4'); }
출력결과 :
534
105
- static void Main(string[] args)
- {
- Console.WriteLine(bool.Parse("True"));
- Console.WriteLine(bool.Parse("true"));
- Console.WriteLine(bool.Parse("test"));
- }
bool은 true, false 데이터를 다루며 1바이트 크기의 type이다. (1비트만으로 표현가능하지만 컴퓨터가 기본적으로 바이트 단위를 사용하므로)
오버플로우 확인하기
static void Main(string[] args) { int num = int.MaxValue; Console.WriteLine(num+1); }
오버플로우를 일으키며 -2147483648 이라는 값을 출력한다.
다음과 같이 double로 형변환하면 해결 가능하다.
static void Main(string[] args) { int num = int.MaxValue; Console.WriteLine((double)num+1); }
혹은 num을 선언할 때 unsigned 자료형으로 선언해 해결할 수도 있다.
uint num = int.MaxValue;
음수의 음수?
- static void Main(string[] args)
- {
- Console.WriteLine(-(-1));
- int output = int.MinValue;
- Console.WriteLine(-(output));
- Console.WriteLine(-(-2147483648));
- }
위 소스 25번째 줄에서 다음과 같은 오류를 일으킨다.
checked 모드에서 컴파일하면 작업이 오버플로됩니다.
static void Main(string[] args) { Console.ReadKey(); }
public static ConsoleKeyInfo ReadKey(); public static ConsoleKeyInfo ReadKey(bool intercept);
지정된 크기의 배열 생성
값을 넣지않고 초기화하면 기본 값으로 공간이 채워진다. (숫자 자료형은 0, 문자열 자료형은 빈 문자열, 객체는 null로 초기화)
static void Main(string[] args) { int[] intArray = new int[100]; Console.WriteLine(intArray[0] + "\n" + intArray[99]); }
배열 요소를 마지막 요소에서부터 출력
static void Main(string[] args) { int[] intArray = { 1, 2, 3, 4, 5, 6 }; for (int i = intArray.Length - 1; i >= 0; i--) Console.Write(intArray[i] + " "); }
출력결과 : 6 5 4 3 2 1
List 클래스를 이용한 가변적인 크기의 배열 생성
List<> 에서 <>안에는 Generic으로 어떤 자료형인지를 미리 알려준다.
static void Main(string[] args) { Random random = new Random(); List<int> list = new List<int>(); for (int i = 0; i < 6; i++ ) list.Add(random.Next(1, 100)); for (int i = 0; i < list.Count; i++) Console.Write(list.ElementAt(i) + " "); }
List활용예제
이름, 학점, 영어 입력받고 학점 4.0 이상이고 영어점수가 900점 이상인 리스트를 출력
C#에서 클래스는 앞글자 대문자, 변수명은 소문자를 쓴다. (절대 규칙은 아니지만 권장)
이외의 네이밍 규칙 http://zepeh.tistory.com/115
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Collections;
- namespace SScore
- {
- class Student
- {
- public string name;
- public double grade;
- public int eng;
- }
- class Program
- {
- static void Main(string[] args)
- {
- List<Student> list = new List<Student>();
- for (int i = 0; i < 3; i++)
- {
- Student s = new Student();
- Console.Write("이름:");
- s.name = Console.ReadLine();
- Console.Write("학점:");
- s.grade = double.Parse(Console.ReadLine());
- Console.Write("영어:");
- s.eng = int.Parse(Console.ReadLine());
- list.Add(s);
- }
- for (int i = 0; i < list.Count; i++)
- {
- if (list.ElementAt(i).grade < 4.0 || list.ElementAt(i).eng < 900)
- break;
- Console.WriteLine(list.ElementAt(i).name + "," +
- list.ElementAt(i).grade + "," +
- list.ElementAt(i).eng);
- }
- }
- }
- }
namespace Generic { class Wanted<T, U> { public T value; public U value2; public Wanted(T value, U value2) { this.value=value; this.value2 = value2; } } class Program { static void Main(string[] args) { Wanted<string, int> StringAndInt = new Wanted<string, int>("String", 32); Console.WriteLine(StringAndInt.value + "\n" + StringAndInt.value2); } }
class Sign { public int this[int i] { get { return (-i); } } } class Program { static void Main(string[] args) { Sign sign = new Sign(); Console.WriteLine(sign[15]); } }
'Study > C#' 카테고리의 다른 글
C# 인터페이스 (0) | 2017.04.07 |
---|---|
C# 클래스, 메소드 (0) | 2017.04.04 |
headfirst c#-wpf (0) | 2016.11.19 |
5/27 업무일지 c#학생성적관리(콘솔) (0) | 2016.05.27 |
c# 클래스 복습2 (0) | 2016.05.23 |