이번 글에선 입출력, 조건문, 반복문을 사용한 간단한 계산기 프로그램을 만들어보도록 하겠습니다. 코드를 보고 따라하기 전에 자신이 먼저 만들어보는 것도 나쁘지 않으니 해보시길 바랍니다.
사용자로부터 숫자, 연산자, 숫자순서로 입력받아서 결과를 출력하고 계산기를 종료할지 말지 입력값을 받아 사용자가 y를 입력하면 종료하고 n을 입력하면 계속 진행합니다. 그런데 코드를보시면 나눗셈을 하는 코드에서 (float)이란 걸 보실 수 있습니다. 이것은 형변환을 통해서 num1의 자료형을 float형으로 바꿔서 계산하는 것입니다. 형 변환이란?그렇다면 이렇게 하는 이유는 무엇이며, 형 변환이라는 것은 대체 무엇이냐? 먼저 형 변환이란 어떤 변수의 자료형을 다른 자료형으로 변경하는 것입니다. 기본적으로 자료형의 크기가 작은 쪽에서 높은 쪽으로 형 변환하는 경우에는 형 확장이라 하고, 반대의 경우에는 형 축소라고 이야기합니다. 형 변환 시 자료형의 상하관계는 다음과 같습니다. 이 형 변환은 다시 암시적 형 변환과 명시적 형 변환으로 나뉘게 되는데요, 암시적 형 변환이란 컴파일러가 알아서 변수의 자료형을 적절하게 다른 자료형으로 바꾸어주는 것입니다. 이를 자동 형 변환이라고도 말합니다. 또한 명시적 형 변환이란 사용자가 명시적으로 바꿀 자료형을 지정하여 바꾸는 것을 이야기합니다. 간단한 예로 int형 변수 a를 선언하고 double형 변수 b에 a의 값을 대입하면 a의 값이 double형으로 형 변환되어 변수 b에 들어가게 됩니다. 이것이 암시적 형변환힙니다. 데이터의 손실에 주의하자여기서 주의해야 할 점은 형 확장의 경우에는 암시적 형 변환이 가능하지만 형 축소의 경우에는 사용자가 자료형을 정해주는 명시적 형 변환을 해주어야 합니다. 그 이유는 형 축소시에는 데이터의 손실이 일어날 수 있기 때문인데요, 간단하게 물통으로 예를 들어보겠습니다. 큰 물통과 작은 물통이 있을 때, 큰 물통에 있는 물을 작은 물통으로 옮겨 담을 때 그 물이 작은 물통의 허용량을 넘으면 물이 넘치게 될 것입니다. 이것이 바로 데이터 손실입니다. 따라서 프로그래머는 이 물을 옮겨 담아도 문제가 없다고 컴파일러에게 명시적으로 알려주어야 합니다. 명시적 형 변환의 기본적인 사용법은 (자료형)변수 또는 (자료형)값 의 형태로 사용할 수 있습니다. 예를 들어 정수 15를 (float)15의 형태로 형 변환하면 값은 15.0이 됩니다. 그러면 이제 위의 코드로 돌아가서 나눗셈에서 왜 형 변환을 사용하였는지 설명해보겠습니다. 본래 C언어에서 나눗셈을 수행해서 결과를 실수로 표현하기 위해선 피연산자가 실수여야만 합니다. 그런데 형 변환을 하지 않으면 정수끼리 나눗셈을 하기 때문에 값이 제대로 구해지지 않습니다. 이는 컴퓨터에서 정수를 저장하는 방법과 실수를 저장하는 방법이 전혀 다르기 때문입니다. 따라서 명시적 형 변환을 통해 num1을 float형으로 바꾸어줌으로써 피연산자를 실수로 변경한 것입니다. 굳이 둘 다 바꿀 필요 없이 하나만 실수형으로 바꾸어주면 나눗셈 계산이 정상적으로 가능합니다. 위와 같은 계산식에서 복수의 변수중 하나만 실수형으로 바꾸게 되면, 나머지 변수들은 컴파일러가 알아서 암시적 형 변환을 해주기 때문입니다. 하지만 나눗셈의 결과를 정수로 표현하고 싶을 때(몫만 사용할 때)에는 굳이 형변환을 안 하셔도 됩니다. 이 정도로 계산기 구현과 형 변환에 대한 설명은 마치도록 하겠습니다. 계산기에 기능을 추가해서 코딩을 해보시는 것도 좋을 것 같으니 해보시기 바랍니다. 다음 글에선 사용자 정의 함수에 대해서 알아보도록 하겠습니다. 감사합니다. [도전 12일차] 아래의 화면과 같이 출력되는 (사칙연산)계산기 프로그램을 작성하시오.[1일 1코딩] 사칙연산 계산기 만들기 : C언어 도전 12일차코드) [1일 1코딩] 사칙연산 계산기 만들기 : C언어 도전 12일차[1일 1코딩] 도전 12일차 C언어 : 계산기 프로그램 |