Chapter 03 C 언어 개요 - Prof. Jung's Homepage

Download Report

Transcript Chapter 03 C 언어 개요 - Prof. Jung's Homepage

Chapter 04 자료 유형
변수
 저장 공간
 프로그램에서 자료 값을 임시로 기억할 수 있는 저장 공간을 변수
(variables)
 임시라는 말을 이용하는 이유는 변수라는 기억 장소는 프로그램이 종료되
거나 또는 프로그램 중간이라도 소멸될 수 있기 때문
 변수(Variables)는 프로그램에서 이용하는 저장장소로 실제적으로는
컴퓨터의 메모리(Memory)라는 하드웨어에 저장
 변수는 값을 저장하는 상자나 저장창고라고 이해하면 쉽고,
 이 상자의 위치는 메모리에 존재
2
자료 유형의 종류와 크기
 기본 자료형
 두 가지로 분류하면 정수형과 부동소수형
 이는 자료의 종류와 자료를 저장할 수 있는
공간의 크기에 따라 나눈 것
 변수
 물건을 담는 박스라고 생각한다면 박스의
크기에 따라 담을 물건이 제한됨
 즉 작은 박스에 부피가 적당한 책을 담을 수
는 있어도, 작은 박스에 커다란 코끼리를 담
을 수는 없음
 기본 자료형은 세가지로 분류하여 문자형,
정수형, 부동소수형으로 나누기도 함
 자료형
 변수가 가질 값의 종류가 자료형이고,
 변수는 값이 저장될 공간이므로 변수의 자
료형에 따라 변수가 저장될 공간의 크기와
내부 저장 방식이 결정
3
자료 유형
 저장 값의 종류는 다양
 124와 같은 일반 정수에서부터 3.14와 같은 소수, ‘a’와 같은 문자
등 다양한 종류의 값을 저장
 다양한 자료 값의 종류가 프로그램 언어마다 고유하게 정해져 있는
것이 일반적
 자료 유형
 이 변수에 저장되는 값의 종류를 자료 유형(data types) 또는 간단
히 자료형이라고도 함
 C 언어에는 자료형을 크게 기본 자료형(basic type)과 유도 자료형
(derived type)으로 구분
 유도 자료형에는 배열, 구조체, 공용체 등
 C 언어의 기본 자료형은 모두 12가지
 기본 자료형의 두 가지 부류는 정수형(integral type)과 부동소수형
(floating pointing type)
 정수형은 -3, 5, 100과 같은 정수 값을 저장하는 공간을 의미하며, 부동
소수형은 3.14, 5.111345와 같은 소수 형태의 수
4
자료유형의 종류
 모두 12가지
 변수가 가질 값의 종류가 자료형이고, 변수는 값이 저장될 공간이
므로 변수의 자료형에 따라 변수가 저장될 공간의 크기와 내부 저
장 방식이 결정
문자형
정수형
char
signed char
unsigned char
(signed) short (int)
(signed) (int)
(signed) long (int)
unsigned short (int)
unsigned (int)
unsigned long (int)
float
double
long double
정수형
부동소수형
 괄호는 생략 가능하다는 것을 의미
 문장 char c;는 변수 이름 c를 자료형 char로 선언하는 문장
자료형 변수이름;
char c;
5
변수 선언
 선언
 저장 공간인 변수는 사용하기 전에 반드시 선언(declaration)을 먼저
하고 이용
 이것은 C 언어의 중요한 규칙으로 강력한 자료형 언어(Strong Type
Language)라 함
 Visual Basic은 변수의 선언없이 이용가능
 선언도 하나의 문장으로 반드시 세미콜론으로 종료
자료유형12가지중의하나 변수이름;
int money;
 메모리 공간의 확보
 변수 선언은 메모리에 자료 유형에 맞는 크기의 저장 공간을 확보하
라는 중요한 의미의 문장
 비쥬얼 C++를 이용하는 경우, 이 변수를 위한 저장 공간의 크기는 4바
