본문 바로가기
C#

[이것이 C#이다. 3판] Chapter 03 데이터 보관하기 연습문제

by 돌맹96 2023. 7. 16.
728x90
반응형

연습문제

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

사각형의 너비를 입력하세요.
30
사각형의 높이를 입력하세요.
40
사각형의 넓이는 : 1200
namespace RectArea
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("사각형의 너비를 입력하세요.");
            string width = Console.ReadLine();

            Console.WriteLine("사각형의 높이를 입력하세요.");
            string height = Console.ReadLine();

            // 이곳에 사각형의 넓이를 계산하고
            // 출력하는 루틴을 추가하세요.
        }
    }
}

문제답

namespace RectArea
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("사각형의 너비를 입력하세요.");
            string width = Console.ReadLine();

            Console.WriteLine("사각형의 높이를 입력하세요.");
            string height = Console.ReadLine();


            // 이곳에 사각형의 넓이를 계산하고
            // 출력하는 루틴을 추가하세요.

            int area = int.Parse(width) * int.Parse(height);
            Console.WriteLine("사각형의 넓이는 : " + area);
        }
    }
}

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

 

int a = 7.3;
float b = 3.14;
double c = a * b;
char d = "abc";
string e ='한';

int a = 7.3의 경우 명시적 캐스팅을 이용해야한다.

int a = (int)7.3;

float b = 3.14;의 경우 F를 붙여야한다.

float b = 3.14F;

double c = a*b; 은 문제가 없다.

char d = "abc"; 의 경우 문자열이기 때문에 타입을 변경해야한다.

string d = "abc";

마지막의 경우 char로 변경해야한다.

char e = '한';

03 값 형식과 참조 형식의 차이는 무엇인가요?

값 형식의 경우 데이터를 스택(Stack)에 직접 저장하게 된다. 이러한 형식에는 int, float, char 기본 데이터 형식이 포함된다. 값 형식은 변수가 실제 값을 보유하며, 변수 사이에 할당 또는 전달이 이루어질 때 값이 복사가 된다.

 

참조형식의 경우 데이터를 힙에 저장하고 스택에는 데이터의 주소가 저장된다. 클래스, 배열, 인터페이스의 경우 참조 형식에 속한다. 실제 데이터에 대한 참조를 가지며, 변수 간에 할당 또는 전달이 이루어질때 참조만 복사가 된다. 

 

04 박싱과 언박싱을 설명하세요.

박싱은 값 형식을 참조 형식으로 변환하는 과정이다. 값의 형식을 인스턴스를 힙에 할당하고 해당 인스턴스를 참조 형식인 object 형식으로 래핑한다. 이렇게 박싱된 값 형식은 참조 형식 변수에 할당하거나 매개변수로 전달할 수 있다.

 

언박싱은 반대로, 박싱된 값 형식을 다시 원래의 값 형식으로 변환하는 과정이다. 박싱된 값을 다시 원래의 값 형식으로 추출하기 위해서는 명시적인 캐스팅이 필요하다. 이때, 값 형식으로의 변환은 데이터를 힙에서 스택으로 복사하는 과정을 거친다.

 

05 다음 코드를 컴파일한 후의 a와 b는 각각 어떤 데이터 형식이겠습니까?

var a = 2020;
var b = "double";

a는 정수 형식 b는 문자열 형식

a : int

b : string

728x90
반응형