슬라이드 1

Similar documents
ABC 3장

Microsoft PowerPoint - chap03.ppt

Microsoft PowerPoint - chap06-4 [호환 모드]

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

Microsoft PowerPoint - chap03-변수와데이터형.pptx

Microsoft PowerPoint - chap06-1Array.ppt

Microsoft PowerPoint - Chapter_04.pptx

ABC 3장

Microsoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드]

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

OCW_C언어 기초

ABC 2장

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

슬라이드 1

Microsoft PowerPoint - chap06-2pointer.ppt

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

PowerPoint Presentation

C 언어와 프로그래밍 개요

1.2 자료형 (data type) 프로그램에서다루는값의형태로변수나함수를정의할때주로사용하며, 컴퓨터는선언된 자료형만큼의메모리를확보하여프로그래머에게제공한다 정수 (integer) 1) int(4 bytes) 연산범위 : (-2 31 ) ~ (2 31 /2)-

슬라이드 1

Microsoft PowerPoint - 2장 변수와 자료형 pptx

Microsoft PowerPoint - chap-04.pptx

슬라이드 1

Microsoft PowerPoint - chap-04.pptx

OCW_C언어 기초

Microsoft PowerPoint - chap04-연산자.pptx

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

본 강의에 들어가기 전

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

슬라이드 1

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

Microsoft PowerPoint - c2.ppt

03 상수, 변수, 자료형

프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음

쉽게 풀어쓴 C 프로그래밍

슬라이드 1

Microsoft PowerPoint - [2009] 02.pptx

Microsoft PowerPoint - ch07 - 포인터 pm0415

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

금오공대 컴퓨터공학전공 강의자료

쉽게 풀어쓴 C 프로그래밍

C 언어의구성요소인상수, 변수, 입 출력함수에 대하여학습

Microsoft PowerPoint - ch01.ppt

Microsoft PowerPoint - C++ 5 .pptx

슬라이드 1

Microsoft PowerPoint - chap11.ppt [호환 모드]

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

금오공대 컴퓨터공학전공 강의자료

쉽게 풀어쓴 C 프로그래밍