이트, 즉 32비트 공간 확보
6
변수 선언 의미
 유형, 값, 이름
 변수는 변수 선언된 이후에 중요한 세 가지 의미를 갖는데,
 자료 유형, 값, 이름
 변수 year는 이름이고, 자료유형은 int이며, 값은 아직 미정
int
year;
 변수의 초기 값
 변수를 선언하면서 바로 값을 저장하려면, 다음과 같이 변수이름에 이어서 대
입연산자 =와 원하는 값을 기술
int
year = 12;
7
변수 선언 위치
 선언 시 주의
 변수의 선언은 반드시 main()
수의 첫 줄에서부터 시작하며,
언문이 아닌 다른 문장이 먼저
오면 그 이후에는 선언문 이용
가능
…
함
선
나
불
 다음 구문은 컴파일 시간에 에러
int main(void)
{
변수 선언문;
…
일반 문장;
…
}
…
int main(void)
{
int year;
year = 2005;
int month;
…
}
8
상수 선언
 상수(constant number)
 변수 값으로 초기 값을 저장 한 후 수정할 수 없는 수
 프로그램에서 변수 선언 이후, 수정할 필요가 없는 수를 상수로 정의
하여 이용
 선언
 변수를 상수(constant number)로 선언하기 위해서는 변수 선언 시
키워드 const를 자료유형 앞에 기술
const
double
phi = 3.14;
 반드시 선언하면서 초기 값으로 값을 저장해야 하며, 다음은 에러
const double
phi = 3.14;
phi;
9
예제 소스
 Year.c
 오늘의 날짜를 변수
세 개에 저장하여
출력하는 프로그램
을 작성
 변수의 선언은
main() 함수의 첫
줄에서부터 시작
 변수는 year,
month, date로 하
며, printf()를 이용
하여 출력
10
정수형 자료
 정수형
 정수형은 큰 의미에서는 문자형을 포함한다고 보고, 좁은 의미에서는
문자형을 제외한 순수하게 정수를 저장하는 자료 유형이라고 볼 수
있음
 정수형은 키워드 int를 기본으로 하며, int 자료유형에서 파생된 자료
유형 short int와 long int가 있음
 자료형 short int는 간단히 short라고 할 수 있고,
 마찬가지로 long int는 long
 각각 저장 크기가 다름
 signed와 unsigned
 키워드 signed는 생략이 가능
 unsigned는 0과 양수만 표현
11
정수형 6가지
 좁은 의미의 정수형은 모두 6가지
 정수를 저장하는 자료형의 종류는 short, int, long 세 가지이며, 여
기에 signed와 unsigned를 지정할 수 있으므로 모두 6가지
12
signed int
 자료형 signed int의
범위
 정수 자료형 signed
int의 크기가 32 비트
이면 음수부터 양수까
지 표현이 가능하므로 231에서부터 231-1까지
표현이 가능
-231 <=
singed int
<=
231-1
 MSB
 가장 왼쪽의 비트가 0
이면 양수 또는 0을 의
미하며, 가장 왼쪽의 비
트가 1이면 음수
 수의 부호를 의미하는
저장공간의 최고 비트
를 부호 비트(Signed
Bit), 또는 최상위 비트
(Most Significant Bit)
13
unsigned int
 0과 양수만 표현
 정수 자료형 unsigned int의 크기가 32 비트이면 0과 양수만 표현
이 가능하므로 0에서부터 232-1까지 표현이 가능
0 <=
unsinged int
<=
232-1
 정수 자료형 unsigned int에서는 최상위 비트(Most Significant Bit)
가 부호 비트로서의 역할을 상실
14
short과 long
 short int
 정수 자료형 signed short의 크기가 16 비트이면 음수부터 양수까
지 표현이 가능
 -215에서부터 215-1까지 표현이 가능
 마찬가지로 unsigned short의 범위는 다음
