1. 다음 코드에서 잘못된 부분을 찾고, 그 이유를 설명하라.

...더보기
int a = 7.3; // 컴파일 에러
float b = 3.14; // 컴파일 에러
double c = a * b; // a,b가 위에서 선언되어 있으므로 문제 없음
char d = "abc"; // 컴파일 에러
string e = '한'; // 컴파일 에러

1-1. int는 정수형식이기때문에 소수점 부분이 절삭됩니다. c#에서는 컴파일 에러를 일으킵니다.

int a = (int)3.14;
Console.WriteLine(a);

이런 방식으로 강제해줘도 소수점 부분은 절삭되고 3이라고만 출력됩니다.

 

1-2. float은 소수점 뒤에 f를 붙여야합니다.

 

float b = 3.14f;
var bb = 3.14;
Console.WriteLine("{0}", bb.GetType()); // bb의 타입을 가져옴
// 출력 결과 System.Double 이라고 출력됨

 f를 붙이지 않고 3.14 라고만 쓰면 기본적으로 double로 인식하게 됩니다. 2,3번 라인의 var bb를 통해 테스트 한것 (p.60 참고)

 

1-3. char형식은 문법적으로 ' '을 사용해야합니다.

또한 ' '을 사용한다고 해도 너무 많은 문자를 담고있습니다.

char d = 'abc'; // 컴파일 에러
Console.WriteLine(d);

 

char 형식(2바이트 크기)은 'a', 'b', 'c','가','나','다' 와 같이 한글자를 담을 수 있습니다. 

영어는 한글자에 1바이트, 한글은 2바이트 입니다. 그러나 영문도 한글자만 담을 수 있습니다.

char a = 'a';
char b = '가';

 

1-4. string형식은 문법적으로 " "을 사용해야합니다. ex : "한"

string a = "한";
string b = "스트링";

2. 값 형식과 참조 형식의 차이점은?

...더보기

값 형식은 스택 영역의 메모리에 데이터가 저장된다.

참조는 해당 데이터는 힙 영역의 메모리에 저장되고, 스택 영역의 메모리에는 데이터가 저장되어 있는 힙 메모리의 주소가 저장된다. (p.45)

3. 박싱과 언박싱을 설명하라.

...더보기

박싱 : object 형식(참조 형식)에다가 (값 형식)의 데이터를 할당하려는 시도가 이루어지면 object 형식은 해당 데이터를 힙 영역에 저장함.

언박싱 : 박싱되어있는 값(힙 영역)을 꺼내 값 형식 변수(스택 영역)에 저장하는 과정

4. 다음과 같이 사용자로부터 사각형의 너비와 높이를 입력받아 넓이를 계산하는 프로그램을 완성하세요. 다음 코드 중 주석 부분을 바꾸면 됩니다.

 

...더보기

사각형의 너비를 입력하세요.

30

사각형의 높이를 입력하세요.

40

사각형의 넓이는 : 1200

using System;
namespace RectArea {
    class MainApp
    {
        public static void Main(){
            Console.WriteLine("사각형의 너비를 입력>");
            string width = Console.ReadLine();
            Console.WriteLine("사각형의 높이를 입력>");
            string height = Console.ReadLine();
			// 이 곳에 사각형의 넓이를 계산하고
			// 출력하는 루틴을 추가하세요.
        }
    }
}

문제점

1. string 방식끼리 곱할 수 없습니다.

            Console.WriteLine("사각형의 너비를 입력>");
            string w = Console.ReadLine();
            Console.WriteLine("사각형의 높이를 입력>");
            string h = Console.ReadLine();
            string area = w * h; // 컴파일 에러 

 

2. ReadLine() 함수 사용

처음에 왜 string을 사용했는지 몰랐습니다.

그냥 너비와 높이를 double이나 int형태로 받는게 낫지 않을까 할 수 있겠지만

ReadLine()함수를 사용하고자 한다면  그럴 수 없습니다.

ReadLine()함수는 기본적으로 string을 반환하기 때문입니다. 

(https://docs.microsoft.com/ko-kr/dotnet/api/system.console.readline?view=netframework-4.8)

 

            Console.WriteLine("사각형의 너비를 입력>");
            double w = Console.ReadLine(); // 컴파일 에러

이런 방식은 오류가 나므로 string으로 입력받고 이를 숫자 형태로 바꿔줘야 합니다.

 

 

해답 :

using System;
namespace RectArea {
    class MainApp
    {
        public static void Main()
        {
            Console.WriteLine("사각형의 너비를 입력>");
            string w = Console.ReadLine();
            Console.WriteLine("사각형의 높이를 입력>");
            string h = Console.ReadLine();
            double width = double.Parse(w);
            double height = double.Parse(h);
            double area = width * height;
            Console.WriteLine("넓이는 : {0}", area);
        }
    }
}

Parse() 함수를 이용해 string 문자열을 double형식으로 바꿔주었습니다. (p.76 참고)

'Computer Language > C#' 카테고리의 다른 글

이것이 C#이다 공지사항  (0) 2019.08.18

BELATED ARTICLES

more