1 Part 03 상수, 변수, 자료형 안산 1 대학 디지털정보통신과 임 성 국
2 이 장의 내용 자료형이란 무엇인가 ? 상수와 변수 정수형 부동소수형 문자형
3 3.1 자료형이란 무엇인가 ?
4 자료형이란 무엇인가 ? 자료형 (data type) 프로그램에서 표현 혹은 저장하는 데이터의 종류 혹은 유형 C 언어의 자료형 C 언어는 1 개의 문자형, 3 개의 정수형, 3 개의 부동소수형을 제공 C 언어의 자료형 분류 자료형크기에 따라 문자형 char 정수형 shortintlong 부동소수형 floatdoublelong double
5 3.2 변수 /3.3 상수
6 변수 변수 (variable) 데이터를 저장하는 데 사용되는 기억 장소의 이름이다. 사용 전 변수 선언 변수 이름과 저장할 데이터 값의 유형 ( 자료형 ) 을 지정해야 한다. 자료형 변수이름 ; char c; short sum;
7 메모리와 변수 변수를 위한 메모리 할당 문자형 변수 c 를 위해서는 1 바이트를 할당 short 변수 sum 에 대해서는 2 바이트를 할당 sum c 메모리와 변수
8 상수 상수 (constant) 프로그램이 실행되는 동안 값이 변하지 않는 데이터 정수형 상수, 문자형 상수, 부동소수형 상수로 구분할 수 있다. 예 'A', 'x' 는 문자형 상수 -10, 0, 55 는 정수형 상수 3.14, 는 부동소수형 상수
9 식별자 변수, 상수, 함수 등에 대한 이름 문자와 숫자로 구성되며 첫 번째 글자는 반드시 문자 밑줄문자 ’_’ 도 하나의 문자로 사용될 수 있음 대소문자를 구별 바른 식별자, 잘못된 식별자 바른 이름잘못된 이름 x25 X age01 sum _jumsu address_01 25x X# 01age sum* -jumsu address-01
10 변수의 초기화 변수를 선언하면서 그 초기값을 정할 수도 있다 변수 초기화는 반드시 해야 하는 것은 아니고 선택사항 int sum = 0; 0 sum
11 변수의 초기화 실행결과 : 합이 0 입니다. 합이 10 입니다.
12 대입문을 이용한 변수 값 변경 대입문 (assignment statement) 변수에 새로운 값을 저장함으로써 기존 값을 변경한다. 대입 연산자 (=) 의 오른쪽 식이 계산되고, 그 결과 값이 왼쪽 변수 에 저장된다. sum = 10; 10 sum
13 score.c 실행결과 : 첫 번째 점수는 7 두 번째 점수는 10 세 번째 점수는 8 네 번째 점수는 9
14 변수 값 변경 과정 7 score 10 score 8 초기화 후 첫 번째 대입 후 두 번째 대입 후
15 변수 값 증가 대입문 오른쪽과 왼쪽에 나타난 변수는 다른 의미 대입문 오른쪽 변수는 그 변수로부터 읽어온 값을 의미 대입문 왼쪽 변수는 그 변수에 저장 ( 쓰기 ) 의미 변수에 접근 ( 읽기 ) 은 그 값을 변경시키지 않음. 변수에 대입 ( 쓰기 ) 은 이전 데이터를 새로운 데이터로 대체 10 11 sum 읽기 11 저장 sum = sum + 1;
16 scoreSum.c 실행결과 : 첫 번째 점수 : 7 현재 합 : 7 두 번째 점수 : 10 현재 합 : 17 세 번째 점수 : 8 현재 합 : 25 네 번째 점수 : 9 현재 합 : 34
17 이름 상수 이름 상수 (named constant) 상수에 이름이 부여되어 있는 것. 이름상수에는 식별자가 부여되어 있으므로 이름상수는 변수와 유사하지만 상수이므로 값을 변경할 수 없다. 예약어 const const int MAX_STUDENT = 20000;
정수형
19 정수형 크게 4 개의 정수형 char, short, int, long C 의 기본 정수형의 범위 예 (Microsoft Visual C/C++ 6.0) 자료형기억장소최소값최대값 char 8 비트 -2 7 = = 127 short 16 비트 = -32, = 32,767 int 32 비트 = -2,147,483, = 2,147,483,647 long 32 비트 = -2,147,483, = 2,147,483,647 long long* 64 비트 = -9,223,372,036,854,775, = 9,223,372,036,854,775,807 * long long 은 MS Visual C/C 에서는 지원되지 않음. 여기서 long long 은 gcc 컴파일러의 예
20 정수 표현 8 비트를 이용한 양수와 음수 표현 예 첫 번째 비트는 부호 비트로서, 0 은 양수 1 은 음수를 나타낸다. 나머지 7 개의 비트들은 수의 크기를 나타낸다. 음수 표현 연산의 효율성을 위해 수의 크기를 2 의 보수 형태로 나타낸다. +5, -5 의 표현 수의 표현이진수 의 1 의 보수 의 2 의 보수
21 양수, 음수 표현 양수이진수음수이진수
22 변수에 기억공간 할당 정수형 종류에 따라 해당 변수에 다른 크기 기억공간 할당 자료형의 크기를 나타내는 sizeof() 연산자 실행결과 : char 크기 : 1 short 크기 : 2 int 크기 : 4 long 크기 : 4
23 korea.c 실행결과 : 대한민국에 대한 데이터입니다 대학수 : 276 인구 : 예산 : 원
24 정수형 오버플로우 정수형에서 저장할 수 있는 수보다 더 큰 수나 더 작은 수를 저장 예 32 비트 int 가장 큰 수 ( = 2,147,483,647) 에 1 을 더하면 어떻게 될까 ? 질문 long budget = L;
25 unsigned 정수형 0 과 양의 정수만을 나타낼 수 있는 unsigned 정수형 음수를 표현할 수 없는 대신에 나타낼 수 있는 양의 정수 가 두 배 C 의 unsigned 정수형의 표현범위 자료형기억장소최소값최대값 unsigned char 8 비트 = 255 unsigned short 16 비트 = 65,535 unsigned int 32 비트 = 4,294,967,295 unsigned long 64 비트 = 18,446,744,073,709,551,615
부동소수형
27 부동소수형 C 언어의 3 개의 부동소수형 float, double, long double 부동소수점 (floating-point) 이란 ? 부동소수점에서 점 (point) 은 소수점을 말하며, 이 소수점이 수의 어느 위치에도 올 수 있으므로 부동소수점이라고 한다. 부동소수형의 예 (Microsoft Visual C/C++ 6.0) 자료형 기억장 소 최소값최대값 float 4 바이트 7 개의 유효숫자를 가지며, - 1.0E+38 의 근사값 7 개의 유효숫자를 가지며, 1.0E+38 의 근사값 double 8 바이트 15 개의 유효숫자를 가지며, - 1.0E+308 의 근사값 15 개의 유효숫자를 가지며, 1.0E+308 의 근사값 long double 8 바이트 15 개의 유효숫자를 가지며, - 1.0E+308 의 근사값 15 개의 유효숫자를 가지며, 1.0E+308 의 근사값
28 부동소수형 표현 float 형 자료의 저장과 표현 범위 아래 double 형과 유사하게 부호, 지수부, 가수부로 나뉘어짐 전체 비트 수가 double 보다 작을 수 있음 ( 예 : 16 비트 ) double 형 자료의 저장과 표현 범위 부호 지수부 가수부 8 바이트 (32 비트 )
29 float.c 실행결과 : float 크기 : 4 double 크기 : 8 long double 크기 : 8
문자형
31 문자형 각 문자에 고유번호를 부여한 코드를 사용하여 표현한다. C 에서는 ASCII 코드를 사용한다. ASCII(American Standard Code for Information Interchange) 128 개의 문자를 7 비트를 사용하여 표현 (8 비트로 확장됨 ) 대문자 (A, B, C 등등 ) 소문자 (a, b, c 등등 ) 구두점 (punctuation)( 마침표, 세미콜론, 쉼표 등등 ) 숫자 (digit)(0 에서 9 까지 ) 공백 문자 (‘ ’) 특수 문자 (&, |, \ 등 ) 제어 문자 열복귀 (carriage return), 널 (null), 문서 - 끝 - 표시자 (end-of-text) 액센트 (accent) 가 있는 문자
32 ASCII 코드표 표 3.1) ASCII 코드 표
33 code.c 실행결과 : a 97 A $ a 97 A $
34 문자형 관련 입출력 함수 getchar() putchar() int getchar() 매개변수가 없으며 한 문자를 읽어 그 문자의 ASCII 값을 반환한다. 파일 끝에 도달하면 EOF 를 반환한다. 파일을 #include 해야 한다. int putchar(int c) 한 글자를 받아 화면에 출력하고 출력한 문자의 ASCII 값을 반환한다. 오 류 시에는 EOF 를 반환한다. 파일을 #include 해야 한다. 다음 예제 프로그램 char.c ① 키보드로부터 한 개 문자 읽기 ② 문자로 출력 ③ ASCII 값을 보기 위해 정수로 출력
35 char.c 실행결과 : 한 문자를 입력하시오 : A 읽은 문자 : A 읽은 문자의 ASCII 값 : 65
36 putchar.c 실행결과 : Hello!
37 이스케이프 시퀀스 이스케이프 시퀀스 (escape sequence) 백슬래쉬 문자 ( \ ) 로 시작하고, 다음 문자는 특별한 방식으로 해석 예를 들어 이중 인용부호 문자 (") 출력 : \ " 이스케이프 시퀀스 의미 \b 백스페이스 \t 탭 \n 개행 \r 열복귀 \" 이중 인용부호 \' 단일 인용부호 \\ 백슬래쉬
38 escape.c
39 Key Point
40 ▶ Key Point C 언어는 1 개의 문자형, 3 개의 정수형, 3 개의 부동소수형을 제공 변수는 데이터를 저장하는 데 사용되는 저장 장소의 이름 변수에 대한 접근 ( 읽기 ) 은 메모리에서 그 값이 변경되지 않으나, 변 수에 대한 대입 ( 쓰기 ) 은 이전의 데이터가 새로운 데이터로 대체됨 상수 값은 변경할 수 없음 음수는 연산의 효율성을 위해 2 의 보수 형태로 나타낸다. C 언어는 ASCII 문자 집합을 사용하여 문자를 표현한다. 이때 필요 한 비트는 8- 비트 이다.
41 프로그래밍 실습
42 ▶ 프로그래밍 실습 1 1. ASCII 코드표의 일부를 프린트하는 프로그램을 작성한다. 다음 선언을 가정하여 프로그램을 작성한다. int main( ) { char c; } (1) 각 알파벳 대문자와 그 코드 값을 프린트한다. 변수 c 에 문자 'A' 를 대입한 후에 1 씩 증가시키면서 26 개를 차례로 프린트한다. (2) 각 알파벳 소문자와 그 코드 값을 프린트한다. 변수 c 에 문자 'a' 를 대입한 후에 1 씩 증가시키면서 26 개를 차례로 프린트한다. (3) 숫자와 그 코드 값을 프린트한다. 변수 c 에 문자 '0' 을 대입한 후에 1 씩 증가시키면서 10 개를 차례로 프린트한다.
43 ▶ 프로그래밍 실습 의 배수를 순서대로 계산하여 프린트하고 그 합을 계산하여 프린트한다. (1) int 변수 i 를 선언하고 0 으로 초기화한다. 이 변수를 5 씩 증가하면서 50 까지 의 5 의 배수를 프린트하는 프로그램을 작성하라. int main( ) { int i; } (2) 실습 1 의 프로그램을 확장하여 0 부터 50 사이의 5 의 배수들의 합을 계산하 여 프린트하는 프로그램을 작성하라.