-215 <=
0
signed short int
<=
215-1
<= unsigned short int
<=
216-1
 long int
 정수 자료형 signed long의 크기가 32 비트이면 음수부터 양수까지
표현이 가능
 -231에서부터 231-1까지 표현이 가능
 마찬가지로 unsigned long의 범위는 다음
-231 <=
signed long int
0
unsigned long int
<=
<=
<=
231-1
232-1
15
오버플로우
 overflow
 정수 자료형에서 저장 할 수 있는 범위의 수보다 더 큰 수나 작은 수
를 저장한다면 오버플로우(overflow)가 발생
 정수 자료형 signed int(크기가 32 비트)에서 가장 큰 수인 2311(2147483647)에 1을 더한 수를 signed int에 저장하면 오버플로
우가 발생
 2147483648를 저장할 수 없고, -2147483648이 됨
 위에서 나온 결과 값인
 10000000 00000000 00000000 00000000은 signed int에서
2147483648이 아니고 -2147483648 임
16
자료 값의 순환
 정수 자료형 signed int의 크기가 32 비트이면 -231에서부터 231-1
까지 표현이 가능
 여기서 231-1보다 하나 큰 수를 정수 자료형 signed int에 저장하
면 무슨 수가 저장될까?
 반대로 -231보다 하나 작은 수를 정수 자료형 signed int에 저장하
면 무슨 수가 저장될까?
 결과는 위에서 보았듯이 signed int의 값의 범위 내에서 순환
17
예제 소스
 Overflow.c
 정수 자료형 signed
int에서 가장 큰 수
인 231-1과 가장 작
은 수인 -231을 각각
변수에 저장
 제곱 승을 구하기 위
하여 함수 pow()를
이용
 이 함수를 이용하
기 위해서는
#include 문으로
math.h인 헤더 파
일을 추가
 변수 max, min 에
서 각각 1을 더한 수
와 1을 뺀 수를 변수
에 저장하여 출력
18
문자형
 char
 문자 유형은 모두 1 바이트, 즉 8 비트로 구성되며, 다음과 같이 세
가지 종류
char
signed char
unsigned char
 문자형은 키워드 char로 표현하며, 키워드 char 앞에 signed와
unsigned가 올 수 있다. 그러나 short, int, long과는 다르게
signed char가 항상 char와 같은 표기는 아니다.
 컴파일러에 따라 char는 signed char, unsigned char
 문자는 하나의 영문자를 구성
 영문자를 그대로 표현하기 위해서는 반드시 작은 따옴표인 인용부호
(quote) ‘
char c = ‘a’;
19
문자형의 표현
 문자의 내부 값
 메모리에는 문자가 저장되는 것이 아니라 문자에 대응되는 정수 저장
char c = ‘a’;
 문자 a의 아스키 코드 값이 01100001
 문자형 자료형은 넓은 의미로 정수형 자료형
 이유는 문자형의 내부 표현이 정수형의 내부 표현과 같고, 정수의 저장 공간
으로 이용이 가능하기 때문
 문자형 자료의 저장 공간은 1 바이트, 즉 8 비트이고 키워드 signed,
unsigned에 따라 저장 자료의 범위가 결정
 문자형 변수는 내부적으로는 정수형이므로 산술연산이 가능
 문자 ‘A’의 다음 두 번째 문자인 ‘C’가 출력
char uppercase = ‘A’;
printf("대문자 C 출력 > %c\n", uppercase+2);
20
문자의 다른 표현
 \t
 주로 인쇄할 수 없는 문자와 특수한 문자는 탈출 기법(escape
sequences)을 이용하여 표현
 한 예로 수평 탭 문자는 \t로 표현
 수평 탭 문자는 하나의 문자이지만 \와 t의 두 문자의 조합으로 구성되는
데 이러한 표현 방법을 탈출 기법(escape sequences)
 \nnn
 문자의 표현 방법에서 다른 하나의 방법은 하나의 문자 코드 값을 역
