쉽게 풀어쓴 C언어 Express 제4장 변수와 자료형 C Express Slide 1 (of 31)
변수 Q) 변수(variable)이란 무엇인가? A) 프로그램에서 일시적으로 데이터를 저장하는 공간 Q) 변수는 왜 필요한가? Slide 2 (of 31)
변수 = 상자 변수는 물건을 저장하는 상자와 같다. int 데이터 변수의 타입 변수의 이름 Slide 3 (of 31)
변수와 상수 12 12 변수(variable): 저장된 값의 변경이 가능한 공간 상수(constant): 저장된 값의 변경이 불가능한 공간 (예) 3.14, 100, ‘A’, “Hello World!” 12 12 변수 상수 Slide 4 (of 31)
자료형의 종류 자료형 설명 바이트수 범위 정수형 부호있음 short short형 정수 2 -32768~32767 int 정수 4 -2147483648~2147483647 long long형 정수 부호없음 unsigned short 부호없는 short형 정수 0~65535 unsigned int 부호없는 정수 0~4294967295 unsigned long 부호없는 long형 정수 문자형 char 문자 및 정수 1 -128~127 unsigned char 문자 및 부호없는 정수 0~255 부동소수점형 float 단일정밀도 부동소수점 1.2E-38~3.4E38 double 두배정밀도 부동소수점 8 2.2E-308~1.8E308 Slide 5 (of 31)
변수의 이름짓기 식별자(identifier): 식별할 수 있게 해주는 이름 변수 이름 함수 이름 김철수 김영희 Slide 6 (of 31)
식별자를 만드는 규칙 알파벳 문자와 숫자, 밑줄 문자 _로 구성 첫 번째 문자는 반드시 알파벳 또는 밑줄 문자 _ 대문자와 소문자를 구별 C 언어의 키워드와 똑같은 이름은 허용되지 않는다. (Q) 다음은 유효한 식별자인가? sum _count king3 n_pictures 2nd_try dollor$ double O X // 숫자로 시작 X // $기호 X // 키워드 Slide 7 (of 31)
키워드 키워드(keyword): C언어에서 고유한 의미를 가지고 있는 특별한 단어 예약어(reserved words) 라고도 한다. auto double int struct break else long switch case enum register typedef char extern return union const float short unsigned continue for signed void default goto sizeof volatile do if static while Slide 8 (of 31)
변수 선언 변수 선언: 컴파일러에게 어떤 변수를 사용하겠다고 미리 알리는 것 자료형 변수이름; 변수 선언의 예 char c; 자료형 변수이름; 변수 선언의 예 char c; int I; double interest_rate; int height, width; Slide 9 (of 31)
변수의 초기화 자료형 변수이름 = 초기값; 변수 초기화의 예 char c = ‘a’; int i = 7; 자료형 변수이름 = 초기값; 변수 초기화의 예 char c = ‘a’; int i = 7; double interest_rate = 0.05; Slide 10 (of 31)
변수 선언 위치 변수는 함수의 첫부분에서만 선언할 수 있습니다. int main(void) { int count; 변수선언 int index; count = 0; index = 1; int sum; ... } 변수선언 일반문장 잘못된 변수선언 Slide 11 (of 31)
정수형 short, int, long 가장 기본이 되는 것은 int CPU에 따라서 크기가 달라진다. 16비트, 32비트, 64비트 (Q) 왜 여러 개의 정수형이 필요한가? (A) 용도에 따라 프로그래머가 선택하여 사용할 수 있게 하기 위하여 Slide 12 (of 31)
signed, unsigned 수식자 unsigned 음수가 아닌 값만을 나타냄을 의미 unsigned int signed 부호를 가지는 값을 나타냄을 의미 흔히 생략 Slide 13 (of 31)
오버플로우 x = 2147483647 x+1 = -2147483648 x+2 = -2147483647 x+3 = -2147483646 y = 4294967295 y+1 = 0 y+2 = 1 y+3 = 2 #include <stdio.h> int main(void) { int x; unsigned int y; x = 2147483647; printf("x = %d\n",x); printf("x+1 = %d\n",x+1); printf("x+2 = %d\n",x+2); printf("x+3 = %d\n",x+3); y = 4294967295; printf("y = %u\n",y); // unsigned를 출력하는 형식 지정자는 %u printf("y+1 = %u\n",y+1); printf("y+2 = %u\n",y+2); printf("y+3 = %u\n",y+3); } 오버플로우 발생!! Slide 14 (of 31)
오버플로우 오버플로우(overflow): 변수가 나타낼 수 있는 범위를 넘는 숫자를 저장하려고 할 때 발생 Slide 15 (of 31)
정수 상수 숫자를 적으면 컴파일러가 가장 작은 자료형을 자동으로 선택 상수의 자료형을 명시하려면 다음과 같이 한다. 접미사 자료형 예 u 또는 U unsigned int 123u 또는 123U l 또는 L long 123l 또는 123L ul 또는 UL unsigned long 123ul 또는 123UL 10진법이외의 진법으로도 표기 가능 int x = 10; // 10은 10진수이고 int형이고 값은 십진수로 10이다. int y = 010; // 010은 8진수이고 int형이고 값은 십진수로 8이다. int z = 0x10; // 010은 16진수이고 int형이고 값은 십진수로 16이다. Slide 16 (of 31)
기호 상수 기호 상수(symbolic constant): 기호를 이용하여 상수를 표현한 것 (예) area = 3.141592 * radius * radius; area = PI * radius * radius; income = salary - 0.15 * salary; income = salary - TAX_RATE * salary; 기호 상수의 장점 가독성이 높아진다. 값을 쉽게 변경할 수 있다. Slide 17 (of 31)
기호 상수의 장점 Slide 18 (of 31)
기호 상수를 만드는 방법 ① #define 기호상수이름 값 /* 기호 상수 프로그램*/ #include <stdio.h> #define PI 3.141592 int main(void) { float radius, area, circumference; // 변수 선언 printf("반지름을 입력하시요:"); // 입력 안내문 scanf("%f", &radius); // 사용자로부터 반지름 입력 area = PI * radius * radius; // 면적 계산 circumference = 2.0 * PI * radius; // 둘레 계산 printf("반지름은 %f입니다.\n", radius); // 반지름 출력 printf("원의 면적은 %f이고 둘레는 %f입니다.\n", area, circumference); return 0; } 기호 상수 정의 Slide 19 (of 31)
음수를 표현하는 두번째 방법 2의 보수로 음수를 표현한다. 현재 사용되는 표준적인 음수 표현 방법 2의 보수를 만드는 방법 Slide 20 (of 31)
2의 보수로 양수와 음수를 더하면 Slide 21 (of 31)
예제 /* 2의 보수 프로그램*/ #include <stdio.h> int main(void) { int x = 3; int y = -3; printf("x = %08X\n", x); // 8자리의 16진수로 출력한다. printf("y = %08X\n", y); // 8자리의 16진수로 출력한다. printf("x+y = %08X\n", x+y); // 8자리의 16진수로 출력한다. return 0; } 음수가 2의 보수로 표현되는지를 알아보자. x = 00000003 y = FFFFFFFD x+y = 00000000 Slide 22 (of 31)
문자형 문자는 컴퓨터보다는 인간에게 중요 문자도 숫자를 이용하여 표현 공통적인 규격이 필요하다. 아스키 코드(ASCII: American Standard Code for Information Interchange) 8비트를 사용하여 영어 알파벳 표현 (예) !는 33, ‘A’는 65, ‘B’는 66, ‘a’는 97, ‘b’는 98 !"#$%&'()*+,-./0123456789:;<=>? @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ `abcdefghijklmnopqrstuvwxyz{|}~ Slide 23 (of 31)
문자 변수 char형의 변수가 문자 저장 char형의 변수에 문자를 저장하려면 아스크 코드 값을 대입 char c; char answer; char code; char형의 변수에 문자를 저장하려면 아스크 코드 값을 대입 code = 65; // ‘A’ 저장 code = ‘A’; Slide 24 (of 31)
제어 문자 인쇄 목적이 아니라 제어 목적으로 사용되는 문자들 (예) 줄바꿈 문자, 탭 문자, 벨소림 문자, 백스페이스 문자 제어 문자를 나타내는 방법 아스키 코드를 직접 사용 이스케이프 시퀀스 사용 char beep = 7; printf("%c", beep); char beep = ‘\a’; printf("%c", beep); Slide 25 (of 31)
이스케이프 시퀀스 제어 문자 이름 제어 문자 표기 값 의미 널문자 \0 문자열의 끝을 표시 경고(bell) \a 7 문자열의 끝을 표시 경고(bell) \a 7 "삐“하는 경고 벨소리 발생 백스페이스(backspace) \b 8 커서를 현재의 위치에서 한 글자 뒤로 옮긴다. 수평탭(horizontal tab) \t 9 커서의 위치를 현재 라인에서 설정된 다음 탭 위치로 옮긴다. 줄바꿈(newline) \n 10 커서를 다음 라인의 시작 위치로 옮긴다. 수직탭(vertical tab) \v 11 설정되어 있는 다음 수직 탭 위치로 커서를 이동 폼피드(form feed) \f 12 주로 프린터에서 강제적으로 다음 페이지로 넘길 때 사용된다. 캐리지 리턴(carriage return) \r 13 커서를 현재 라인의 시작 위치로 옮긴다. 큰따옴표 \“ 34 원래의 큰따옴표 자체 작은따옴표 \‘ 39 원래의 작은따옴표 자체 역슬래시(back slash) \\ 92 원래의 역슬래시 자체 Slide 26 (of 31)
부동소수점형 컴퓨터에서 실수는 부동소수점형으로 표현 소수점이 떠서 움직인다는 의미 과학자들이 많이 사용하는 과학적 표기법과 유사 Slide 27 (of 31)
실수를 표현하는 방법 #1 고정 소수점 방식 정수 부분을 위하여 일정 비트를 할당하고 소수 부분을 위하여 일정 비트를 할당 전체가 32비트이면 정수 부분 16비트, 소수 부분 16비트 할당 (예) 3.14 과학과 공학에서 필요한 아주 큰 수를 표현할 수 없다 Slide 28 (of 31)
실수를 표현하는 방법 #2 부동 소수점 방식 표현할 수 있는 범위가 대폭 늘어난다. 10-38 에서 10+38 Slide 29 (of 31)
부동 소수점 형 Slide 30 (of 31)
Q & A Slide 31 (of 31)