[C언어] #2 기본 자료형과 변수 선언하는 방법
1.기본 자료형 외우기
C언어를 제대로 배우기에 앞서 기초적으로 알아야 할 것이 있습니다.
바로 이 표를 통해 형식들을 외우는 것인데요. 옆에 숫자 범위까지 외울필요는 없고 정수형에는 뭐가있고 몇바이트를 쓰는지 정도만 알아두셔도 됩니다^^ 아직 우리는 개발자 단계라기보단 배우는 단계기 때문에 메모리 최적화 같은거까지 신경쓰기에는 무리가 있기 때문이죠.
§ unsigned 라는것은 부호가 없다라는 의미로 (-x)~(+x)의 범위 대신 0~(+2x) 범위를 쓴다는걸 의미합니다.
§ 우리가 앞으로 주로 쓸 것들 입니다. 꼭 외워주세요★
문자형-char //문자하나만 저장가능합니다.
정수형-int
논리형-bool //이건 C++에서 쓰입니다.
실수형-double
2.변수 선언하는 방법
변수 선언은 이미 앞에서 한번 해보았죠?
왜 앞에서 자료형을 배웠는지 알겠나요??
정수형 말고 다른것도 응용해서 선언해보면
double b=20.0;
char c='A' ;
§int 의경우 그냥 정수를 써주시면 됩니다.
§double 의 경우 실수이므로 정수형태 숫자일지라도 저장값에서 뒤에 .0을 붙여 실수형 숫자임을 나타내줍니다.
§char 의 경우 ' '사이에 한문자를 넣어 저장값을 입력해줍니다.
※변수선언할때 알아야할점
1) 변수를 선언할때 변수의 이름은 달라야합니다. 나중에 지역변수와 전역변수에 대해 배우시면 변수가 언제 생성되고 소멸되는지 확실히 배울수 있기 때문에 그때까지는 이름을 모두 다르게 선언해줍시다.
2) 변수 이름은 보통 자신이 이 변수는 무슨 역할을 하는 변수이다! 라는걸 알 수 있게 선언해줍니다. ex) 이름을 선언할때 int number=10;
3) 변수 이름을 쓸때 소문자와 대문자가 구분됩니다.(int a와 int A는 다른 변수가 됩니다.)
4) 변수를 선언할때 보통 사이드바 _를 쓰는경우가 많습니다. ex)int number_lotto=10;
5) 변수선언할때 같은 변수자료형일경우 int a=10,b=20,c=30; 이런식으로 여러개를 한번에 선언할수 있습니다.
6) 변수값은 초기에 안써줘도 됩니다. ex) int a; 하지만 값을 다른 곳에서 a=20; 이런식으로 정해주지 않으면 기존에 있던 쓰레기값이 있을수 있다는걸 주의해주세요. (고로 값이 없는 경우 int a=0;식으로라도 초기화해주자)
★★★ 변수를 선언하는 이유
변수를 선언하는 이유는 자신이 쓸 변수에 해당되는 크기의 저장공간을 할당 받기 위해서입니다. 이해하기 어려우시다고요? 예시를 들어 int a; 가 있습니다. 이 구문을 해석해보면 " 메모리 공간의 이름이 a라는걸 쓸껀데 10진수 정수의 저장을 위한 메모리 공간(4bytes)를 할당해줘!" 라고 컴퓨터에게 말을 하는것과 같습니다.
3.printf안에 변수 출력하기
시작하기에 앞서 int인 정수형은 %d로 받아준다고 했어요.
다른 double, char은 당연히 다르겠죠?
각각 double은 %f, char은 %c 를 써주어 출력해줍니다.
이제 printf에서 자주 쓰는 %붙은 녀석들을 외워줍시다!
- %c : char 문자형, 문자하나만 출력할때 씁니다.
- %s : 문자열(문장)을 출력할때 씁니다. 나중에 배열을 배우면 씁니다.
- %p : 포인터값 16진수를 출력할때 씁니다.
- %d : int 정수형 10진수, 부호있는 정수를 출력할때 씁니다.
- %u : unsigned int, int 정수형, 10진수 부호없는 정수를 출력할때 씁니다.
- %f : float, double 실수형, 부동소수점 실수 소수 표현 무한수를 표현할 때 소문자 표현
- %x : 16진수 정수 소문자 0 ~ 9,a(10),b(11),c(12),d(13),e(14),f(15)로 출력할때 씁니다.
- %X : 16진수 정수 대문자 0 ~ 9,A,B,C,D,E,F로 출력할때 씁니다.
- %o : 8진수 정수 0 ~ 8로 출력할때 씁니다.
- %% : %을 출력할때 %%을 써주시면 출력이 됩니다.
주로쓰는건 %c, %s, %d, %f 정도구요 %x, %o도 가끔 쓰니까 요것들은 꼭 외워줍시다.
예제1
§ int, double, char 크기 확인해보기
1 2 3 4 5 6 7 8 | int main() { printf("int의 크기 : %d\n", sizeof(int)); printf("double의 크기 : %d\n", sizeof(double)); printf("char의 크기 : %d\n", sizeof(char)); return 0; } |
sizeof는 해당 데이터의 크기를 반환해주는 함수입니다. sizeof(자료형or 변수명); 을 써주시면 됩니다. 위에 써져있는대로 int, double, char이 각각 4, 8, 1가 잘 출력 되었네요.
예제2
§ 정수형10진수, 8진수, 16진수 표현해보기
1 2 3 4 5 6 7 8 9 10 | #include <stdio.h> int main() { int num1 = 20; printf("10진수 : %d\n8진수 : %o\n16진수 : %x\n", num1, num1, num1); return 0; } |
다들 진수 계산할줄 아실거라 생각하고 진행하겠습니다. 모르시면 인터넷에서 진수 계산법을 쳐보시면 되겠습니다.
먼저 %d를 쓰면 10진수인 20 그대로 나옵니다.
%o의 경우 8진수가 나옵니다 2x8+4=20이니까 제대로 출력됬죠?
%x의 경우 16진수가 나옵니다 1x16+4=20이니까 제대로 출력됬네요.
※8진수는 024, 16진수는 0x14 로 변수값을 저장할때 써주면 됩니다 앞에 0, 0x가 붙는게 8진수,16진수라는걸 알려주는 거에요.
예제3
§ 정수형 실수형 문자형 출력해보기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #include <stdio.h> int main() { int num1 = 20; double num2 = 10.5; float num3 = 10.5f; //float형임을 알려주기위해 뒤에 f를붙임 char character = 'A'; printf("num1=%d\n", num1); printf("num2=%f\n", num2); printf("num3=%f\n", num3); printf("character=%c\n", character); return 0; } |
여기서 주의할점은 double, float를 쓸땐 10을 쓰더라도 10.0 으로 뒤에 실수임을 알려줘야 한다는것! 그리고 float 의경우 맨뒤에 f를 붙여 float형이라는걸 알려줘야합니다.
각각%d %f %f %c 의 자리 대신 변수 값이 출력된걸 볼 수 있습니다.
예제4
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #include <stdio.h> int main() { int num1 = 20; double num2 = 10.5; printf("%3d\n", num1); printf("%5d\n", num1); printf(" *\n");//공백 부분 스페이스바 5번 printf("%0.2f\n", num2); printf("%10.3f\n",num2);
return 0; } |
엥? %d가 아니라 %3d, %5d 를 썻더니 오른쪽 정렬해서 써지죠?
앞에서 3, 5가 의미하는 것은 스페이스바3, 5개를 띄워서 오른쪽 정렬해줘라 라고 명령하는 겁니다. 3번째 줄에 *이 스페이스바 5번 해서 오른쪽 정렬했다는걸 보여주네요.
실수의 경우 소수점 아래 6자리까지 출력되서 깔끔하지 못한경우가 있어요.
깔끔이들을 위해 이런 기능이 있습니다. .2를 써주시면 소수점 둘째짜리까지 출력을 해줍니다. .3이면 소수점 셋째짜리까지 출력해주겠죠? 앞에서 배운거까지 응용해서 %10.3f도 한번 써봤습니다. ㅎㅎ
+응용문제
아스키코드값 출력하기(다음에 포스팅하겠습니다.)
문제: %d, %o %x를 이용해 char형으로 선언하여 저장된 A, &, $, @ 문자들을 10진수, 8진수, 16진수 (아스키코드)값을 출력해 보세요.