0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x = (12 + 6) / 2 * 3; x = 27 x = 3 * (8 / 4

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

PowerPoint 프레젠테이션

OCW_C언어 기초

<4D F736F F F696E74202D20C1A634C0E520BAAFBCF6BFCDC0DAB7E1C7FC>

PowerPoint Presentation

Microsoft PowerPoint - 10장 문자열 pptx

untitled

PowerPoint 프레젠테이션

Microsoft PowerPoint - 03_(C_Programming)_(Korean)_Pointers

Microsoft PowerPoint - CP_02_Convert_To_C_02_Step.pptx

PowerPoint Presentation

PowerPoint Presentation

untitled

11장 포인터

C++ Programming

<4D F736F F F696E74202D2032C1D6C2F72D32C2F7BDC32028B0ADC0C7C0DAB7E D20BAAFBCF6BFCD20BFACBBEAC0DA>

쉽게 풀어쓴 C 프로그래밍

K&R2 Reference Manual 번역본

Microsoft PowerPoint - chap10-함수의활용.pptx

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

11장 포인터

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

Chapter_06

Microsoft PowerPoint - chap06-8 [호환 모드]

KNK_C_05_Pointers_Arrays_structures_summary_v02

<4D F736F F F696E74202D20C1A633C0E52043C7C1B7CEB1D7B7A5B1B8BCBABFE4BCD2>

untitled

13 주차문자열의표현과입출력

Microsoft PowerPoint - additional01.ppt [호환 모드]

C 프로그램의 기본

윤성우의 열혈 TCP/IP 소켓 프로그래밊

PowerPoint Presentation

KNK_C02_form_IO_kor

Microsoft PowerPoint - chap05-제어문.pptx

C 언어 프로그래밊 과제 풀이

Microsoft PowerPoint - chap11-포인터의활용.pptx

Microsoft PowerPoint - chap06-8.ppt

Microsoft PowerPoint - Chapter 8_C언어

쉽게풀어쓴 C 언어 Express 제 4 장변수와자료형 이번장에서학습할내용 제 4 장변수와자료형 제 4 장변수와자료형 * 변수와상수의개념이해 * 자료형 * 정수형 * 실수형 * 문자형 * 기호상수사용 * 오버플로우와언더플로우이해 이번장에서는변수와각종자료형을살펴봅니다.

Microsoft PowerPoint - 2주차-1차시 (강의자료) ch01 - C Programming 기초 (part 2)

슬라이드 1

Microsoft PowerPoint - chap06-5 [호환 모드]

Microsoft PowerPoint - chap-05.pptx

본 강의에 들어가기 전

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

강의 개요

윤성우의 열혈 TCP/IP 소켓 프로그래밊

Microsoft PowerPoint - chap-03.pptx

Transcription:

3 장기본자료형 박종혁교수 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr SeoulTech 2018-1 st 프로그래밍입문 (1)

2 목차 3.1 선언, 수식, 배정 3.2 기본자료형 3.3 문자및 char 자료형 3.4 int 자료형 3.5 정수적형 short, long, unsigned 3.6 부동형 3.7 typedef 의사용 3.8 sizeof 연산자 3.9 getchar() 와 putchar() 의사용 3.10 수학함수 3.11 변환과캐스트

3 3.1 선언, 수식, 배정 모든변수는사용되기전에반드시선언되어야함 일반적인프로그램의시작형태 #include <stdio.h> int main(void){ int a, b, c; /* declaration */ float x, y = 3.3, z = -7.7; /* declaration with initialization */ printf("input two integers: "); /* function call */ scanf("%d%d", &b, &c); /* function call */ a = b + c; /* assignment statement */ x = y + z; /* assignment statement */...

4 변수선언의목적 변수의메모리공간확보 올바른연산자선택 int a, b, c; a = b + c; float d, e, f; d = e + f; 위의두 + 는기호는같지만, 위의 + 는정수 + 이고, 밑의 + 는실수 + 임

5 참조 정수와실수연산이다른이유 컴퓨터에서정수와실수의표현방법이다르기때문 정수 부호가있는 2의보수로표현 1 비트 : 부호비트 (1 : 음수, 0 : 양수 ) 나머지비트 : 수의 2의보수

정수의표현 0 1 2... 31 부호 수의 2 의보수 예 2 : 00000000 00000000 00000000 00000010-2 : 11111111 11111111 11111111 11111110

실수 부동소수로표현 모든수를지수형태로변환하여부호, 지수, 가수부로나누어저장 IEEE 부동소수

실수의표현 (IEEE 부동소수 ) 0 1 2... 8 9... 31 부호 지수부 가수부 (1 hidden bit) 예 2.0 = 1.0 ⅹ2 1 : 01000000 00000000 00000000 00000010 4.0 = 1.0 ⅹ2 2 : 01000000 10000000 00000000 00000010-2.0 = -1.0 ⅹ2 1 : 11000000 00000000 00000000 00000010

9 블록, 수식, 문장 블록 선언과문장이중괄호로둘러싸져있는것 선언은반드시문장앞에와야함 수식 상수, 변수, 연산자, 함수호출등의의미있는결합 상수, 변수, 함수호출은그자체가수식임 대부분의수식은값을가짐

10 문장 수식뒤에세미콜론이오면, 수식은문장이됨 i = 7; "i = 7" 은수식이고그값은 7임 "i = 7;" 은문장임

11 3.2 기본자료형 완전한형태 char signed char unsigned char signed short int signed int signed long int unsigned short int unsigned int unsigned long int float double long double 축약된형태 char signed char unsigned char short int long unsigned short unsigned unsigned long float double long double

12 기본형의기능별분류 정수적형 char signed char unsigned char short int long unsigned short unsigned unsigned long 부동형 float double long double 산술형정수적형 + 부동형

13 3.3 문자및 char 자료형 문자 모든정수적형의변수는문자를표현하는데사용될수있음 'a', '+' 와같은상수는 char 형이아니라 int 형임 C에는 char 형상수가없음 C++ 에서문자상수는 char 형임

14 char 자료형 char 형변수는문자와정수값을저장하는데사용됨 보통각 char는메모리의 1 바이트에저장됨 256개의값을저장할수있음 이값들중일부분만이실제인쇄문자임 ( 소문자, 대문자, 숫자, 마침표, 특수문자등 ) 공백, 탭, 개행문자같은여백도있음 대부분의컴퓨터는 ASCII나 EBCDIC 문자코드사용

15 ASCII 코드에서문자상수와대응되는정수값 문자상수대응하는값 'a' 'b' 'c'... 'z' 97 98 99... 122 문자상수대응하는값 문자상수대응하는값 문자상수대응하는값 'A' 'B' 'C'... 'Z' 65 66 67... 90 '0' '1' '2'... '9' 48 49 50... 57 '&' '*' '+' 38 42 43

16 주의 숫자를표현하는문자상수의코드값과실제그숫자값은특별한관계가없음 즉, '2' 의값은 2 가아님 'a', 'b', 'c' 등의코드값은순서적임 이것은문자와단어를사전적순서로정렬할때편 리함

인쇄할수없는문자는탈출기법을사용하여표현함 예를들어, 수평탭문자는문자상수와문자열에서 \t 로표현됨 \t 가 \ 와 t 두문자로기술되지만, 이것은한문자임 프로그램내에서특별한의미를갖는문자들이본래의의미를갖기위해서도탈출기법을사용해야함 큰따옴표를포함하는 "abc" 라는문자열은 "\"abc\"" 로표기함 작은따옴표문자상수 ' 는 '\'' 로표기함 17

18 특수문자 문자이름기술형태정수값 경고역슬래시백스페이스캐리지리턴큰따옴표폼피드수평탭개형널문자작은따옴표수직탭 \a \\ \b \r \" \f \t \n \0 \' \v 7 92 8 13 34 12 9 10 0 39 11

19 char 형 각값은메모리에이진수로저장됨예 ) char c = 'a'; 변수 c는메모리 1 바이트에 01100001로저장됨 (ASCII로저장 ) 이값을계산하면 97이됨 (ASCII 값 ) ANSI C는 char, signed char, unsigned char를제공

