510 likes | 805 Views
3 장 . 변수와 데이터형. C. #include <stdio.h> int main(void) { int num; printf(“Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("Is negative.<br>"); printf("num = %d<br>", num); return 0; }. 학습목표. 3 장 . 변수와 데이터형. 목차. 3 장 . 변수와 데이터형. 변수와 상수.
E N D
3장. 변수와 데이터형 C #include <stdio.h> int main(void) { int num; printf(“Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("Is negative.\n"); printf("num = %d\n", num); return 0; }
학습목표 3장. 변수와 데이터형
목차 3장. 변수와 데이터형
변수와 상수 • 변수는 값이 변경될 수 있는 데이터를 말하고, • 상수는 값이 변경될 수 없는 데이터를 말한다. 3장. 변수와 데이터형
변수와 상수 • 변수 • 데이터를 보관해둘 필요가 있을 때, 변수를 사용한다. 3장. 변수와 데이터형
변수와 상수 • 변수 • 데이터를 보관하기 위해서 메모리를 사용한다. • 메모리는 연속된 데이터 바이트의 모임을 말하며, 메모리의 각 바이트는 주소를 갖는다. • 프로그램에서 사용되는 모든 데이터는 바이트 단위의 크기를 가지며, 데이터 값의 형식에 따라 크기가 다르다. 3장. 변수와 데이터형
변수와 상수 • 변수 • 저장될 값의 데이터 형에 따라 필요한 만큼 메모리를 할당 받고, 이름을 붙여둔다. "변수를 선언한다." • 변수를 선언하고 나면 변수의 이름을 이용해서 메모리에 접근할 수 있다. 3장. 변수와 데이터형
변수와 상수 • 변수의 선언 • 기본 데이터형 • 문자형 : char • 정수형 : short, int, long • 실수형 : float, double 3장. 변수와 데이터형
변수와 상수 • 식별자 규칙 • 변수명이나 함수명과 같은 이름을 식별자라고 한다. 3장. 변수와 데이터형
변수와 상수 • 식별자 규칙 • 식별자를 만들기 위한 규칙 • 식별자는 반드시 영문자, 숫자, 밑줄 기호(_)만을 사용해야 한다. • 식별자의 첫 글자는 반드시 영문자 또는 밑줄 기호(_)로 시작해야 한다. 식별자는 숫자로 시작해서는 안된다. • 식별자에는 밑줄 기호(_)를 제외한 다른 기호를 사용할 수 없다. • 식별자는 대소문자를 구분해서 만들어야 한다. name, Name, NAME은 모두 다른 이름의 식별자로 간주한다. • C 언어의 키워드는 식별자로 사용할 수 없다. • 변수의 선언문은 다른 모든 문장보다 앞에 위치해야 한다. 3장. 변수와 데이터형
변수와 상수 • 식별자 규칙 • 키워드 예약어 3장. 변수와 데이터형
변수와 상수 • 변수 선언의 예 • 올바른 변수 선언 • 잘못된 변수 선언 3장. 변수와 데이터형
변수와 상수 • 변수 선언의 예 3장. 변수와 데이터형
변수와 상수 • 변수의 초기화 • 변수는 따로 초기화를 하지 않으면 쓰레기 값을 갖는다. 3장. 변수와 데이터형
변수와 상수 • 변수의 초기화 • 변수의 초기화(initialization) • 변수가 처음 메모리에 할당될 때 값을 지정한다. 3장. 변수와 데이터형
변수와 상수 • 변수의 초기화 • 변수의 초기화및 변수의 사용 방법 1: /* Ex03_01.c */ 2: #include <stdio.h> 3: 4: int main(void) 5: { 6: int num1; 7: int num2 = 10; 8: 9: printf(" num1 = %d, num2 = %d\n ", num1, num2); 10: num1 = 100; 11: num2 = 200; 12: printf(" num1 = %d, num2 = %d\n ", num1, num2); 13: 14: return 0; 15: } 초기화된 정수형 변수 변수에 값 대입 초기화 되지 않은 정수형 변수 3장. 변수와 데이터형
변수와 상수 • 상수(Constant) • 리터널 상수 3장. 변수와 데이터형
변수와 상수 • 상수(Constant) • 여러가지 리터널 상수 1: /* Ex03_02.c */ 2: #include <stdio.h> 3: 4: int main(void) 5: { 6: char ch = '\x41'; 7: int num = 0x7b; 8: unsigned int u_num = 123U; 9: long l_num = 1234567L; 10: double f_num1 = 12.34; 11: double f_num2 = 123.4567e-1; 12: float f_num3 = 12.34F; 13: 14: printf("ch = %c\n", ch); 15: printf("num = %d, %o, %x\n", num, num, num); 16: printf("u_num = %u\n", u_num); 17: printf("l_num = %d\n", l_num); 18: printf("f_num1 = %f, %e, %g\n", f_num1, f_num1, f_num1); 19: printf("f_num2 = %e\n", f_num2); 20: printf("f_num3 = %f\n", f_num3); 21: 22: return 0; 23: } 리터널 상수로 초기화된 변수 3장. 변수와 데이터형
변수와 상수 • 상수(Constant) • 출력에 사용되는 여러가지 문자열 3장. 변수와 데이터형
변수와 상수 • 매트로 상수 • #define문으로 정의되는 상수 • 매크로 상수의 사용 예 3장. 변수와 데이터형
변수와 상수 • 매트로 상수 • #define문은 전처리기에 의해서 처리된다. 3장. 변수와 데이터형
변수와 상수 • 상수(Constant) • 매크로 상수의 정의 및 사용 1: /* Ex03_03.c */ 2: #include <stdio.h> 3: 4: #define MAX 100 5: 6: int main(void) 7: { 8: int num1 = MAX; 9: int num2 = MAX - 1; 10: int num3 = -MAX; 11: 12: printf("num1 = %d\n", num1); 13: printf("num2 = %d\n", num2); 14: printf(“num3 = %d\n”, num3); 15: 16: printf("MAX = %d\n", MAX); 17: 18: return 0; 19: } MAX를 100으로 바꿔서 처리 매크로 상수 정의 “” 안의 MAX는 100으로 바뀌지 않음 3장. 변수와 데이터형
변수와 상수 • 상수(Constant) • #defne문은 C의 문장이 아니기 때문에 #defne문의 끝에는 세미콜론(;)이 필요 없다. 3장. 변수와 데이터형
변수와 상수 • const 변수 • 값을 변경할 수 없는 변수 • const 변수의 사용 예 3장. 변수와 데이터형
변수와 상수 • 상수(Constant) • const 변수의 선언 및 사용 1: /* Ex03_04.c */ 2: #include <stdio.h> 3: 4: int main(void) 5: { 6: const double pi = 3.14; 7: const int max; 8: 9: printf("pi = %f\n", pi); 10: printf("max = %d\n", max); 11: 12: pi = 3.1415; 13: max = 100; 14: 15: return 0; 16: } Const 변수는 변경할 수 없다. Const 변수 선언 초기화 되지 않았음으로 쓰레기 값을 가짐 3장. 변수와 데이터형
변수와 상수 • 기호 상수의 장점 • 이름이 있는 상수를 기호 상수라고 한다. • 이름이 있는 상수를 사용하면 프로그램을 수정하기 쉽다. • 이름이 있는 상수를 사용하면 프로그램을 알아보기 쉽다. 3장. 변수와 데이터형
데이터형(Data Type) • C 프로그램에서 사용되는 모든 변수나 값은 정해진 데이터형을 갖는다. • 데이터형에 의해서 주어진 값의 이진표현이 결정된다. 3장. 변수와 데이터형
데이터형(Data Type) • 기본 데이터형(primitive data type) • 문자형 : char • 정수형 : short, int, long • 실수형 : float, double • 파생 데이터형(derived data type) • 배열, 포인터 • 사용자 정의형(user-defined data type) • 구조체, 공용체, 열거체 3장. 변수와 데이터형
데이터형(Data Type) • 문자형 • 문자의 ASCII 코드 확인 1: /* Ex03_05.c */ 2: #include <stdio.h> 3: 4: int main(void) 5: { 6: char ch; 7: 8: scanf("%c", &ch); 9: printf("%c 문자의 ASCII 코드 : %d (%x)\n", ch, ch, ch); 10: 11: return 0; 12: } Char 형 변수 선언 ASCII 코드 출력 3장. 변수와 데이터형
데이터형(Data Type) • 특수문자 • ASCII 코드 중 특별한 용도로 사용되는 특수 문자(Escape sequence)는 ‘\’와 함께 표현한다. 3장. 변수와 데이터형
데이터형(Data Type) • 특수문자 • 특수문자 3장. 변수와 데이터형
데이터형(Data Type) • 특수문자 • ASCII 코드, MBCS, 유니코드 3장. 변수와 데이터형
데이터형(Data Type) • 정수형 • short형의 크기 ≤ int형의 크기 ≤ long형의 크기 • 정수형은 signed 형과 unsigned 형으로 나누어지는데, signed 키워드는 생략 가능하다. 3장. 변수와 데이터형
데이터형(Data Type) • 정수형의 표현 • 정수형 중 부호 있는 정수형은 최상위 비트를 부호 비트(sign bit)로 사용한다. • 부호 없는 정수형은 최상위 비트를 값을 저장하는 용도로 사용한다. 3장. 변수와 데이터형
데이터형(Data Type) • 정수형의 표현 • Singed와 unsigned 비교 Short 형 변수에 음수 -10 저장 음수이므로 최상위 비트가 1로 설정 1: /* Ex03_06.c */ 2: #include <stdio.h> 3: 4: int main(void) 5: { 6: short num1 = -10; 7: unsigned short num2 = num1; 8: 9: printf("부호 있는 정수 : %d\n", num1); 10: printf("부호 없는 정수 : %d\n", num2); 11: 12: return 0; 13: } Unsigned short 형 변수에 -10 저장 최상위 비트가 1이지만 음수가 아닌 65526임 3장. 변수와 데이터형
데이터형(Data Type) • 데이터형의 유효 범위 • 유효범위 3장. 변수와 데이터형
데이터형(Data Type) • 정수형의 표현 • Short 형과 unsigned short 형의 오버플로우 확인 1 1: /* Ex03_07.c */ 2: #include <stdio.h> 3: 4: int main(void) 5: { 6: short num1 = 32767; 7: short num2 = -32768; 8: unsigned short num3 = 65535; 9: unsigned short num4 = 0; 10: 11: num1 = num1 + 1; 12: num2 = num2 - 1; 13: num3 = num3 + 1; 14: num4 = num4 - 1; 15: 16: printf("num1 = %d\n", num1); 17: printf("num2 = %d\n", num2); 18: printf("num3 = %d\n", num3); 19: printf("num4 = %d\n", num4); 20: 21: return 0; 22: } 오버플로우 발생 Short 형의 최대값으로 초기화 Short 형의 최소값으로 초기화 Unsigned short형의 최대값으로 초기화 Unsigned short형의 최소값으로 초기화 3장. 변수와 데이터형
데이터형(Data Type) • 정수형의 표현 • 데이터 형의 유효 범위를 넘어서는 것 • 오버플로우 발생 시 항상 유효 범위 내의 값으로 설정되어 버린다. 3장. 변수와 데이터형
데이터형(Data Type) • 오버플로우 • Short형의 언더플로우 3장. 변수와 데이터형
데이터형(Data Type) • 오버플로우 • short형과 unsigned short형의 유효 범위 3장. 변수와 데이터형
데이터형(Data Type) • 오버플로우 • short형 유효 범위의 이진 표현 3장. 변수와 데이터형
데이터형(Data Type) • limits.h • limits.h의 내용을 정리 3장. 변수와 데이터형
데이터형(Data Type) • limits.h • Short 형과 unsigned short 형의 오버플로우 확인 2 1: /* Ex03_08.c */ 2: #include <stdio.h> 3: #include <limits.h> 4: 5: int main(void) 6: { 7: short num1 = SHRT_MAX; 8: short num2 = SHRT_MIN; 9: unsigned short num3 = USHRT_MAX; 10: unsigned short num4 = 0; 11: 12: num1 = num1 + 1; 13: num2 = num2 - 1; 14: num3 = num3 + 1; 15: num4 = num4 - 1; 16: 17: printf("num1 = %d\n", num1); 18: printf("num2 = %d\n", num2); 19: printf("num3 = %d\n", num3); 10: printf("num4 = %d\n", num4); 21: 22: return 0; 23: } SHRT_MAX 등의 매트로 상수가 정의된 헤더 포함 SHRT_MAX는 short형의 최대값 SHRT_MAX는 short형의 최소값 USHRT_MAX는 unsigned short형의 최대값 3장. 변수와 데이터형
데이터형(Data Type) • 실수형 • 실수의 표현 • 부동소수점 방식을 주로 사용 • 실수의 정밀도 : 단정도(float형)와 배정도(double형) 3장. 변수와 데이터형
데이터형(Data Type) • 실수형 • Float 형과 double 형의 정밀도 비교 1: /* Ex03_09.c */ 2: #include <stdio.h> 3: 4: int main(void) 5: { 6: float pi1 = 3.141592653589793; 7: double pi2 = 3.141592653589793; 8: 9: printf("float 형의 pi 값 : %f\n", pi1); 10: printf("double 형의 pi 값 : %f\n", pi2); 11: 12: printf("float 형의 pi 값 : %30.25f\n", pi1); 13: printf("double 형의 pi 값 : %30.25f\n", pi2); 14: 15: return 0; 16: } “%f”는 소수점 이하 6자리까지 출력 “%30.25f”는 소수점 이하 25자리 출력 3장. 변수와 데이터형
데이터형(Data Type) • 실수의 오버플로우 • Float 형의 오버플로우와 언더플로우 1: /* Ex03_10.c */ 2: #include <stdio.h> 3: 4: int main(void) 5: { 6: float num1 = 3.5e39; 7: float num2 = 1.8e-39; 8: 9: printf("num1 = %30.25f\n", num1); 10: printf("num2 = %30.25f\n", num2); 11: 12: return 0; 13: } Float형으로 표현할 수 없는 값 3장. 변수와 데이터형
데이터형(Data Type) • sizeof 연산자 • 주어진 값이나 데이터 형의 바이트 크기를 구한다. 3장. 변수와 데이터형
데이터형(Data Type) • sizeof 연산자 • Sizeof 연산자의 사용 1: /* Ex03_11.c */ 2: #include <stdio.h> 3: 4: int main(void) 5: { 6: char ch; 7: int num; 8: double fnum; 9: 10: printf("ch 의 바이트 크기 : %d\n", sizeof ch); 11: printf("num 의 바이트 크기 : %d\n", sizeof num); 12: printf("fnum의 바이트 크기 : %d\n", sizeof fnum); 13: 14: printf("3.14f의 바이트 크기 : %d\n", sizeof 3.14f); 15: 16: printf("char 형의 바이트 크기 : %d\n", sizeof(char)); 17: printf("short 형의 바이트 크기 : %d\n", sizeof(short)); 18: printf("int 형의 바이트 크기 : %d\n", sizeof(int)); 19: printf("long 형의 바이트 크기 : %d\n", sizeof(long)); 20: printf("float 형의 바이트 크기 : %d\n", sizeof(float)); 21: printf("double 형의 바이트 크기 : %d\n", sizeof(double)); 22: 23: return 0; 24: } 값이나 데이터형의 크기를 구하려면 Sizeof 사용 3장. 변수와 데이터형
학습정리 • 변수와 상수 • 변수 : 값이 변경될 수 있는 데이터를 말하며, 값을 보관하기 위해서 메모리를 사용한다. • 상수 : 프로그램에서 값이 변경되지 않는 요소를 말하며, 리터럴 상수와 매크로 상수, const 변수가 있다. • 데이터 형 3장. 변수와 데이터형
3장. 변수와 데이터형 수고하셨습니다. 질문 있습니까? NEXT Chapter 4장. 연산자