[잼민이도 이해하는 C언어 강의] 3. 자료형과 변환문자 / #자료형, #변환문자
안녕하세요
정고리즘의 정고쌤입니다.
지난 강의에서는
C언어의 기본적인 형태와 구조에 대해서,
그리고 printf라는 출력함수에 대해서 알아보았습니다.
오늘은 지난 강의에 이어
정말 정말 중요한
심지어 C언어가 꼭 아니더라도
코딩을 하는 사람들 모두에게 정말 중요한
기본 개념인 자료형이라는 것에 대해서
알아보도록 하겠습니다.
1. 자료형 |
2. 변환 문자 |
강의 진행 순서입니다.
짧지만 코딩에 있어서 정말 중요한 개념입니다.
1. 자료형
자료형이란 컴퓨터에 존재하는 데이터들을
분류하기 위한 기준이라고 생각하시면 됩니다.
'옷'에 비유해서 생각해보겠습니다.
세상에는 수 많은 종류의 옷들이 존재합니다.
상의, 하의, 아우터, 양말, 속옷 등등...
여러분들이 가지고 계신 옷들을 일반적으로
서랍이나 옷장에 보관을 하실텐데요.
옷들을 보관할 때 마구잡이로 보관을 하게되면
필요한 옷을 바로바로 찾기 어려울겁니다.
그래서 보통 저희는
상의는 상의끼리.
하의는 하의끼리.
속옷은 속옷끼리.
분류를 정해서 보관을 하죠.
컴퓨터도 마찬가지입니다.
여러가지 종류의 데이터들이 마구잡이로 섞여있으면
그때 그때 필요한 데이터를 찾기도 어렵고,
그때 그때 필요한 연산을 하기도 어려울 것 입니다.
따라서 자료형이라는 분류 기준이 필요합니다.
자료형은 아래와 같습니다.
설명 | 예시) | |
정수 | 부호(+,-)와 0~9로 이루어진 수 | 100, -10, 0, 1, 15, 32, -10000 등 |
실수 | 부호(+,-)와 0~9와 소숫점(.)으로 이루어진 수(소수) | 1.5, 0.5, -3.14, -0.1, 1.0, -1.0 등 |
문자 | 알파벳(A~Z), 숫자(0~9), 특수기호 등 개별 문자 한 글자, ' '(작은 따옴표)로 표기. | 'A', 'a', 'B', '1', '0', '#', '?' 등 |
문자열 | 문자들로 이루어진 데이터, " "(큰 따옴표)로 표기. | "Hello", "apple", "123", "a" 등 |
사실 더 많은 종류의 자료형이 존재하지만
이 강의의 취지와 목적 상
더 많은 종류는 아직 학습하지 않겠습니다.
내용이 어렵진 않은데,
많이 헷갈려 하시는 부분들이 있습니다.
첫번째로 실수 부분입니다.
제가 작성해둔 예시를 잘 보시면
1.0이 실수 예시에 들어있는 것을 보실 수 있습니다.
"아니, 1이나 1.0이나 둘 다 똑같은 1 아닌가요?"
맞습니다.
수학적으로는 말이죠.
그러나 컴퓨터에서는 1과 1.0은 다른 데이터로 분류합니다.
이 차이는 작아보이지만 연산 방법이나 데이터 보관 방법 등
아주 큰 차이가 있으니 꼭 주의해서 기억해주시기 바랍니다.
그리고 또 문자에서도 어려워 하시는 부분들이 있습니다.
문자는 키보드로 표기할 수 있는 모든 글자 하나 하나라고 생각하시면 됩니다.
그러나 키보드에는 분명 숫자도 존재합니다.
"아니, 숫자는 아까 정수라면서요?"
숫자는 기본적으로 정수이지만
1자리 정수는 문자로 표기를 할 수도 있습니다.
그래서 이를 구분하기 위해
문자에는 반드시 ' '(작은 따옴표) 기호로 표기를 해야합니다.
1자리 정수와 구분하기 위함도 있지만
' ' 기호로 문자를 표기하게 되면
많은 오류 사항을 방지할 수 있기에 C언어를 비롯한 대부분의 프로그래밍 언어에서는
문자를 ' ' 기호를 통해 표기하고 있습니다.
마지막으로 문자열에서도 헷갈려 하시는 부분들이 있습니다.
문자열은 " " (큰 따옴표)로 표기한다고 했었습니다.
위 문자열 예시를 보시면 "a"와 같이 한 글자로 된
문자열도 있음을 확인할 수 있습니다.
"아니, 글자 1개는 문자 자료형으로 분류한다면서요?"
맞습니다.
그러나, 문자열은 문자가 존재할 수도 있고,
한 개만 있을 수도 있고,
여러개가 있을 수도 있습니다.
"", "a", "aaaaa" 모두 문법적으로 오류가 없는 문자열 데이터입니다.
이 내용은 추후에 배열 강의에서
그 이유를 확인할 수 있을겁니다.
2. 변환 문자
이렇게 자료형에 대해서 알아보았습니다.
지난 강의에서 알아보았던 printf 출력 함수에 대해서
다시 한번 더 자세하게 살펴보고 가겠습니다.
눈치가 빠른 분들이라면 알 수 있을 겁니다.
printf가 출력하는 자료형은 문자열이라는 사실을요.
그렇다면 자연스레 이런 의문점이 생깁니다.
"그럼 문자열을 제외한 자료형들은 출력할 수 없나요?"
네. 출력할 수 없습니다.
그러나, 문자열을 제외한 나머지 자료형도
출력을 가능하게 만들어 주는 것이 있습니다.
그것이 바로 변환 문자입니다.
(다른 말로는 서식 문자, 서식 지정자 라고도 부릅니다.)
변환 문자는 그 단어에서도 알 수 있듯이
원래는 출력이 안되지만
출력이 가능하도록 포멧을 변환해주기 위해 사용되는 문자입니다.
아래 코드를 한번 작성해보겠습니다.
#include<stdio.h>
int main(void)
{
printf(100);
return 0;
}
컴파일하고 실행해보면
당연히 에러가 나면서 컴파일되지 않습니다.
(당황할 필요없습니다.)
100은 정수이기 때문입니다.
그렇다고 printf("100"); 과 같이 " "로 표기를 하게 되면
실행은 되지만 이제는 더 이상 정수가 아니게 되어버립니다.
"100"은 문자열이죠.
"그냥 원하는 내용이 출력만 되면 그게 정수든 문자열이든 상관 없는 거 아님?"
라고 생각하실 수도 있습니다.
그러나 100이라는 값이 문자열일 때와 정수일 때의 차이는 큽니다.
추후 강의를 통해 천천히 알아갈 수도 있겠지만
잠깐 미리 말씀드리자면
기본적으로 문자열은 연산이 불가능합니다. (C언어 기준)
"100" + "2" 는 C언어에서 불가능한 표현입니다.
그리고 이게 컴파일이 된다고 하더라도 여러분들이 생각하는
원하는 결과가 나오지 않습니다.
그럼 이제 변환 문자에 대해서 알아봅시다.
변환 문자 | 사용 예시) | |
정수 | %d | printf("%d",100); |
실수 | %lf | printf("%lf",3.14); |
문자 | %c | printf("%c",'A'); |
문자열 | %s | printf("%s","Hello"); |
변환 문자는 printf() 출력함수에서
" " 내부에 작성해주어야합니다.
그리고 " " 뒤에 ,(콤마)와 함께 출력하고자 하는 데이터를 적어줍니다.
예를 들어서 10을 출력하고 싶다면
10의 자료형은 정수이기 때문에
printf("%d",10); 과 같이 작성합니다.
그러면 정수 데이터인 10이 %d가 있던 자리에 대신 출력되면서
10을 출력할 수 있게 됩니다.
"근데 문자열은 변환 문자가 필요없는 거 아님?"
위 내용에 대한 답변은 나중으로 미루겠습니다.
다음 강의인 변수 강의에서
이 답변을 들을 수 있을 것 입니다.
그럼 이번에는 아래의 코드를 작성해봅시다.
#include<stdio.h>
int main(void)
{
printf("정수를 출력 : %d\n",100);
printf("실수를 출력 : %lf\n",3.14);
printf("문자를 출력 : %c\n",'A');
printf("문자열을 출력 : %s\n","Hello");
return 0;
}
위 코드를 컴파일 하여 실행하면
이러한 결과를 확인할 수 있습니다.
위 예시를 통해 알 수 있듯이 변환 문자는
다른 내용과 섞어서 출력하는 것도 가능합니다.
따라서 응용하면 아래와 같은 내용도 가능합니다.
#include<stdio.h>
int main(void)
{
printf("나이 : %d\n몸무게 : %lf\n",21,75.4);
return 0;
}
이렇게 두 가지 이상의 변환 문자를
사용하는 것도 가능합니다.
이때 주의해야 될 것은 순서입니다.
printf에 %d가 먼저 왔고, %lf가 뒤에 왔습니다.
21은 정수이고, 75.4는 실수입니다.
따라서 21이 먼저 작성되어야하고,
75.4는 뒤에 있어야합니다.
printf("나이 : %d\n몸무게 : %lf\n",75.4,21);
와 같이 표현하게 되면 컴파일은 가능하지만
잘못된 결과가 출력됩니다.
출력 포멧이 알맞지 않기 때문입니다.
마지막으로 알아볼 것은 %lf입니다.
%lf는 출력할 소숫점 이하 자릿수를 지정할 수 있습니다.
이전 코드의 경우 %lf로 출력하게 되면
뒤에 00000을 출력하게 됩니다.
소숫점 아래에는 무한한 0이 있다고 다들 수학 시간에 배운 적이 있을 것 입니다.
%lf는 소숫점 제한을 따로 두지 않으면
소숫점 뒤로 0을 5개까지 출력하도록 설계되어 있습니다.
이를 출력에서 제한하고 싶을 때에는
아래와 같이 표현합니다.
#include<stdio.h>
int main(void)
{
printf("소숫점 1번째 자리까지 : %.1lf\n",3.141592);
printf("소숫점 2번째 자리까지 : %.2lf\n",3.141592);
printf("소숫점 3번째 자리까지 : %.3lf\n",3.141592);
printf("소숫점 0번째 자리까지 : %.0lf\n",3.141592);
return 0;
}
%lf에서 %와 lf 사이에
%.(숫자)lf 와 같은 방식으로 작성하면
소숫점 아래 출력할 자릿수를 지정하는 것이 가능합니다.
%.1lf의 경우에는 소숫점 아래 1번째자리까지 출력하겠다는 말이며
2번째 자리에서 반올림하여 출력하게 됩니다.
%.0lf는 소숫점 1번째자리에서 반올림하여
정수 형태로 출력하겠다는 말입니다.
다양한 내용을 출력해보면서
변환 문자에 익숙해져보도록 합시다.
오늘은 자료형과 변환 문자에 대해서 알아보았습니다.
다음 강의에서는 변수에 대해서 알아보겠습니다.
'프로그래밍 > C언어' 카테고리의 다른 글
[잼민이도 이해하는 C언어 강의] 6. 연산자 / #산술연산자, #관계연산자, #논리연산자 (0) | 2022.04.15 |
---|---|
[잼민이도 이해하는 C언어 강의] 5. 입력하기 / #scanf (3) | 2022.04.09 |
[잼민이도 이해하는 C언어 강의] 4. 변수란? / #변수 (1) | 2022.04.08 |
[잼민이도 이해하는 C언어 강의] 2. 출력하기 / #printf (0) | 2022.04.08 |
[잼민이도 이해하는 C언어 강의] 1. C언어 처음 시작하기, C언어 컴파일러 설치 방법 (0) | 2022.04.08 |