20 char는시스템에따라 signed char 또는 unsigned char와같음 세가지의 char 형은각각 1 바이트에저장됨 (256 개의값표현 ) signed char 형의값의범위 : -128 ~ 127 unsigned char 형의범위 : 0 ~ 255

21 예제 char c = 'a'; printf("%c", c); /* a is printed */ printf("%d", c); /* 97 is printed */ printf("%c%c%c", c, c + 1, c + 2); /* abc is printed */

22 3.4 int 자료형 C 언어의기본적인자료형 int 형은 2 바이트 (= 16 비트 ) 나 4 바이트 (= 32 비트 ) 에저장됨 즉, 정수의일부분만저장할수있음

23 값의범위 4 바이트워드컴퓨터 최소 = -2 31 = -2147483648 최대 = +2 31-1 = +2147483647 2 바이트워드컴퓨터 최소 = -2 15 = -32768 최대 = +2 15-1 = +32767

24 정수오버플로 값의범위를초과할때발생 ( 주의필요 ) #define BIG 2000000000 /* 2 billion */ int main(void){ int a, b = BIG, c = BIG; a = b + c; /* out of range? */... 정수오버플로가발생해도프로그램은계속수행되지만, 논리적으로부정확한값이계산됨

25 3.5 정수형 short, long, unsigned short 자료형은기억장소를절약하고자하는경우에사용 long 형은큰정수값을다룰때사용 short 형은 2 바이트에저장되고, long 형은 4 바이트에저장됨 4 바이트워드컴퓨터 : int 형과 long 형크기같음 2 바이트워드컴퓨터 : int 형과 short 형크기같음 unsigned 형의변수는음수가아닌정수를표현할때사용함

정수상수에그형을명시하기위해서는접미사를붙일수있음 접미사가붙지않은정수상수의형은 int, long, unsigned long 중하나임 시스템은세가지형중그정수상수를표현할수있는첫번째것을선택하여그정수상수의형으로함 예를들어, 2 바이트워드컴퓨터에서상수 32000 은 int 형이고, 33000 은 long 형임 26

27 접미사 u 또는 U l 또는 L ul 또는 UL unsigned long unsigned long 37U 37L 37UL

28 3.6 부동형 실수값을다루기위해사용함 정수를부동형상수로표현할때에는소수점을사용해야함 상수 1.0 과 2.0 은 double 형이지만, 상수 3 은 int 형임 접미사 f 또는 F l 또는 L float long double 3.7F 3.7L

29 부동형상수표기법 십진표기법 1.0 또는 1. 또는.0001 지수표기법 1.234567e5 (= 1.234567 X 10 5 ) 올바른부동형상수 3.14159, 314.159e-2F, 0e0, 1.

30 잘못된부동형상수 3.14,159 /* comma not allowed */ 314159 /* decimal point or exponential part needed */.e0 /* integer part or fractional part needed */ -3.14159 /* this is a floating constant expression */

