Built-Data type
사용 빈도가 높은 자료형을 예약어로 제공
User-defined Data Type
사용자가 만들어서 사용할 수 있는 문법 제공
정수형 자료형
C 언어 프로그램에서 정수 값을 ㅔ모리에 저장하기 위해 사용하는 자료형
실수형 자료형
C 언어 프로그램에서 실수 값을 메모리에 저장하기 위해 사용하는 자료형
signed char temperature;
temperature = -2; /* 영하 2도를 temperature 변수에 저장함 */
unsigned char age;
age = 52; /* 나이 52살을 age 변수에 저장함 */
signed short dday;
dday = -20 /* D-day가 -20일 남았다고 dday 변수에 저장함*/
unsigned short int seconds;
seconds = 35000; /* 3만 5000초를 seconds 변수에 저장 */
singed long int : 부호가 있는 4바이트 저장공간
signed long int money;
money = 7000000; /* 700만원을 money 변수에 저장함 */
unsigned long int : 부호가 없는 4바이트 저장 공간
unsigned long int time_seconds;
/* 1970년 1월 1일부터 현재까지 시간을 초단위로 환산한 다음
time_seconds 변수에 저장함 */
time_seconds = 145310624;
부동소수점
실수를 표현할 때 소수점의 위치를 고정하지 않고 소수점의 위치를 나타내는 수를 따로 작성하는 방식이 부동소수점(floating-point) 표현 방식이다
C 언어는 실수를 저장하기 위해 4바이트와 8 바이트 자료형을 제공한다
고정소수점
일정한 위치에 소수점의 위치를 고정하여 숫자를 나열하는 방법
float - 4 Byte
double - 8 Byte
정확도를 높일 때는 double을 사용하는 것이 좋다
물 마시기 (정수기)
{
컵을 가져온다; // 1
컵에 정수기 물을 따른다; // 2
컵에 담긴 물을 마신다; // 3
}
/* '물 마시기' 함수를 실행하면 위의 1-2-3 순서대로 실행한다 */
int Sum (int value1, int value2) // Sum - 함수 이름 / value1,value2 - 매개변수
{
int result = value1 + value2;
return result; // result - 반환값
} // { } 작업내용
매개변수 : 호출자에게 전달하는 갑승ㄹ 피호출자에서 전달 받는 변수
!!! 함수의 매개변수가 없는 경우
!!! 반환값이 없는 경우
void Test (int A, int B) // void를 쓸 경우 반환값이 없다
{
int reuslt = A + B
return result; // void를 쓸경우는 return 이후 값을 쓰지 말아야한다
A = A + 1; // return에서 함수가 종료되었기 때문에 동작하지 않는다
}
int Sum(int A, int B)
{
int res = A + B;
return res;
}
void main()
{
int s = Sum(2,3); // Sum을 위에서 이미 읽고 내려왔기에 정상 작동
}
int Sum(int A, int B); // 함수 원형을 선언 해주었기 때문에 정상으로 작동
void main()
{
int s = Sum(2,3); // Sum을 위에서 이미 읽고 내려왔기에 정상 작동
}
int Sum(int A, int B)
{
int res = A + B;
return res;
}
/* OOO.lib 파일에 있는 함수를 사용하기 위해 각 함수 원형을 선언해야함*/
int Add(int A, int B)
int Sub(int A, int B) // 함수가 존재하지만, 기계어로 변역되어 있어 내용을
int Mul(int A, int B) // 확인할 수 없으므로 '함수 원형'을 선언해야한다
int Div(int A, int B) // OOO.h 헤더파일로 만들어서 제공한다
void main()
{
int res1, res2, res3, res4
res1 = Add(2,4);
res2 = Sub(2,4);
res3 = Mul(2,4);
res4 = Div(2,4);
}
#define POW_VALUE(a) (a*a) <----- 'Marco Function' 으로 불린다
in data = POW_VALUE(3); /* int data = (3*3); 으로 번역됨 */
putchar(65); /* 아스키 값 65에 해당하는 문자 A 출력 */
putchar('A'); /* 문자 A가 출력됨 */
puts("Hi~"); /* Hi~ 출력 후에 줄 바꿈이 일어난다 */
int data1 = 5;
int data2 = 10;
printf("%d %d", data1, data2); /* data1에 저장된 5, data2에 저장된 10 출력 */
int d1 = 10; /* 10진수 > 10진수로 10 */
int d2 = 010; /* 8진수 > 10진수로 8*/
int d3 = 0x10; /* 16진수 > 10진수로 16 */
/* data1은 16진수, data2는 10진수, data3dms 8진수로 출력함 */
print("%x, %d, %o, d1, d2, d3);
출력 결과 - a, 8, 20
float data = 12.34;
printf("%f, %e, %E, data, data, data)
출력 결과 - 12.3400000, 1.234000e+01, 1.234000E+01 // e,E 는 소문자 대문자 차이
출력 문자열 정렬 이유
출력할 문자의 개수보다 칸을 더 사용하여 출력하면 빈칸과 숫자마 마치 그래프처럼 표시되어 값을 정확히 확인하지 않고도 어느정도 범위에 있는 값인지 알 수 있다.
제어 코드 사용하기
아스키 표에는 소리른 내거나 콘솔의 출력과 입력의 현재 위치를 알려주는 캐럿(Caret, 문자로 깜빡임) 위치를 변경할 수 있는 제어코드가 있다.
\n - 캐럿을 다음 줄로 이동(Line Feed)
\r - 캐럿을 해당 줄의 처음으로 이동(Carriage Return)
\t - 캐럿을 한 탭만큼 이동
\b - 캐럿을 바로 앞 칸으로 이동