슬래쉬와 함께 팔진수 값으로 표현하는 방법
 즉 수평 탭 문자는 \011으로 표현
 즉 모든 문자는 \nnn 방법으로 표현이 가능
char alarm = ‘\a’;
char quote = ‘\042’;
21
특수 문자 표
 주로 이용하는 특수 문자 표
문자이름
영문 표현
정수값
\nnn
표현
의미
경고
BEL (Bell)
7
\007
\a
경고음이 울림
수평탭
HT (Horizontal tab)
9
\011
\t
수평으로 다음 탭만큼 이동
개행문자
LF (Linefeed)
10
\012
\n
다음 줄로 이동
폼피드
FF (Formfeed)
12
\014
\f
새 페이지의 처음으로 이동
캐리지 리턴
CR (Carriage return)
13
\015
\r
현재 줄의 처음으로 이동
큰따옴표
Double quote
34
\042
\”
“ 문자
작은따옴표
single quote
39
\047
\’
‘ 문자
역슬래쉬
Backslash
92
\134
\\
\ 문자
22
예제 소스
 Char.c
 문자형 변수 alarm,
quote, uppercase
3개에 각각 ‘\a’,
‘\042’, ‘\101’ 세
값을 저장하여 출력
23
부동 소수형
 float, double, long double
 정수가 아닌 소수를 저장하는 변수의 자료형을 부동 소수형
 float, double, long double의 순으로 표현 범위가 크고, 세밀
float
<
double
<=
long double
 float 변수는 4 바이트, 즉 32비트 크기로 저장공간을 할당하고,
double은 8바이트, 즉 64비트의 저장공간을 할당
float 의 저장공간 크기 : 32비트
 자료형 float의 표현 범위는 대략 10-38에서 1038이고, 소수점 이하 6자
리까지 표현이 가능
double 의 저장공간 크기
: 64비트
 자료형 double은 float보다 표현 범위가 크고, 정밀도도 정확하여 표현
 범위는 대략 10-308 에서 10308 이고, 소수점 이하 15자리까지 표현
 long double은 double보다 더 큰 저장공간을 할당하려는 의도에서
만들어졌으나 컴파일러마다 다르며, 특히 비쥬얼 C++에서는 long
double도 double 과 마찬가지로 64비트의 저장공간을 할당
24
예제 소스
 Floatsize.c
 부동소수형의 세 가지 유형
으로 변수를 저장하고, 출력
하는 프로그램을 작성
 위 변수나 자료형의 크기를
연산자 sizeof 를 이용하여
출력
 출력 함수 printf()에 이용되
는 변환명세인 %20.18f의
의미는 부동소수형을 출력할
때, 출력 폭을 20으로, 소수
점 이하를 18자리수로 출력
하라는 의미
 결과
 자료형 float는 소수점 이하
6자리까지 표현이 가능하므
로 변수 C의 출력이 소수점
이하 7자리부터는 의미가 없
으며, 마찬가지로 자료형
double은 소수점 이하 15자
리까지만 의미가 있음
25
12가지 자료형
 기본 자료형
 기본 자료형은 모두 12가지로 비쥬얼 C++인 경우, 다음과 같이 정
리
26
예제 소스
 Sizeof.c
 기본 자료형 12가지의
저장 공간의 크기를 출
력하는 프로그램
 저장공간의 크기를 알
수 있는 연산자로
sizeof를 이용
 연산자 sizeof 다음의
변수 이름으로 둘러싸
는 괄호는 생략 가능
 결과 값은 크기의 바
이트 값
 sizeof 이용법
sizeof (변수)
sizeof 변수
sizeof (자료형 키워드)
27
프로그램 연습
 프로그램 목적
 자료형 long과
unsigned에 각각
자료 값 22억을 저
장하고 각 값을 출
력
 자료형 char에 문
자 ‘A’를 저장하
고 문자와 코드 값
을 각각 출력
 내용
 자료형 long과
unsigned은 그 저
장 범위인 22억을
벗어난다면 오버플
로우가 발생
28