31 부동형의값의범위 부동형에배정될수있는값은정밀도와범위라는속성으로기술됨 정밀도 : 부동형값이가질수있는유효숫자수 범위 : 부동형의변수에저장될수있는가장큰양수와가장작은양수의한계

32 float 형 정밀도 : 대략유효숫자 6자리 범위 : 대략 10-38 에서 10 +38 double 형 정밀도 : 대략유효숫자 15자리 범위 : 대략 10-308 에서 10 +308

33 예제 x = 123.45123451234512345; x 의실제값 double : 0.123451234512345 10 3 float : 0.123451 10 3 주의 모든실수를다표현할수는없다. 정수산술연산과달리부동형산술연산은정확하지않 다.

34 3.7 typedef typedef 의목적 긴선언문을축약해쓸수있음 사용목적에맞게형이름을결정할수있음 프로그램이식을쉽게할수있게함 예제 typedef char uppercase; typedef int INCHES, FEET; uppercase u; INCHES length, width;

35 3.8 sizeof 객체를저장하는데필요한바이트수를알아내기위해사용 다른단항연산자와동일한우선순위와결합법칙을가짐 사용법 sizeof(object)

36 기본형들의크기비교 sizeof(char) = 1 sizeof(short) <= sizeof(int) <= sizeof(long) sizeof(signed) = sizeof(unsigned) = sizeof(int) sizeof(float) <= sizeof(double) <= sizeof(long double)

37 3.9 getchar() 와 putchar() 의사용 stdio.h 에정의된매크로 getchar() : 키보드에서문자를읽음 putchar() : 화면에문자를출력함 char 형은 1 바이트, int 형은 2 바이트나 4 바이트에저장됨 int 형은 char 형이저장할수있는모든값과그이상을저장할수있음 char 형을작은정수형으로생각할수있음 반대로 int 형을큰문자형으로볼수있음

38 예제 #include <stdio.h> int main(void){ int c; while ((c = getchar())!= EOF) { /* #define EOF (-1) */ putchar(c); putchar(c); } return 0; } ( 주의 ) c 가 char 가아니라 int 로선언되어있음

39 하나의문자를반복적으로입출력하면문자열의입출력이된다. - 문자열을입력할때는마지막에반드시널문자를채워준다. - 배열에 Love 문자열을입력하는예 #include <stdio.h> int main() { char str[80]; int ch; int i; printf( 문자열을입력하세요 : ); for(i=0; i<4; i++){ ch=getchar(); str[i]=ch; } str[i]= \0 ; printf( 입력된문자열 : ); i=0; while(str[i]= \0 ){ putchar(str[i]); i++; } return 0; } // 문자열을저장할배열 // getchar 함수의리턴값을저장할변수 // 반복제어변수 // i 는 0 부터 3 까지변하면선 4 번반복 // 키보드로부터문자를입력받아리턴한다. // 리턴된문자를배열에차례로저장 // 마지막에널문자를저장하여문자열을완성한다. // 제어변수를다시 0 으로초기화 // 배열요소가널문자가아닌동안반복 // 화면에문자출력 // 다음문자로이동

40 키보드에서입력되는데이터는일단버퍼에저장되고 getchar 함수는버퍼로부터데이터를가져오므로문자열은한번에입력한다. 문자열을입력하세요 : Love ( 엔터 ) 입력된문자열 : Love 문자를하나씩입력하면새줄문자로입력되므로문제가발생한다. 문자열을입력하세요 : L ( 엔터 ) o ( 엔터 ) // 두번째문자를입력할때입력이끝난다. 입력된문자열 : L o

41 getchar 함수가새줄문자 ( \n ) 도하나의문자로입력하므로이문자를이용하여한줄을입력받을수있다. printf( 문자열을입력하세요 : ); while(1){ } ch=getchar(); if(ch== \n ) break; str[i]=ch; i++; str[i]= \0 ; // 무한반복 // 퍼버로부터문자하나를입력한다. // 그문자가새줄문자이면입력종료 // 배열요소에입력한문자를저장 // 다음배열요소로이동 // 마지막에널문자를넣어문자열을완성한다. 키보드입력 스트림버퍼 Love ( 엔터 ) L o v e n

