HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr Chapter 3 변수와 자료형
HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr 목차 3.1 변수 3.2 자료형 3.3 변수의 이름 짓기 3.4 변수 선언과 사용 3.5 정수형 3.6 부동소수점형 3.7 문자형
HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr 3.1 변수 변수 (variable) 란 ? 프로그램에서 일시적으로 데이터를 저장하는 공간 변수는 왜 필요한가 ? 데이터가 입력되면 어딘가에 저장해야만 사용할 수 있음 성적들의 평균이 구해 지려면 먼저 어딘가에 저장되어 있어야 함 평균
HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr 변수가 만들어지는 곳 데이터 변수의 이름 int 변수의 타입 변수는 메인 메모리에 만들어짐 변수 = 상자
HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr 변수가 필요한 이유 만약 메모리를 이름을 갖지 않은 채로 사용한다면 충분히 가능하지만 불편함, 인간은 숫자보다 기호를 더 잘 기억 저장해야 할 변수가 매우 많다면 메모리 번지수를 모두 기억하기는 어 려움 22 A 219 번지 VS 219 번지에 2 를 대입 A 에 2 를 대입 ……
HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr 변수와 상수 변수와 상수 변수 한번 값이 저장 되었어도 언제나 다른 값으로 변경 가능 상수 한번 값이 저장 되면 값을 변경이 불가능 ( 예 : 원주율, A 등 ) 변수상수
HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr 예제 circle_area.c 예제 결과 상수 부분 변수 부분 원의 넓이를 구하는 방법
HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr 3.2 자료형 자료형이란 ? 데이터의 종류와 크기에 따라서 변수의 종류를 다르게 하는 것이 메모 리를 효율적으로 사용할 수 있음 데이터 타입이라고 말하며 크게 정수형, 문자형, 부동소수점형 3 가지 로 나눌 수 있음 일단 특정한 자료형으로 생산되면 해당되는 종류의 데이터만 저장할 수 있음 예를 들어 int 형에는 정수형 데이터만 저장이 가능 물건이 상자보다 크면 들어가지 않음 물건이 상자보다 너무 작으면 공간이 낭비 됨
HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr 기본자료형 자료형설명바이트범위 정수형 부호있음 short short 형 정수 ~ int 정수 ~ long long 형 정수 ~ 부호없음 unsigned short 부호없는 short 형 정수 2 0 ~ unsigned int 부호없는 정수 4 0 ~ unsigned long 부호없는 long 형 정수 4 0 ~ 문자형 부호있음 char 문자 및 정수 ~ 127 부호없음 unsigned char 문자 및 부호없는 정수 1 0 ~ 255 부동소수점형 float 단일정밀도 부동소수점 4 1.2E-38 ~ 3.4E38 double 두배정밀도 부동소수점 8 2.2E-308 ~ 1.8E308
HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr 자료형의 크기 자료형의 크기를 알고 싶을 땐 sizeof 연산자 이용하여 자료형의 크기를 알아낼 수 있음 형식 sizeof( 변수 or 자료형 ) 예 sizeof(x) 변수 sizeof(10) 값 sizeof(int) 자료형 sizeof(double) 자료형
HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr 예제 sizeof.c 예제 결과 sizeof 함수를 이용하여 각 자료형의 크기 구하기 sizeof 함수사용
HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr 3.3 변수의 이름 짓기 변수의 이름이나 함수의 이름은 모두 식별자의 일종임 식별자란 ?(identifier) 다른 함수와 다른 변수들과 식별할 수 있게 해주는 것 변수의 이름은 프로그래머가 마음대로 지을 수 있지만 몇 가지 규칙을 지켜야 함 알파벳 문자와 숫자, 밑줄 문자 ‘_’ 로 이루어져야 함 한글은 사용 불가 능 이름에 중간에 공백이 들어가면 안 됨 이름의 첫 번째 문자는 반드시 알파벳 또는 밑줄 문자 ‘_’ 이어야 하고 숫자로 시작할 수 없음 대문자와 소문자를 구별해야 함 예를 들어, 변수 index 와 INDEX 는 다른 변수 취급함 C 언어에서 사용하고 있는 키워드와 똑같은 이름은 쓸 수 없음 -
HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr 식별자 ■사용할 수 있는 식별자 인가 ? sum : 사용 가능한 식별자 3_base : 사용불가능 숫자로 시작할 수 없음 _count : 사용 가능한 식별자 double : 사용불가능 C 언어의 키워드 number_of_pictures : 사용 가능한 식별자 money# : 사용불가능 기호사용 할 수 없음 King3 : 사용 가능한 식별자
HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr 키워드 auto double int struct break else long switch case enum register typedef char extern return union const float short unsigned continuefor signed void default goto sizeof volatile do if static while 키워드란 C 언어에서 고유한 의미를 가지고 있는 특별한 단어 이고 사용자가 다시 정의하거나 사용 하는 것이 금지되어 있기에 식별자로 사용 불가능 하며 다른 말로 예약어라고 함 키워드 목록
HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr 3.4 변수 선언 변수 선언이란 컴파일러에게 어떤 변수를 사용하겠다고 미리 알리는 것 변수 선언 방법 자료형 변수명 ; 변수 선언의 예 char s; int ab; float x;
HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr 변수에 값을 저장 char c; // 문자형 변수 c 선언 int i; // 정수형 변수 i 선언 double interest_rate; // 실수형 변수 interest_rate 선언 c = 'a'; ` // 문자형 변수 c 에 문자 'a' 를 대입 i = 60; // 정수형 변수 i 에 60 을 대입 interest_rate = 4.9; // 실수형 변수 interest_rate 에 4.9 를 대입 변수는 데이터를 저장하기 위한 공간인데 변수를 선언하면 공간이 생기고 그 공간에 값을 넣기 위해서는 대입연산자 『 = 』를 사용함 ` 변수에 값을 저장하는 예
HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr 변수의 초기화 변수의 초기화 변수를 초기화 하는 이유 변수 선언 할 때 초기화 하지 않은 경우 변수에는 아무 의미 없는 쓰레기값이 들어감 변수 초기화 예 변수 선언과 동시에 초기화하는 것은 선언한 후에 값을 대입하는 것과 동일 자료형 변수이름 = 초기값 ; char c= ‘a’; int i = 7; double interest_rate = 0.05;
HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr 변수선언 위치 변수 선언은 시작 부분에 선언 되어야 하며, 시작 부분이 아닌 경우 C 에서는 컴파일 오류가 발생 변수 선언의 예 int main(void) { int count = 0; int index; count = 10; index = 1; int sum;... } 변수선언 일반문장 잘못된 변수선언 컴파일 오류 발생
HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr 변수의 사용 대입 연산자를 이용하여서 값을 저장 하며 값은 언제든 변경이 가능 int value; value = 10; // 대입 연산자를 이용하여 value 에 10 을 저장 … value = 20; // 변수 value 의 값을 20 으로 변경
HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr 변수의 사용 변수에는 다른 변수의 값을 할당할 수 있음 int value1 = 10; Int value2; value2 = value1; // 변수 value2 의 값을 value1 값으로 변경 value2 = value1;
HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr 예제 dollar2won.c 변수 선언 예제 달러화를 원화로 계산하는 프로그램 결과
HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr 3.5 정수형 정수형 데이터 타입 short, int, long 형이 있고 여러 개의 정수형 데이터 타입이 필요한 이 유는 용도에 따라 프로그래머가 선택하여 사용할 수 있게 하기 위해 만들어짐 정수형의 범위 short 형은 16 비트 크기를 가지며 ~32767 까지의 숫자를 표현 가능 int 형은 cpu 의 크기와 관련되어있고 현재는 보통 32 비트 크기를 가지 며 – ~ 까지 숫자를 표현 가능 long 형은 32 비트 크기를 가지며 int 형 (32 비트 ) 경우와 같은 숫자를 표현이 가능
HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr 정수형 예제 integer.c 정수형 자료형의 크기를 계산하는 프로그램 결과 예제 변수 초기화 sizeof 함수사용
HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr signed, unsigned 수식자 unsigned 음수가 아닌 값을 가진다는 의미 양수로만 따진다면 2 배의 정수를 표 현 가능 short 형은 0~65535 까지 int 형과 long 형은 약 42 억까지의 숫자를 표 현 가능 signed 는 unsigned 와 반대로 자료형이 음수도 가질 수 도 있다고 명백 히 하는데 사용되며 흔히 생략이 가능 signed int 와 int 는 같은 의미 예를 들어 unsigned int speed;// 부호없는 int 형 unsigned distance;//unsigned int distance 와 같은 의미 signed int;// int 와 동일
HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr 오버플로 오버플로 (overflow): 변수가 나타낼 수 있는 범위를 넘는 숫자 를 저장하려고 할 때 발생 정수형에서 오버플로 발생하더라도 컴파일러는 아무런 경고를 하지 않기 때문에 부정확한 결과가 계산되므로 주의 해야 함 오버플로가 발생할 경우 규칙성이 있음 오버플로가 발생 하면 처음으로 되돌아감 수도 계량기나 주행거리계와 비슷하게 동작 i Unsignd-Int 의 경우 Int 의 경우
HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr 예제 overflow.c Unsigned short 과 short 형의 오버플로 예제 결과 가질 수 있는 최대값에서 1 을 더하므로 오버플로우 발생 각 자료형이 가질 수 있는 최대값을 입력
HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr 정수 상수 int x = 10; // 10 은 10 진수이고 int 형이고 값은 십진수로 10 int y = 010; // 010 은 8 진수이고 int 형이고 값은 십진수로 8 int z = 0x10; // 010 은 16 진수이고 int 형이고 값은 십진수로 16 정수 상수란 정수형태를 가지는 상수 정수상수는 기본적으로 int 형으로 간주 함 상수의 자료형을 명시 하려면 10 진법 이외의 진법으로도 표기 가능 앞에 0 을 붙이는 경우는 8 진수 0x 를 붙이는 경우는 16 진수
HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr 예제 int_const.c 예제 결과 앞에 0 으로 시작하면 8 진수 0x 로시작하면 16 진수
HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr 기호상수 기호 상수 (symbolic constant) 란 ? 기호를 이용하여 상수를 표현한 것 보통의 상수는 변수와는 달리 이름이 없는데 상수에 이름을 붙이는 방 법 기호 상수를 사용할 경우 가독성이 높아지고 값을 쉽게 변경 할 수 있 음 기호 상수의 예 area = * radius * radius; area = PI * radius * radius; income = salary * salary; income = salary - TAX_RATE * salary;
HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr 기호 상수의 장점 리터럴 상수를 사용하는 경우 등장하는 모든 곳을 수정해야 함 기호 상수를 사용할 경우 기호상수가 정의된 곳만 수정하면 됨
HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr 기호 상수를 만드는 방법 define 문장 사용 예제 결과 기호상수선언
HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr 기호 상수를 만드는 방법 const 키워드사용 예제 결과 기호상수선언
HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr 3.6 부동소수점형 실수를 표현하는 방법에는 크게 고정소수점형, 부동소수점형 두 가지 방법이 존재 고정소수점은 간단하고 알기 쉽다는 장점이 있지만 과학과 공학에서 필요한 매우 큰 수를 표현 할 수 없는 단점이 있음 부동소수점은 고정소수점의 단점을 보안 하기 위해 만들어짐 현재 컴퓨터에서는 부동소수점 방식을 사용
HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr 실수를 표현하는 방법 고정 소수점 방식 정수 부분을 위하여 일정 비트를 할당하고 소수 부분을 위하여 일정 비트를 할당 전체가 32 비트이면 정수 부분 16 비트, 소수 부분 16 비트 할당 과학과 공학에서 필요한 아주 큰 수를 표현할 수 없음 정수부분소수부분
HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr 실수를 표현하는 방법 부동 소수점 방식 고정소수점방식의 단점을 보안하기 위해 만들어짐 표현할 수 있는 범위가 대폭 늘어남 에서 실수의 정밀도를 나타냄실수의 표현범위를 나타 냄 가수부분지수부분 가수부분 (23 비트 ) 지수부분 (8 비트 ) 부호 부분 (1 비트 )
HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr 부동 소수점의 자료형 자료형명칭크기범위 float 단일정밀도 (single-precision) 부동소수점 32 비 트 ± X ~ ± X double 두배정밀도 (double-precision) 부동소수점 64 비 트 ± X ~ ± X long double 두배확장정밀도 (double-extension- precision) 부동소수점 64 비 트 또는 80 비 트 ± X ~ ± X
HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr 부동 소수점 상수 일반적인 실수 표기법 (double 형 ) F(float 형 ) 지수표기법 e4 = e-3 = 유효한 표기법의 예 2. // 소수점만 붙여도 가능 .28 // 정수부가 없어도 가능 0e0 2e+10 // + 나 - 기호를 지수부에 붙일 수 있음 9.26E3 // 9.26e3 //
HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr 예제 floating.c 예제 결과 유효숫자 개념을 알아보기 위한 예제 %30.25 는 전체 출력필드의 크기를 30 을하고 소수부분을 25 자리 출력하라는 의미 Float 형은 6 개 정도의 유효숫자를 가질 수 있으므로 8 번째 자리수 부 터 정확한 값이 않나 옴 Double 형은 15 자리 정도의 유효숫자를 가질 수 있음
HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr 예제 over_under.c` 예제 결과 숫자가 너무 커서 오버플로 발생 숫자가 너무 작아 언더플로 발생 부동소수점의 경우 오버플로 발생시 변수에 무한대를 의미하는 INF 를 출력 Y 를 출력하는데 언더플로가 발생 0 으로 출력
HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr 예제 error.c 오차가 있을 수 있다 ! 예제 결과 1.0e20+5 의 값이 가 나오는데 이 숫자를 정확하게 저장 시키려면 20 개의 유효숫자가 필요하지만 double 형이라도 최대 16 개의 유효 숫자만을 지원하기에 1.0e20+5 가 10e20 으로 저장하게 되면서 연산결과가 0 이 나옴
HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr 3.7 문자형 문자는 컴퓨터보다는 인간에게 중요 컴퓨터에서는 모든 것을 숫자로 표현 문자도 숫자를 이용하여 표현 문자를 숫자로 표현하는데 공통적인 규격이 필요해서 제작되어진 것 이 아스키 코드 (ASCII: American Standard Code for Information Interchange) 임 8 비트를 사용하여 영어 알파벳 표현 ( 예 ) ! 는 33, ‘A’ 는 65, ‘B’ 는 66, ‘a’ 는 97, ‘b’ 는 98
HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr 문자변수 char 형의 변수가 문자 저장 char 형의 변수에 문자를 저장할 땐 아스키 코드 값을 대입 char c; char answer; char code; code = 65;// ‘A’ 저장 code = ‘A’;
HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr 예제 char_var.c 예제 결과 문자 변수를 입력해보자
HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr 예제 char_var1.c 예제 결과 문자 변수와 아스키 코드와의 관계 ' ' 를 사용하지 않을 경우 A 를 변수이름으로 생각하여 오류가 발생
HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr 제어문자 제어문자란 ? 인쇄 목적이 아니라 제어 목적으로 사용되는 문자들 ( 예 ) 줄 바꿈 문자, 탭 문자, 벨 소리 문자, 백스페이스 문자 제어 문자를 나타내는 방법 아스키 코드를 직접 사용 이스케이프 시퀀스 사용 char beep = 7; printf("%c", beep); char beep = ‘\a’; printf("%c", beep);
HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr 이스케이프 시퀀스
HANNAM UNIVERSITYHttp://netwk.hannam.ac.kr 예제 escape.c 예제 결과 \b 는 화면의 커서를 뒤로 움직이는 제어문 문자를 화면에 표시하려면 『 \” 』라고 해야함 그냥 『 “ 』라고 하면 문자열의 시작이나 끝으로 간주