#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; } 1
학습목표 변수와상수의개념에대해알아본다. 리터럴상수, 매크로상수, const 변수에대해알아본다. C 언어의데이터형에대해알아본다. 2
목차 변수와상수 변수 상수 데이터형 문자형 정수형 실수형 sizeof 연산자 3
변수와상수 변수는값이변경될수있는데이터를말하고, 상수는값이변경될수없는데이터를말한다. 4
변수와상수 변수 데이터를보관해둘필요가있을때, 변수를사용한다. 5
변수와상수 변수 데이터를보관하기위해서메모리를사용한다. 메모리는연속된데이터바이트의모임을말하며, 메모리의각바이트는주소를갖는다. 프로그램에서사용되는모든데이터는바이트단위의크기를가지며, 데이터값의형식에따라크기가다르다. 6
변수와상수 변수 저장될값의데이터형에따라필요한만큼메모리를할당받고, 이름을붙여둔다. " 변수를선언한다." 변수를선언하고나면변수의이름을이용해서메모리에접근할수있다. 7
변수와상수 변수의선언 기본데이터형 문자형 : char 정수형 : short, int, long 실수형 : float, double 8
변수와상수 식별자규칙 변수명이나함수명과 같은이름을식별자라고한다. 9
변수와상수 식별자규칙 식별자를만들기위한규칙 식별자는반드시영문자, 숫자, 밑줄기호 (_) 만을사용해야한다. 식별자의첫글자는반드시영문자또는밑줄기호 (_) 로시작해야한다. 식별자는숫자로시작해서는안된다. 식별자에는밑줄기호 (_) 를제외한다른기호를사용할수없다. 식별자는대소문자를구분해서만들어야한다. name, Name, NAME 은모두다른이름의식별자로간주한다. C 언어의키워드는식별자로사용할수없다. 변수의선언문은다른모든문장보다앞에위치해야한다. 10
변수와상수 식별자규칙 키워드예약어 11
변수와상수 변수선언의예 올바른변수선언 잘못된변수선언 12
변수와상수 변수선언의예 13
변수와상수 변수의초기화 변수는따로초기화를하지않으면쓰레기값을갖는다. 14
변수와상수 변수의초기화 변수의초기화 (initialization) 변수가처음메모리에할당될때값을지정한다. 15
변수와상수 변수의초기화 변수의초기화및변수의사용방법 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: } 초기화되지않은정수형변수초기화된정수형변수 변수에값대입 16
변수와상수 상수 (Constant) 리터널상수 17
변수와상수 상수 (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: } 리터널상수로초기화된변수 18
변수와상수 상수 (Constant) 출력에사용되는여러가지문자열 19
변수와상수 매트로상수 #define 문으로정의되는상수 매크로상수의사용예 20
변수와상수 매트로상수 #define 문은전처리기에의해서처리된다. 21
변수와상수 상수 (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 으로바뀌지않음 22
변수와상수 상수 (Constant) #defne 문은 C 의문장이아니기때문에 #defne 문의끝에는세미콜론 (;) 이필요없다. 23
변수와상수 const 변수 값을변경할수없는변수 const 변수의사용예 24
변수와상수 상수 (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 변수는변경할수없다. 25
변수와상수 기호상수의장점 이름이있는상수를기호상수라고한다. 이름이있는상수를사용하면프로그램을수정하기쉽다. 이름이있는상수를 사용하면프로그램을 알아보기쉽다. 26
데이터형 (Data Type) C 프로그램에서사용되는모든변수나값은정해진데이터형을갖는다. 데이터형에의해서주어진값의이진표현이결정된다. 27
데이터형 (Data Type) 기본데이터형 (primitive data type) 문자형 : char 정수형 : short, int, long 실수형 : float, double 파생데이터형 (derived data type) 배열, 포인터 사용자정의형 (user-defined data type) 구조체, 공용체, 열거체 28
데이터형 (Data Type) 문자형 문자의 ASCII 코드확인 1: /* Ex03_05.c */ 2: #include <stdio.h> 3: 4: int main(void) 5: { 6: char ch; Char 형변수선언 7: 8: scanf("%c", &ch); 9: printf("%c 문자의 ASCII 코드 : %d (%x)\n", ch, ch, ch); 10: 11: return 0; 12: } ASCII 코드출력 29
데이터형 (Data Type) 특수문자 ASCII 코드중특별한용도로사용되는특수문자 (Escape sequence) 는 \ 와함께표현한다. 30
데이터형 (Data Type) 특수문자 특수문자 31
데이터형 (Data Type) 특수문자 ASCII 코드, MBCS, 유니코드 32
데이터형 (Data Type) 정수형 short 형의크기 int 형의크기 long 형의크기 정수형은 signed 형과 unsigned 형으로나누어지는데, signed 키워드는생략가능하다. 33
데이터형 (Data Type) 정수형의표현 정수형중부호있는정수형은최상위비트를부호비트 (sign bit) 로사용한다. 부호없는정수형은최상위비트를값을저장하는용도로사용한다. 34
데이터형 (Data Type) 정수형의표현 Singed 와 unsigned 비교 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: } Short 형변수에음수 -10 저장음수이므로최상위비트가 1 로설정 Unsigned short 형변수에 -10 저장최상위비트가 1 이지만음수가아닌 65526 임 35
데이터형 (Data Type) 데이터형의유효범위 유효범위 36
데이터형 (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형의최소값으로초기화 오버플로우발생 37
데이터형 (Data Type) 정수형의표현 데이터형의유효범위를넘어서는것오버플로우발생시항상유효범위내의값으로설정되어버린다. 38
데이터형 (Data Type) 오버플로우 Short 형의언더플로우 39
데이터형 (Data Type) 오버플로우 short 형과 unsigned short 형의유효범위 40
데이터형 (Data Type) 오버플로우 short 형유효범위의이진표현 41
데이터형 (Data Type) limits.h limits.h 의내용을정리 42
데이터형 (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 형의최대값 43
데이터형 (Data Type) 실수형 실수의표현 부동소수점방식을주로사용 실수의정밀도 : 단정도 (float 형 ) 와배정도 (double 형 ) 44
데이터형 (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 자리출력 45
데이터형 (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 형으로표현할수없는값 46
데이터형 (Data Type) sizeof 연산자 주어진값이나데이터형의바이트크기를구한다. 47
데이터형 (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 사용 48
학습정리 변수와상수 변수 : 값이변경될수있는데이터를말하며, 값을보관하기위해서메모리를사용한다. 상수 : 프로그램에서값이변경되지않는요소를말하며, 리터럴상수와매크로상수, const 변수가있다. 데이터형 49
수고하셨습니다. 질문있습니까? NEXT Chapter 4 장. 연산자 50