42 새줄문자도하나의문자로입력하면여러줄을하나의문자열로입력할수있다. 입력의종료는 Ctrl + Z 키를누른다. - getchar 함수는키보드에서 Ctrl + Z 키가눌려지면 -1 을리턴하므로이값을비교하여입력을종료할수있다. printf( 문자열을입력하세요 : ); while(1){ ch=getchar(); if(ch==-1) break; str[i]=ch; i++; } str[i]= \0 ; printf( 입력된문자열 : ); puts(str); // getchar 함수가 -1 을리턴하면입력을종료한다. 문자열을입력하세요 : 10 분더공부하면 ( 엔터 ) 배우자의직업이바뀐다. ( 엔터 ) ^Z ( 엔터 ) 입력된문자열 : 10 분더공부하면 배우자의직업이바뀐다.

43 3.10 수학함수 C 에는수학함수가내장되어있지않음 다음과같은수학함수는표준라이브러리의일부분인수학라이브러리로제공됨 sqrt() pow() exp() log() sin() cos() tan() 이러한수학함수를사용하기위해서는 <math.h> 를포함시켜야함

44 정수용 abs() 와실수용 fabs() 를구별해서사용해 야함 UNIX에서는수학라이브러리가표준라이브러리가아니기때문에수학라이브러리를사용하는경우컴파일할때명시해야함 cc pgm.c -lm

45 예제 #include <math.h> #include <stdio.h> int main(void){ double x;.... } printf("\n%15s%22.15e\n%15s%22.15e\n%15s %22.15e\n\n", "x = ", x, "sqrt(x) = ", sqrt(x), "pow(x, x) = ", pow(x, x));....

46 3.11 변환과캐스트 산술수식은값과형을가짐 필요에따라수식을구성하는형들은변환이일어남 정수적승격 signed/unsigned char, signed/unsigned short, 열거형, signed/unsigned int는정수적수식에사용될수있음 이수식에서모든형들은 int나 unsigned int로변환됨

47 예제 char c = 'A'; printf("%c\n", c); printf 에서 c 는정수적승격이일어나 int 형이됨

48 일반적인산술변환 산술변환은이항연산자의피연산자를계산할때일어남 규칙둘중하나가 long double 형이면, 다른하나는 long double 형으로변환아니면, 둘중하나가 double 형이면, 다른하나는 double 형으로변환아니면, 둘중하나가 float 형이면, 다른하나는 float 형으로변환아니면, 정수적승격이일어나고, 다음규칙사용 : 둘중하나가 unsigned long 형이면, 다른하나는 unsigned long 형으로변환아니면, 둘중하나가 long 형이고다른하나가 unsigned 형이면, 다음수행 : 만일 long 형이 unsigned 형의모든값을표현할수있다면, unsigned 형은 long 형으로변환아니면, 두피연산자는 unsigned long 형으로변환아니면, 둘중하나가 long 형이면, 다른하나는 long 형으로변환아니면, 둘중하나가 unsigned 형이면, 다른하나는 unsigned 형으로변환아니면, 두피연산자는 int 형을가짐

49 자동변환 묵시적변환 강압 승격 확대

50 예제 선언 char c; short s; int i; long l; unsigned u; unsigned long ul; float f; double d; long double ld; 수식 형 수식 형 c - s / i int u * 7 - i unsigned u * 2.0 - i double f * 7 - i float c + 3 int 7 * s * ul unsigned long c + 5.0 double ld + c long double d + s double u - ul unsigned long 2 * i / l long u l system-dependent

51 캐스트 명시적인변환 캐스트예제 (double) i (long) ('A' + 1.0) x = (float) ((int) y + 1) (double) (x = 77) 잘못된캐스트 (double) x = 77 /* equivalent to ((double) x) = 77, error */

52 3.12 16 진상수와 8 진상수 C 원시코드에서 0으로시작하는양의정수상수는 8진정수이고 0x 또는 0X로시작하는양의정수상수는 16진정수임

53 예제 #include <stdio.h> int main(void) { printf("%d %x %o\n", 19, 19, 19); /* 19 13 23 */ printf("%d %x %o\n", 0x1c, 0x1c, 0x1c); /* 28 1c 34 */ printf("%d %x %o\n", 017, 017, 017); /* 15 f 17 */ printf("%d\n", 11 + 0x11 + 011); /* 37 */ printf("%x\n", 2097151); /* 1fffff */ printf("%d\n", 0x1FfFFf); /* 2097151 */ return 0; }

54