Microsoft PowerPoint - 01_C_Language_Fundamental

Similar documents
OCW_C언어 기초

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

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

Microsoft PowerPoint - Chapter_04.pptx

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

Microsoft PowerPoint - chap04-연산자.pptx

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

Microsoft PowerPoint - 01_(C_Programming)_(Korean)_C_Language-Overview

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

Microsoft PowerPoint - ch07 - 포인터 pm0415

OCW_C언어 기초

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

untitled

Microsoft PowerPoint - Chapter_02.pptx

4.0 개요 p.116 수식 (expression) 연산자 (operator) 와피연산자 (operand) 로구성 수식은평가 (evaluate) 되어최종적으로 1 개의결과값이됨 피연산자 : 상수, 변수, 또다른수식 sum - 10 (a+b) / 2 연산자 2

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

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

Microsoft PowerPoint - c2.ppt

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

PowerPoint Presentation

C++ Programming

Microsoft PowerPoint - chap06-2pointer.ppt

ABC 2장

슬라이드 1

1.1.1 컴퓨터의 구성 p.19

Microsoft PowerPoint - chap-03.pptx

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어

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

<4D F736F F F696E74202D20C1A633C0E52043C7C1B7CEB1D7B7A5B1B8BCBABFE4BCD2>

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

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

K&R2 Reference Manual 번역본

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

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

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

Microsoft PowerPoint - Lesson2.pptx

Microsoft PowerPoint - [2009] 02.pptx

본 강의에 들어가기 전

ABC 3장

Microsoft PowerPoint - chap06-1Array.ppt

11장 포인터

Microsoft PowerPoint - chap-05.pptx

Microsoft PowerPoint - Perpect C 02.ppt [호환 모드]

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - chap03.ppt

Microsoft PowerPoint - chap-04.pptx

PowerPoint 프레젠테이션

슬라이드 1

PowerPoint 프레젠테이션

歯9장.PDF

Microsoft PowerPoint - chap-04.pptx

untitled

쉽게 풀어쓴 C 프로그래밍

슬라이드 1

PowerPoint Presentation

int main(void) int a; int b; a=3; b=a+5; printf("a : %d \n", a); printf("b : %d \n", b); a b 3 a a+5 b &a(12ff60) &b(12ff54) 3 a 8 b printf(" a : %x \

쉽게 풀어쓴 C 프로그래밍

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

Microsoft PowerPoint - ch01.ppt

JAVA PROGRAMMING 실습 02. 표준 입출력

1.4.3 증감연산자 후치증가 a++: 프로그램의한명령줄이끝나고 1을증가시킨값을다시 a에저장. 후치감소 a--: 프로그램의한명령줄이끝나고 1을감소시킨값을다시 a에저장. 전치증가 ++a: 1을증가시킨값을미리 a에저장하고프로그램을수행. 전치감소 --a: 1을감소시킨값을미리

슬라이드 1

PowerPoint 프레젠테이션

KNK_C03_Expr_kor

프로그램의실행화면 주석 (comment) 두수의합 : 300 /* 두개의숫자의합을계산하는프로그램 */ 주석은코드를설명하는글입니다. 주석 3 가지방법의주석 주석의예 /* 한줄로된주석 */ /* 저자 : 홍길동날짜 : 2013.


<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

untitled

PowerPoint Presentation

C 프로그램의 기본

03 상수, 변수, 자료형

OCW_C언어 기초

Microsoft PowerPoint - KNK_C03_Expr_kor

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

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

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

쉽게 풀어쓴 C 프로그래밍

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

중간고사

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

Microsoft PowerPoint - CP_02_Convert_To_C_02_Step.pptx

Microsoft PowerPoint - 08_(C_Programming)_(Korean)_Preprocessing

슬라이드 1

Microsoft PowerPoint - lec3.ppt

Microsoft PowerPoint - 제11장 포인터

Microsoft PowerPoint - chap12-고급기능.pptx

Chapter_06

Microsoft PowerPoint - Chapter_08.pptx

<4D F736F F F696E74202D2032C1D6C2F72D32C2F7BDC32028B0ADC0C7C0DAB7E D20BAAFBCF6BFCD20BFACBBEAC0DA>

슬라이드 1

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap4_2013 [호환 모드]

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

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

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

Microsoft PowerPoint - 제11장 포인터(강의)

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

Microsoft PowerPoint - chap-11.pptx

untitled

Transcription:

C Language C 프로그래밍개요 Doo-ok Seo clickseo@gmail.com http://

목 차 C 언어개요 C 언어기본문법 콘솔입출력 C 프로그램구조 2

C 언어개요 C 언어개요 C 언어의역사및특징 C 프로그램단계 Visual C++ 에서 C 실행 C 언어기본문법 콘솔입출력 C 프로그램구조 3

C 언어의역사 C 언어의역사및특징 ALGOL 60 (ALGOrithmic Language) BCPL 1960 년탄생된블록구조언어 Basic Combined Programming Language 1967 년캠브리지의 Martin Richard 자료형을지원하지않고자료객체만지원 B 언어 1970 년 Bell 연구소의켄톰슨 (Ken Thomson) C 언어 Bell 연구소의데니스리치 (Dennis Ritchie) BCPL 과 B 언어를결합, 자료형지원 1989 년미국규격협회 (ANSI) 에서표준화된 C 승인 : ANSI C (C89) 1990 년국제표준화기구 (ISO) 가 ANSI 표준채택 : ISO C 또는표준 C (C90) 4

C 언어의역사및특징 (cont d) C 언어의역사 (cont d) C 언어의표준화역사 1989 년미국규격협회 (ANSI) 에서표준화된 C 승인 : ANSI C (C89) 1990 년국제표준화기구 (ISO) 가 ANSI 표준채택 : ISO C 또는표준 C (C90) 1995 년일종의부록형태로 C90 의확장발표 : Amendment 1 (AMD1) 유럽을중심으로터져나온 C90 이지나치게미국적 이라는불만을잠재우기위해 C90 과 AMD1 을합해 C95 라고부르기도한다. 1999 년 C99 를발표 다양한변화 ( 예를들면 C++ 와유니코드의발전등 ) 를수용하기위해 5

C 언어의역사및특징 (cont d) C 언어의특징 이식성이좋다. 유연성 고급언어와저급언어의특징을동시에가진언어이다. 기계중심의언어 : Assembly 사용자중심의언어 : C, C++, Java, FORTRAN, COBOL, PASCAL 등 구조적프로그래밍을지원하는함수언어이다. 풍부한내장함수라이브러리를제공한다. 프로그래밍구조가간결하고명료하다. 실행파일의크기가작고빠른성능을자랑한다. 분할컴파일기능을지원한다. 6

C 프로그램의완성과정 C 프로그램단계 7

C 프로그램단계 (cont d) C 프로그램의완성과정 1 단계 : 프로그램작성 원시파일 (source file) 생성 : hello.c 2 단계 : 프로그램번역 C 컴파일러 : 전처리기 (preprocessor) 와번역기로구성 목적파일 (object file) 생성 : hello.obj 3 단계 : 프로그램연결 링커 (linker) 모든함수들을마지막실행가능한프로그램으로연결 실행파일 (execute file) 생성 : hello.exe 4 단계 : 프로그램실행 로더 (loader) 프로그램을메모리에적재하는운영체제의기능 8

C 프로그램단계 (cont d) 간단한 C 프로그램구조 /* 간단한 C 프로그램구조작성자 : 서두옥 */ #include <stdio.h> // 헤더파일 : 전처리기 (preprocessor) // 전역변수선언부분 int main(void) // main() 함수시작 { // 지역변수선언부분 printf("hello World!\n"); return 0; // 0 을반환하고함수종료 }// main() 함수끝 9

Visual C++ 6.0 에서 C 실행 1 단계 : 프로그램의작성 작업공간마련 : Visual C++ 실행 File New 메뉴선택 10

Visual C++ 6.0 에서 C 실행 (cont d) 1 단계 : 프로그램의작성 (cont d) 프로젝트생성 : Win32 Console Application 선택 DOS 프롬프트기반의프로그램작성 11

Visual C++ 6.0 에서 C 실행 (cont d) 1 단계 : 프로그램의작성 (cont d) 프로젝트생성완료 12

Visual C++ 6.0 에서 C 실행 (cont d) 1 단계 : 프로그램의작성 (cont d) 파일생성 : File New 메뉴선택 File 탭에서 C++ Source File 선택 13

Visual C++ 6.0 에서 C 실행 (cont d) 1 단계 : 프로그램의작성 (cont d) 파일생성완료 : hello.c 14

Visual C++ 6.0 에서 C 실행 (cont d) 1 단계 : 프로그램의작성 (cont d) 코딩 (coding) : 원시코드 (source code) 작성 15

Visual C++ 6.0 에서 C 실행 (cont d) 2 단계 : 컴파일 (Compile) 컴퓨터가이해할수있는기계어로변환하는과정 hello.obj 목적파일생성 16

Visual C++ 6.0 에서 C 실행 (cont d) 3 단계 : 링크 (Link) 컴파일된코드를라이브러리파일과연결시켜주는단계 hello.exe 실행파일생성 17

Visual C++ 6.0 에서 C 실행 (cont d) 4 단계 : 프로그램실행 18

C 언어기본문법 C 언어개요 C 언어기본문법 예약어, 식별자 변수, 상수 데이터형 콘솔입출력 C 프로그램구조 19

C 언어의구문과어휘 예약어, 식별자 문자 종류 영문소문자 영문대문자 a, b, c, d,, x, y, z A, B, C, D,, X, Y, Z 숫 자 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 특수문자 whitespace +, =, _, -, (, ), *, &, %, $, #,!,, <, >,., [, ], ^, ~,,, ;, :,,,... blank, new line, tab 20

예약어 (keyword) 예약어, 식별자 (cont d) C 언어에서특별한의미로사용되는단어 프로그램내에서재정의되거나다른용도로사용되어서는안된다. auto default float register switch break do for return typedef cast double goto signed union char else if sizeof unsigned const enum int static void continue extern long struct volatile while 21

식별자 (identifier) 예약어, 식별자 (cont d) 프로그래머가임의로정의하여사용하는변수, 함수, 상수등에 부여한명칭을말한다. 식별자에사용될수있는문자 영문소문자 (lowercase letters) : a, b, c,, z 영문대문자 (uppercase letters) : A, B, C,, Z 숫자 (digits) : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 _ 문자 식별자를위한규칙 첫번째글자는영문자또는 _ 여야한다. 영문자, 숫자또는 _ 로만이루어진다 ( 특수문자는사용불가 ). 첫 31 글자만의미를가진다. 예약어 (Keyword) 를사용할수없다. 22

식별자 (cont d) 식별자예제 예약어, 식별자 (cont d) SUM, Sum, sum : 서로다른식별어로사용 ( C 언어는대소문자를구분 ) Z, z : Z 와 z 는서로다른식별어 Click_seo : _ 를식별어중간에사용 Clickseo2000 : 영문자와숫자로구성한식별어 _Clickseo_ : _ 를처음과끝에사용 잘못된예제 Clickseo#35 : 특수문자는사용불가 1234clickseo : 숫자는사용불가 Click-seo : - (hyphen) 은사용불가??Clickseo : 특수문자는사용불가 23

변수, 상수 변수 (variable) 프로그램에서사용되는자료를저장하기위한공간 할당받은메모리의주소대신부르는이름 사용자가변수이름을만들어저장하기위한자료의형태를지정하면컴파일러는컴퓨터의메인메모리에주소값과연결시켜준다. 프로그램실행중에값변경가능하다. 사용되기이전에선언되어야한다. 1000 A ch 2000 char ch; int i; 1001 1002 1003 2001 2002 2003 100 i 프로그램 메모리 24

변수, 상수 (cont d) 변수 (cont d) 변수사용예 // 변수는선언과초기화를동시에할수있다. #include <stdio.h> #include <stdio.h> void main(void) { int a; char ch; 변수선언부 void main(void) { int a = 10; char ch = A ; } } a = 10; ch = 'A'; 변수처리부 int count = 0; int count, sum = 0; int count = 0, sum = 0; int count = 0; int sum = 0; 25

상수 (constant) 변수, 상수 (cont d) 프로그램수행중에변하지못하는자료값 실제값상수 정수형상수 (integer constant) 실수형상수 (real constant) 문자형상수 (character constant) 문자열상수 (string constant) 기억장소를갖는상수 선언하는것은변수선언과똑같지만앞에 const 키워드를써야하고반드시초기값이있어야한다는것이다르다. 26

상수 (cont d) 정수형상수 변수, 상수 (cont d) 자동으로 int 가되며, 큰숫자를사용하면자동으로 long int 가된다. 변경을원하면숫자다음에 U 나 u 그리고 L 이나 l 을붙이면된다. Literal +123-378 -32271L 76542LU Value 123-378 -32,271 76,542 Type int int long int unsigned long int 27

변수, 상수 (cont d) 상수 (cont d) 실수형상수 실수형숫자는기억장치에저장될때가수부 (significand) 와지수부 (exponent) 로나뉘어저장된다. 실수형상수는자동으로 double 자료형으로저장된다. 변경을원하면 F나 f, 또는 L이나 l을숫자뒤에붙이면된다. Literal 0..0 2.0 3.1416-2.0f 3.1415926536L Value 0.0 0.0 2.0 3.1416-2.0 3.1415926536 Type double double double double float long double 28

변수, 상수 (cont d) 상수 (cont d) 문자상수 영문자나숫자, 특수기호등을숫자로표현하기위해사용 작은따옴표 ( ) 를이용 내부적으로는문자상수도숫자로취급된다. #include <stdio.h> int main(void) { char ch1 = A ; char ch2 = 65; printf( %d %d n, ch1, ch2); printf( %c %c n, ch1, ch2); } return 0; 29

상수 (cont d) 변수, 상수 (cont d) 확장문자열 : 이스케이프 (escape) 문자 확장문자열 ASCII 코드 의 미 \0 00 NULL 널문자 (null character) \a 07 BEL 경고음 (alarm) 소리발생 (alert) \b 08 BS 커서를뒤로한칸이동한효과 (backspace) \t 09 HT Tab 키를누른만큼커서이동 (tab : 보통 8 열 ) \n 10 LF 커서를다음행으로이동 (new line) \v 11 VT 수직탭 (tab) \f 12 FF 인쇄시프린터의종이를한장넘김 (form feed) \r 13 CR 커서를줄의처음으로이동 (carriage return) \ 34 큰따옴표출력 \ 39 작은따옴표출력 \\ 92 역슬래시출력 30

변수, 상수 (cont d) 상수 (cont d) 문자열상수 큰따옴표내에하나이상의문자를묶어서표현하는문자열이다. 문자열상수는문자열끝에반드시널문자 \0 가자동으로삽입되는문자상수 A A A A \0 \0 문자 A (1 byte) 문자열 A (2 bytes) 빈문자열 31

상수 (cont d) 정의된상수 ( 매크로상수 ) 변수, 상수 (cont d) 전처리기명령어인 define 을사용하는것 #define MAX_SIZE 1024 기호상수 (symbolic constants) const int MAX = 100; ( 주의할점 ) 1 자료형한정자가제일먼저나타나야한다. 2 초기화가반드시되어야한다. 3 상수로선언되었으므로그값이바뀔수없다. 32

데이터형 데이터형 (data type) Data Type 기본형 정수형 short, unsigned short int, unsigned int long, unsigned long 실수형 float, long double, double 문자형 char, unsigned char 형없음 void 구조를갖는형 배열형 구조체 [ ] struct 공용체 union 열거형 enum 포인터형 * 33

데이터형 (cont d) 데이터형 (cont d) 데이터형 크기 (byte) 수의범위 char char signed char 1-2 7 ~ 2 7-1 ( -128 ~ 127 ) unsigned char 0 ~ 2 8 1 ( 0~255 ) int short int unsigned short int int unsigned int 2 4-2 15 ~ 2 15-1(-32,768 ~ 32,767) 0 ~ 2 16 ( 0 ~ 65,535 ) -2 31 ~ 2 31-1 ( -2,147,483,648 ~ 2,147,483,647 ) 0 ~ 2 32-1 ( 0 ~ 4,294,967,295 ) long long int unsigned long int 4-2 31 ~ 2 31 1 (-2,147,483,648 ~ 2,147,483,647) 0 ~ 2 32 1 ( 0 ~ 4,294,967,295 ) float float 4-10 128 ~ 10 127 : 소수 6 자리표현 double double long double 8 8 또는그이상 -10 128 ~ 10 127 : 소수 15자리표현차이를많이보임 : double의정밀도와같거나크다. 34

데이터형 (cont d) 문자형 데이터형 (cont d) 컴퓨터는문자상수를자동적으로내부에서 ASCII 코드값으로변환한다. 문자들에대한산술연산이가능하다. C 언어에서의문자는작은정수 (0 에서 255 사이 ) 로취급된다. char ch = A ; 128 64 32 16 8 4 2 1 가중치 0 1 0 0 0 0 0 1 부호비트 (MSB) 8 bits 0 : + 1 : - signed : -2 7 ~ 2 7 1 (-128 ~ 127) unsigned : 0 ~ 2 8 1 (0 ~ 255) 35

데이터형 (cont d) 정수형 int count = 65; 데이터형 (cont d) 정수, 즉분수 ( 소수점이하 ) 부분을가지지않는수 32............ 512 256 128 64 32 16 8 4 2 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 최상위비트 (MSB : Most significant Bit) 16 bits 최하위비트 (LSB: Least Significant Bit) 2byte(16bit) 처리계의정수표현범위 int 로선언시 : -32768 ~ 32767 (-2 15 ~ 2 15 1) unsigned 로선언시 : 0 ~ 65535 (0 ~ 2 16-1) 36

데이터형 (cont d) 정수형의음수표현 데이터형 (cont d) int count = -65; 32............ 512 256 128 64 32 16 8 4 2 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 MSB 가 1 이면음수 (2 의보수로표현한것 ) 37

데이터형 (cont d) unsigned int 형의메모리표현 데이터형 (cont d) unsigned short int i = 65535; 32............ 512 256 128 64 32 16 8 4 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 부호비트를고려하지않으므로 2 16 = 0 ~ 65535 까지표현할수있다. 38

데이터형 (cont d) 실수형 데이터형 (cont d) 분수 ( 소수점이하 ) 를가지지않는수 실수값을나타내는방법 지수부 (7 bits) 가수부 ( 소수, 24 bits) S 가수부의부호비트 (0: 양, 1: 음 ) float : 부동소수점단정도 (single precision type) 4byte double : 부동소수점배정도 (double precision type) 8byte 39

데이터형 (cont d) 부동소수점오차 데이터형 (cont d) 컴퓨터는우리가표현하고자하는실수의값을정확하게표현하는것이아니라, 아주가까운, 전혀문제가없을만큼의근사치를통해서실수를표현한다. 부동소수점오차에대한문제는컴퓨터의문제이지, C 언어의문제는아니다. 따라서다른프로그래밍언어들도기본적으로지니고있는문제이다. #include <stdio.h> int main(void) { int i; float f = 0.0f; for(i=0; i<100; i++) f += 0.1f; printf("%f n", f); } return 0; 40

음수표현방법 부호절대치방법 데이터형 (cont d) +9 부호비트만바꾼다 0 0 0 0 1 0 0 1 1 0 0 0 1 0 0 1-9 -9 = +9 각비트를 1 의보수로바꾼다 -9 1 의보수방법 0 0 0 0 1 0 0 1 1 1 1 1 0 1 1 0 2 의보수방법 1 1 1 1 0 1 1 0 0 0 0 0 0 0 0 1 + 1 1 1 1 0 1 1 1-9 41

데이터형 (cont d) 프로그램예제 : 데이터형의크기알아보기 (1/2) #include <stdio.h> int main() { char ch = 'A'; int i = 65; double d = 3.14; printf( ### 데이터형의크기 ### \n"); printf( \nchar : %d\n", sizeof(char)); printf("char ch = \'A\': %d\n", sizeof(ch)); printf( \nint : %d\n", sizeof(int)); printf("int i = 65 : %d\n", sizeof(i)); printf( \nshort int : %d\n", sizeof(short int)); printf("long int : %d\n", sizeof(long int)); 42

데이터형 (cont d) 프로그램예제 : 데이터형의크기알아보기 (2/2) printf( \nfloat : %d\n", sizeof(float)); printf("double : %d\n", sizeof(double)); printf("double d = 3.14: %d\n", sizeof(d)); printf("long double : %d\n", sizeof(long double)); printf( \nstring \'Hello\' : %d\n", sizeof("hello")); printf( \ndefault constant 1 : %d\n", sizeof(7)); printf("default constant 2 : %d\n", sizeof(10.12)); } return 0; 43

콘솔입출력 C 언어개요 C 언어기본문법 콘솔입출력 콘솔입출력개념 콘솔입출력함수 표준문자입출력함수 : getchar, putchar 비표준문자입출함수 : getche, getch 문자열입출력함수 : gets, puts 형식화된입출력함수 : printf, scanf C 프로그램구조 44

스트림 (Stream) 의개념 데이터의논리적흐름 콘솔입출력개념 개발자와하드웨어장치사이에존재하는추상적계층 하드웨어장치파일과연결되어데이터전송을중재 표준입출력스트림의종류 <stdio.h> 에입출력스트림정의 입출력스트림 기능 디바이스장치 stdin stdout stderr stdprn stdaux 표준입력표준출력표준오류표준프린터표준보조입출력 키보드모니터모니터프린터 (LPT1) 직렬포트 (COM1) 45

입출력스트림 콘솔입출력개념 (cont d) 파일스트림 파일스트림 ( 파일포인터 ) ( 파일포인터 ) 디스크 프로그램 stdout 디스크 stdin 표준출력 표준입력 stderr 키보드 표준오류 모니터 46

콘솔입출력함수의종류 콘솔입출력함수 함수의선언 기능 헤더파일 int getchar(void); int putchar(inc c); char *gets(char *str); int puts(char *str); int printf(char *control-string,...); int scanf(char *control-string,...); int getch(void); int putch(void); int getche(void); int kbhit(void); 한문자를읽어들인다. 한문자를출력한다. 문자열을읽어들인다. 문자열을출력한다. 문자열을서식을갖춰출력문자열을서식을갖춰입력입력화면에입력문자는표시안된다 ( 비표준문자입력함수 ). putchar() 와달리 \n 을 CR/LF의조합으로바꾸지않는다 ( 비표준문자출력함수 ). 입력문자가화면에출력 ( 에코 ) 된다 ( 비표준문자입력함수 ) 키의눌림여부를조사한다. 눌린경우 0이아닌수를반환한다 ( 비표준키입력함수 ). stdio.h conio.h 47

콘솔입출력함수 (cont d) 표준문자입출력함수 getchar() 함수 표준입력장치인키보드로부터한문자를읽어들이는함수 파일의끝을만나거나입력오류가발생했을경우에만중지된다. 만약파일의끝을만나거나입력오류가발생하면 EOF 값반환한다. int getchar(void); 호출성공 : 읽어들인문자를반환호출실패 : EOF 를반환 putchar() 함수 표준출력장치인모니터화면에한문자를출력하는함수 int putchar(int ch); 호출성공 : 방금쓴문자를반환호출실패 : EOF 를반환 48

콘솔입출력함수 (cont d) 프로그램예제 : 한문자를입력받고출력 #include <stdio.h> int main(void) { char ch; printf(" 한문자입력 : "); ch = getchar(); printf(" 문자출력 : "); putchar(ch); putchar('\n'); } return 0; 49

콘솔입출력함수 (cont d) 비표준문자입출력함수 getche() 와 getch() 함수 int int getche(void); getch(void); ANSI C 표준은아니지만, 대다수의 C 컴파일러가지원하는직접문자입력함수 getchar() 보다빠른입력속도 abc a _ abc 입력 a 입력 행버퍼 abc getchar() getche() 메모리 ( 프로그램 ) 키보드 a 입력 getch() [ getchar() 와 getche(), getch() 의차이 ] 50

콘솔입출력함수 (cont d) 문자열입출력함수 gets() 함수 리턴 ( 개행 ) 문자를문자열의끝표시 (\0) 로변환한다. 표준입력파일시스템에서데이터를읽는다. char *gets (char *string); 호출성공 : string 의번지를반환호출에러 : NULL 을반환 puts() 함수 널문자 ( \n ) 는줄넘김문자로대체된다. int puts (char *string); 호출성공 : 음수가아닌정수반환호출에러 : EOF 를반환 51

서식화된입출력 서식화된입출력함수 : printf, scanf 표준입출력파일 표준입력파일 (standard input file) 키보드 표준출력파일 (standard output file) 모니터 52

서식화된출력 서식화된입출력 (cont d) 표준형식출력함수 : printf (print formatted) 호출성공 : 출력한 bytes 수를반환호출실패 : EOF 를반환 53

서식화된입출력 (cont d) 서식화된출력 (cont d) 필드명세 % 부호와변환코드는필수적이며나머지는생략가능 일반적으로출력은오른쪽으로맞춰진다. 맞춤을반대로하기위해서는플래그를마이너스기호 (-) 로지정한다. % <flag> <minimum width> <precision> <size> conversion-code 출력을위한양식 Size Code Type Example none c char %c H d short int %hd none d int %d l or L d long int %ld none f float %f none f double %f l or L f long double %lf 54

서식화된입출력 (cont d) 서식화된출력 (cont d) 크기 (size) 변환코드에나타난자료형을수정하기위하여사용 너비 (minimum width) 변환지정자 출력의최소의자릿수 를나타내기위하여사용 ( 미지정시각자료는필요한공간만큼만을이용한다.) 정확도 (precision) 변환지정자 실수형자료출력시소수점이하부분몇자리까지출력하는지를기술 ( 미지정시소수점 6 자리까지기본출력 ) 55

서식화된입출력 (cont d) 서식화된출력 (cont d) printf() 함수의서식지정자 서식지정자 %c %d, %i %o %x, %X %u %f %e, %E %g, %G %s %p %% 의미인자를 char 형의한문자로출력인자를부호있는 int 형로출력인자를부호없는 8진수로출력인자를부호없는 16진수로출력인자를부호없는 10진수로출력인자를 float나 double형의실수로출력인자를과학기술계산용표기법으로출력 %e와%f 중더짧은표현선택문자열출력포인터의주소출력 % 부호를그대로출력 데이터형문자형정수형정수형정수형정수형부동소수형부동소수형부동소수형문자포인터포인터형 56

서식화된입출력 (cont d) 서식화된출력 (cont d) %c, %d, %f, %s 가장많이쓰이는서식문자들 %o, %u, %x, %X 부호없는정수형출력 %e, %E ' 부동소수점표현방식 ' 에의한출력 3.1245e+2 3.1245 10 +2 2.45e-4 2.45 10-4 57

서식화된입출력 (cont d) 서식화된출력 (cont d) %g, %G 표현하고자하는실수의값이소수점이하 6자리인경우 %f의형태로출력 이범위를넘길경우 %e의형태로출력 #include <stdio.h> int main(void) { printf("%g n", 0.00123); // 0.00123 출력 printf("%g n", 0.000123); // 0.000123 출력 printf("%g n", 0.0000123); // 1.23e-005 출력 printf("%g n", 0.00000123); // 1.23E-006 출력 } return 0; 58

서식화된입출력 (cont d) 서식화된출력 (cont d) printf 함수의변환서식수정자 conversion specification modifier 변환서식지정자형식 : [-] [m]. [n] [l] 의미 사용예 출력예 m 출력필드의최대자릿수 printf( %10d, x); _ 52342 n 소수점이하자릿수 printf( %3.2f, f); 123.45 - 서식문자를왼쪽부터채움 printf( %-10d, x); 52342 _. 최대출력폭과문자수의구분소수점이하자릿수를구분 printf( %5.2s, abcd ); printf( %3.2f, f); _ ab 123.45 l 인자를 long 형으로출력 printf( %ld, x); long 형출력 59

서식화된입출력 (cont d) 프로그램예제 : 변환기호사양수정자 #1 #include <stdio.h> int main(void) { int i = 1234; printf("[%d]\n", i); // 정수출력 printf("[%8d]\n", i); // 최소 8자리를잡고출력 ( 우측정렬 ) printf("[%-8d]\n", i); // 최소 8자리를잡고출력 ( 좌측정렬 ) printf("[%+8d]\n", i); // 부호출력 printf("[%08d]\n", i); // 빈칸을공백으로채움 printf("[%+08d]\n", i); } return 0; 60

서식화된입출력 (cont d) 프로그램예제 : 변환기호사양수정자 #2 #include <stdio.h> int main(void) { char ch = 'A'; double d = 3.14159; printf("[%c]\n", ch); // 문자출력 printf("[%8c]\n", ch); // 최소 8자리를잡고문자출력 ( 우측정렬 ) printf("[%-8c]\n", ch); // 최소 8자리를잡고문자출력 ( 좌측정렬 ) printf("[%f]\n", d); // 실수출력 printf("[%8.3f]\n", d); // 최소8자리를잡고소수점이하3자리까지실수출력 printf("[%-8.3f]\n", d); // 좌측정렬 printf("[%+8.3f]\n", d); // 부호출력 printf("[%08.3f]\n", d); // 빈칸을공백으로채움 printf("[%+08.3f]\n", d); return 0; } 61

서식화된입출력 (cont d) 프로그램예제 : 다양한데이터의출력방법 #include <stdio.h> int main() { char ch='a'; int i = 10; double d = 16.8; printf(" 정수형상수의출력 : %d\n", -10); printf(" 정수형변수의출력 : %d\n", i); printf(" 정수형수식의출력 : %d\n", i/3); printf( \n실수형상수를소수점형태로출력 : %lf\n", 2.5); // long double printf(" 실수형변수를지수형태로출력 : %le\n", d); // 지수형소수형태 printf(" 실수형수식을소수점형태로출력 : %lf\n", d/4); printf( \n 문자상수의출력 : %c\n", 'F'); printf(" 문자변수의출력 : %c\n", ch); printf(" 문자열상수의출력 : %s\n", " 서두옥 "); } return 0; 62

서식화된입출력 (cont d) 프로그램예제 : 필드옵션의여러가지사용예 #include <stdio.h> int main() { printf("12345678901234567890\n"); printf( %10c\n", 'A'); printf( %10d\n", 128); printf( %10lf\n", 3.1415926); printf( %10le\n", 3.1415926); // long double // 지수형소수형태로출력 printf( %10.3lf\n", 3.1415926); // long double ( 소수점최소자릿수지정 ) printf( %10.4s\n", "Love is"); // 문자열출력 ( 출력문자수지정 ) printf( %5lf\n", 3.1415926); // 최소자릿수 } return 0; 63

서식화된입출력 (cont d) 프로그램예제 : 진법변환프로그램 #include <stdio.h> int main() { int dec; printf(" 정수값을입력하세요 : "); scanf("%d", &dec); printf( \n입력된값은 8진수로 %#o입니다.\n", dec); printf(" 입력된값은 16진수로 %#x입니다.\n", dec); // 8 진수변환출력 // 16 진수변환출력 } return 0; 64

서식화된입력 서식화된입출력 (cont d) 표준형식입력함수 : scanf (scan formatted) 호출성공 : 입력에성공한필드 (field) 의개수를반환 EOF 를만나면 EOF 를반환 65

서식화된입출력 (cont d) 서식화된입력 (cont d) 필드명세 % 부호로시작하며정확히하나의필드 ( 변수 ) 를기술한다. 문자형식코드 (c) 를제외하고 scanf 는모든여백은건너뛴다. ( 입력의모든공백, 탭, 줄바꿈을무시한다.) 입력변환은다음과같은상황이발생할때까지입력문자를처리한다. 파일의끝 (EOF, end of file) 에도달했을때 부적절한문자를만났을때 읽은문자의수가명시된최대필드길이에도달했을때 모든필드명세에대하여대응되는변수가주소리스트에존재한다. C 에서 & 부호는주소연산자 (address operator) % <flag> <maximum width> <size> conversion-code 66

서식화된입출력 (cont d) 서식화된입력 (cont d) scanf 함수의서식지정자 서식지정자 %c %d, %i %o %x %u %f, %e, %g %lf, %LF %p %s %n %[] 의미입력데이터를하나의문자상수로읽어들임입력데이터를 10진수로읽어들임부호없는 8진수정수로읽어들임부호없는 16진수정수로읽어들임부호없는 10진수정수를읽어들임입력데이터를실수로읽어들임 (float) 입력데이터를실수로읽어들임 (double, long double) 포인터를읽어들임입력데이터를문자열로읽어들임읽어들인문자수를저장입력대상문자의필터링 (scanset의지정 ) 데이터형문자형정수형정수형정수형정수형실수형실수형포인터문자포인터정수포인터 67

서식화된입출력 (cont d) 프로그램예제 : 한문자를입력받고출력 #include <stdio.h> int main(void) { char ch; printf(" 한문자입력 : "); scanf("%c", &ch); printf(" 문자출력 : %c \n", ch); } return 0; 68

서식화된입출력 (cont d) 프로그램예제 : 두개의정수를입력후계산값출력 #include <stdio.h> int main(void) { int a, b; printf(" 두개의정수입력 : "); scanf("%d %d", &a, &b); printf("\n%3d + %3d = %3d\n", a, b, a + b); printf("%3d - %3d = %3d\n", a, b, a - b); } return 0; 69

서식화된입출력 (cont d) 프로그램예제 : 두개의실수를입력후계산값출력 #include <stdio.h> int main(void) { double f1, f2; printf(" 두개의실수입력 : "); scanf("%lf %lf", &f1, &f2); printf("\n%.2lf + %.2lf = %.2lf\n", f1, f2, f1 + f2); printf("%.2lf - %.2lf = %.2lf\n", f1, f2, f1 - f2); } return 0; 70

서식화된입출력 (cont d) 서식화된입력 (cont d) scanf 함수는문자열입력에적당한함수가아니다. 문자열에포함된공백문자로인해긴문장을입력받기에상당히불편 단어단위의입력에는 scanf 함수가적합할지모르겠으나, 문자열의입력은 gets 함수를사용하는편이훨씬효율적이다. scanf 함수의필터링기능 입력받을대상문자를선별 (filtering) 하기위해사용 원하지않는문자의입력을막을수있는유용한기능 %[A-Z] // 대문자 A-Z 사이의문자만받아들인다. %[A-Za-z0-9] // 영문자및숫자만받아들인다. %[^0-9] // 숫자를제외한모든문자를받아들인다. 71

서식화된입출력 (cont d) 서식화된입력 (cont d) scanf 함수사용예 표준입력으로부터한문자, 한정수그리고한실수 (float) 를읽는 scanf 함수를작성하라. X 31416 3.1416 scanf( %c %d %f, &c, &i, &x); 표준입력으로부터 2개의분수를읽어서분자와분모를각각다른정수변수에저장하는 scanf 함수를작성하라. 14/26 26/66 scanf( %d/%d %d/%d, &n1, &n2, &n3, &n4); 72

서식화된입출력 (cont d) 서식화된입출력함수 (cont d) scanf 함수사용예 (cont d) 123-456-7890 이와같은입력정보에서 - 을제외하려면... scanf( %d%*c%d%*c%d, &x, &y, &z); %*c 는키보드행버퍼의문자중에서현재읽고있는한문자를완전히제거 입력의경우오직하나의수정자 (*) 가있다 데이터를저장하지말것 을의미한다. 73

서식화된입출력 (cont d) 서식화된입출력함수 (cont d) scanf 함수사용예 수식을입력받고결과를아래와같이출력하려면? 10+20 enter // 입력 10 + 20 = 30 // 출력 int a, b; char op; printf( 수식을입력하시오 : ); scanf( %d%c%d, &a, &op, &b); printf( %d %c %d = %d n, a, op, b, a+b); 데이터입력시연산자사이에공백을줄수없다. 10 enter + enter 10 // 두번째값을채입력하기도전에여기서부터결과가출력된다. 474 = 484 // 그러면서그결과는정상적이지못하다. 74

서식화된입출력 (cont d) 서식화된입출력함수 (cont d) scanf 함수사용예 제어문자열속에공백이포함되어있으면 scanf 함수는모든공백류문자를무시하게된다. scanf( %d %c %d, &a, &op, &b); 10 enter + enter 20 enter 10 + 20 = 30 // 정상적인결과를출력한다. 75

C 프로그램구조 C 언어개요 C 언어기본문법 콘솔입출력 C 프로그램구조 수식 우선순위와결합성 혼합형형식 : 데이터형변환 논리적데이터와연산자 비트연산자 문장 76

수식 수식 (expression) 단일값으로변환하기위한피연산자와연산자의나열 연산자 (operator) 피연산자 (operand) 수식들은항상단일값으로변형된다. 수식의종류 일차식 (primary expression) a a + 5 5 이진식 (binary expression) 피연산자 연산자 피연산자 배정식 (assignment expression) 후위식 (postfix expression) 단항식 (unary expression) 콤마식 (comma expression) 삼원식 (ternary expression) 77

일차식 (primary expression) 수식 (cont d) a a 식별자 7 7 상수 (2 (2 + a --3) 3) 표현식 이름 (name) a b2000 price click INT_MAX size 상수 (constant) 5 123.98 A Clickseo 괄호식 (2 * 3 + 4) (a = 2 + b * 6) 78

이진식 (binary expression) 수식 (cont d) 피연사 - 연산자 - 피연산의결합에의해서구성 a a 피연산자 + 연산자 55 피연산자 79

이진식 (cont d) 수식 (cont d) 곱셈식 (multiplicative expression) 종류 * / % 내용두피연산자들의대수곱셈첫번째피연산자를두번째피연산자로나누는대수나눗셈 - 두피연산자가정수 정수몫 - 둘중어느한쪽의피연산자가부동소수점이면부동소수점몫첫번째피연산자를두번째피연산자로나눈나머지 (remainder) 정수곱셈 : 3 * 5 15 나눗셈 : 20 / 6 3 모듈로 : 20 % 6 2 부동소수점수 곱셉 : 3.1 * 5.2 16.12 나눗셈 : 20 / 6 3.333333 모듈러스 (Modulus) 연산자의두피연산자들은반드시정수형태가되어야한다. 80

수식 (cont d) 프로그램예제 : 이진식 #include <stdio.h> int main (void) { int a = 17; int b = 5; printf( %d + %d = %d\n, a, b, a + b); printf( %d - %d = %d\n, a, b, a - b); printf( %d * %d = %d\n, a, b, a * b); printf( %d / %d = %d\n, a, b, a / b); printf( %d %% %d = %d\n, a, b, a % b); } return 0; 81

수식 (cont d) 배정식 (assignment expression) 연산자 (=) 의오른쪽피연산자를평가하고, 그값을왼쪽변수에대입 하나의값과하나의결과 두가지형태 단일배정 (simple assignment) 혼합배정 (compound assignment) a a 변수 = 할당연산자 5 + 10 10 표현식 82

수식 (cont d) 배정식 (cont d) 단일배정 (simple assignment) a = 5 b = x + 1 i = i + 1 배정식에있어서왼쪽피연산자는하나의변수가되어야한다. 변수 x 의내용 변수 y 의내용 수식 수식값 수식의결과 10 5 x = y + 2 7 x = 7 10 5 x = x / y 2 x = 2 10 5 x = y % 4 1 x = 1 83

수식 (cont d) 배정식 (cont d) 복합배정 (compound assignment) : 단일배정에대한약칭표기 복합식 등가식 x *= y x /= y x %= y x += y x -= y x = x * y x = x / y x = x % y x = x + y x = x - y 변수 x 의내용 변수 y 의내용 수식 수식값 수식의결과 10 5 x *= y 50 x = 50 10 5 x /= y 2 x = 2 10 5 x %= y 0 x = 0 10 5 x += y 15 x = 15 10 5 x -= y 5 x = 5 만약복합배정이이진식과함께사용된다면이진식이먼저평가된다. x *= y + 3 x = x * (y + 3) 84

수식 (cont d) 프로그램예제 : 복합배정 #include <stdio.h> int main (void) { int x = 10, y = 5; printf("x : %2d y : %2d", x, y); printf(" x *= y : %2d", x *= y); printf(" x 의값 : %2d\n", x); x = 10; printf("x : %2d y : %2d", x, y); printf(" x /= y : %2d", x /= y); printf(" x 의값 : %2d\n", x); x = 10; printf("x : %2d y : %2d", x, y); printf(" x %%= y : %2d", x %= y); printf(" x 의값 : %2d\n", x); } return 0; 85

후위식 (postfix expression) 수식 (cont d) a++ 후위연산자 피연산자 함수호출 함수이름은피연산자이고연산자는이름뒤에오는괄호이다. 후위증가 (postfix increment) 와후위감소 (postfix decrement) a++ a = a + 1 a-- a = a - 1 86

수식 (cont d) 프로그램예제 : 후위증가 #include <stdio.h> int main (void) { int a; a = 4; printf( value of a : %2d\n, a); printf( value of a++ : %2d\n, a++); printf( new value of a : %2d\n, a); } return 0; 87

단항식 (unary expression) 수식 (cont d) 하나의연산자와하나의피연산자로구성 단항연산자 ++a 피연산자 88

수식 (cont d) 프로그램예제 : 전위증가 #include <stdio.h> int main (void) { int a; a = 4; printf( value of a : %2d\n, a); printf( value of ++a : %2d\n, ++a); printf( new value of a : %2d\n, a); } return 0; 89

프로그램예제 : 전위증가와후위증가 #include <stdio.h> void main(void) { int a = 30, b = 30; 수식 (cont d) printf("%d, %d\n", a, b); } printf("%d\n", ++a); printf("%d, %d\n", a, b); printf("%d\n", a++); printf("%d, %d\n", a, b); printf("%d\n", ++a + ++b); printf("%d, %d\n", a, b); printf("%d\n", b++ + b++); printf("%d, %d\n", a, b); 90

수식 (cont d) 단항식 (cont d) sizeof 연산자 sizeof (int) // byte 단위반환 x = sizeof (int) // sizeof 연산자의결과 ( 정수형의값 ) 를저장 sizeof (-345.23) // 일차식의크기를알아낼수있다. sizeof(x) 단항플러스 (unary plus) 와단항마이너스 (unary minus) 수식 +a -a +a -a 수식평가전 / 후 a의내용 3 3-5 -5 수식값 +3-3 -5 +5 91

우선순위와결합성 기능별분류 연산자 결합순서 우선순위 일차식 ( ) [ ] ->. 1 단항연산자! ~ ++ -- - + ( 형명 ) * & sizeof 2 승제연산자 * / % 3 가감연산자 + - 4 시프트연산자 << >> 5 비교연산자 < <= > >= 6 등가연산자 ==!= 7 & 8 비트연산자 ^ 9 10 논리연산자 && 11 12 조건연산자? : 13 대입연산자 = += -= *= /= %= >>= <<= &= ^= = 14 콤마연산자, 15 92

우선순위와결합성 (cont d) 우선순위 (precedence) 복잡한수식안에여러연산자들이평가되는경우에그순서를결정하기위해사용된다. 2 + 3 * 4 (2 + (3 * 4)) -b++ (-(b++)) 93

우선순위와결합성 (cont d) 결합성 (associativity) 왼쪽결합성 (left associativity) 왼쪽에서시작하여오른쪽으로이동해가면서수식을평가하는것 3 * 8 / 4 % 4 * 5 (((3 * 8) / 4) % 4) * 5) 오른쪽결합성 (right associativity) 오른쪽에서왼쪽으로진행해가면서수식을평가하는것 3 가지형식 : 단항식, 조건부삼원식, 그리고배정식 a += b *= c -= 5 (a += (b *= (c -= 5))) 94

혼합형형식 묵시적형변환 (implicit type conversion) C 가자동적으로어떤형식에서다른형식으로그형태를변형시키는것 수 식 char + float int long int * double float / long double (short + long)/ float 중간형식 float long double long double long then float 모든문자들은숫자값을가지고있기때문에문자를정수와부동소수점값에더할수있다. 95

수식에서의형변환 혼합형형식 (cont d) C 언어는수식하나에서로다른자료형을혼합하여사용하도록지원 C 언어는내부적으로정해진자동변환규칙에따라혼합식을처리 형확장 (type promotion) 하나이상의데이터형이혼합식을구성할때 가장큰데이터형에맞춰자동으로형변환이이루어지는규칙을적용 정수형확장 (integral promotion) 수식이계산되고있을때만유효 정수형확장이일어난다고해서변수의메모리공간이실제로커지는것은아니다. 96

프로그램예제 : 수식에서의형변환 #include <stdio.h> int main() { char ch; int i; float f; double d; 혼합형형식 (cont d) ch = 35; i = 35000; f = 1.3; // warning C4305: '=' : truncation from 'const double ' to 'float ' /* h는식이계산되는동안 char에서 int로형이확장되고, i와계산을수행한다. 계산된결과는다시 float 형으로확장되고, f와계산을수행한다. 정수형상수 30000도 float으로확장되고, 최종적으로계산된 rvalue는다시 double로형이확장된후 d에대입된다. */ d = ch * i * f + 30000; printf("result = %lf \n", d); return 0; } 97

프로그램예제 : float 으로형확장 #include <stdio.h> 혼합형형식 (cont d) int main() { short int i; float f; i = 10; f = 3.14f; /* i * f의연산도중컴파일러가 float 형의메모리공간을할당하고그값을출력할뿐이지 i의크기가실제로변하는것은아니다. */ printf("result = %f \n", i * f); } return 0; 98

치환에서의형변환 혼합형형식 (cont d) 오른쪽 rvalue 의값이왼쪽 lvalue 의데이터형으로변환되는규칙 데이터형이큰 rvalue 값을강제로 lvalue 에대입하고자한다면데이터의 손실 (demotion) 을감수해야한다. C 언어가어셈블리어수준에서의저수준프로그래밍을효과적으로지원할수 있어야하기때문이다. 99

혼합형형식 (cont d) 프로그램예제 : 정수형을문자형으로치환하는경우 #include <stdio.h> int main() { short int i; char ch; i = 128; // warning C4244: '=' : conversion from 'short ' to 'char ', possible loss of data ch = i; // 데이터손실발생 printf("i = %d, ch = %d \n", i, ch); } return 0; 100

혼합형형식 (cont d) 프로그램예제 : 실수형을정수형으로치환하는경우 #include <stdio.h> int main() { short int i; float f; f = 3.14f; // warning C4244: '=' : conversion from 'float ' to 'short ', possible loss of data i = f; // 소수부가잘려나간다. printf("f = %f, i = %d \n", f, i); } return 0; 101

혼합형형식 (cont d) 명시적형변환 (explicit type conversion) 임의로어떤형식에서다른형식으로데이터를변환시킨다. cast 수식연산자 (cast expression operator) (float) a // 피연산자는단항식이어야한다. (float) (x + y) // 두개의정수합을하나의부동소수로변형 average = (float) totalscores / numscores; (float) (a / 10); // a 가 3 이라면결과값은 0.0 (float) a/ 10 // 부동소수결과는숫자들중하나를명시적형변환 102

형변환연산자 혼합형형식 (cont d) 캐스트 (cast) 연산자를이용하여강제형변환 (type) value; float f = 10.25 printf( %d, (int) f); 103

혼합형형식 (cont d) 프로그램예제 : 캐스트연산자에의한형변환과치환문에서의형변환차이점 #include <stdio.h> int main() { double r1, r2; int result1, result2; r1 = 3.4; r2 = 2.1; // warning C4244: '=' : conversion from 'double ' to 'int ', possible loss of data result1 = r1 * r2; // 치환문에의한형변환 result2 = (int) r1 * (int) r2; // 캐스트연산자에의한강제형변환 printf("result1 = %d\n", result1); printf("result2 = %d\n", result2); return 0; } 104

논리적데이터와연산자 논리적데이터 (logical data) 실생활에서 예 - 아니요 와같은데이터 컴퓨터과학에서는참 (true) 과거짓 (false) 을사용한다. 105

논리적데이터와연산자 (cont d) 논리연산자 (logical operators) not 연산자 (!) 15 의선행을갖는단항연산자 (unary operator) 참값 (nonzero) 을거짓 (zero) 으로바꾸고, 거짓값 (0) 을참 (1) 으로바꾼다. and 연산자 (&&) 5 의선행을갖는이진연산자 (binary operator) or 연산자 ( ) 4 의선행을갖는이진연산자 만약값이 0 이면, 논리값이거짓으로사용된다. 만약값이 0 이아니면, 논리값은참으로사용된다. 106

논리적데이터와연산자 (cont d) 논리식평가 : 두가지방법 첫번째방법 결과가결정되기전에수식이완전히평가되어야한다. 2 가지경우처럼반드시참과거짓이된다하라도전체수식이평가되어야한다. 두번째방법 결과값이알려지자마자그결과값을설정것이다. 단축방식 (short-circuit fashion) 2가지경우처럼반드시참과거짓이된다면두번째식을평가하지않는다. C 에있어서평가는이러한단축방식을사용한다. 107

논리적데이터와연산자 (cont d) 프로그램예제 : 논리식 #include <stdio.h> int main (void) { int a = 5; int b = -3; int c = 0; printf(" %2d && %2d is %2d\n", a, b, a && b); printf(" %2d && %2d is %2d\n", a, c, a && c); printf(" %2d && %2d is %2d\n", c, a, c && a); printf(" %2d %2d is %2d\n", a, c, a c); printf(" %2d %2d is %2d\n", c, a, c a); printf(" %2d %2d is %2d\n", c, c, c c); printf("!%2d &&!%2d is %2d\n", a, c,!a &&!c); printf("!%2d && %2d is %2d\n", a, c,!a && c); printf(" %2d &&!%2d is %2d\n", a, c, a &&!c); return 0; } 108

논리적데이터와연산자 (cont d) 관계연산자 (relational operators) 두개의피연산자를받아서서로비교하는이진연산자들이다. 결과는논리적데이터이다 ( 즉, 항상참 (1) 과거짓 (0) 이다 ). 관계연산자 < <= > >= ==!= 의미 less than less than or equal greater than greater than or equal equal not equal 우선순위 10 9 109

논리적데이터와연산자 (cont d) 프로그램예제 : 관계연산자 #include <stdio.h> int main (void) { int a = 5; int b = -3; printf(" %2d < %2d is %2d\n", a, b, a < b); printf(" %2d == %2d is %2d\n", a, b, a == b); printf(" %2d!= %2d is %2d\n", a, b, a!= b); printf(" %2d > %2d is %2d\n", a, b, a > b); printf(" %2d <= %2d is %2d\n", a, b, a <= b); printf(" %2d >= %2d is %2d\n", a, b, a >= b); } return 0; 110

비트연산자 비트연산자 비트단위의정밀한데이터제어를위해사용 char 를포함한정수계산이가능한정수형데이터에서만동작 ( 주의 ) 피연산자로 double 이나 float 과같은부동형을사용할수없다. 구분 연산자 의미 비트논리연산자 시프트연산자 ~a a & b a b a ^ b a << n a >> n 1의보수연산 a와 b의비트단위논리곱 (AND) a와 b의비트단위논리합 (OR) a외 b의비트단위배타적논리합 (XOR) a의각비트를왼쪽으로 n만큼이동 a의각비트를오른쪽으로 n만큼이동 111

~ : 보수연산자 1 s complement operator 비트연산자 (cont d) 단항연산자로각각의데이터비트를반대로바꾼다. 1 은 0 으로 0 은 1 로바꾼다 ( 부호비트도반전 ). & : 논리곱 비트단위논리곱 (AND) 비트단위의논리곱 & 는특정비트값을 0 으로만들기위해주로사용 k = k & 0x00FF; 00110100 01000001 : k 00000000 11111111 : 0x00FF 00000000 01000001 : k & 0x00FF 논리곱 112

비트연산자 (cont d) : 논리합 비트단위논리합 (OR) 비트단위의논리합 은특정비트값을 1 로만들기위해주로사용 ^ : 배타적논리합 k = k 0xFF00; 00110100 01000001 : k 11111111 00000000 : 0xFF00 11111111 01000001 : k 0xFF00 논리합 비트단위배타적논리합 (XOR) 각각의비트가서로다를때 1이된다. 비트단위의배타적논리합은특정비트를반전시키기위해서사용한다. 배타적논리합 k = k ^ 0xFF00; 00110100 01000001 : k 11111111 00000000 : 0xFF00 11001011 01000001 : k ^ 0xFF00 113

비트연산자 (cont d) <<, >> : 좌측시프트, 우측시프트연산자 시프트연산자 주어진자릿수만큼비트를왼쪽또는오른쪽으로옮길수있는연산자 비트연산자의대상 : 정수 float 형이나 double 형에비트연산을할수없다. a = a << 8; 32............ 512 256 128 64 32 16 8 4 2 1 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 원래있던것은잘려나간다 하위 8bit 가왼쪽으로이동되어옴 이동된자리는 0 으로채워진다 114

비트연산자 (cont d) <<, >> : 좌측시프트, 우측시프트 l 부호있는정수인경우 a = a >> 1; ( 단, a 는 -1 : 11111111 11111111) 32............ 512 256 128 64 32 16 8 4 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 잘려나간다 부호비트가이동하면빈자리는부호비트로복사된다. 2 부호없는정수인경우 a = a >> 1; ( 단, a 는 -1 : 11111111 11111111) 32............ 512 256 128 64 32 16 8 4 2 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 잘려나간다 부호비트는 0 으로채워진다. 115

프로그램예제 : 비트연산자 #include <stdio.h> 비트연산자 (cont d) int main(void) { int a = 0x1111, b = 0xffff; printf(" a = %p, ~a = %p \n", a, ~a); printf(" b = %p, ~b = %p \n\n", b, ~b); printf("a & b = %p\n", a & b); printf("a b = %p\n", a b); printf("a ^ b = %p\n", a ^ b); } return 0; 116

비트연산자 (cont d) 프로그램예제 : 비트연산자 -- 좌측시프트연산자 #include <stdio.h> int main(void) { int a = 30; // 왼쪽으로 1비트씩 shift 할때마다값은 2배가된다. printf("a = %d\n", a); printf("a << 1 = %d\n", a << 1); printf("a << 2 = %d\n", a << 2); printf("a << 3 = %d\n", a << 3); printf("a << 4 = %d\n", a << 4); } return 0; 117

비트연산자 (cont d) 프로그램예제 : 비트연산자 -- 우측시프트연산자 #include <stdio.h> int main(void) { int a = 30; // 오른쪽으로 1비트씩 shift 할때마다값은 1/2이된다. printf("a = %d\n", a); printf("a >> 1 = %d\n", a >> 1); printf("a >> 2 = %d\n", a >> 2); printf("a >> 3 = %d\n", a >> 3); printf("a >> 4 = %d\n", a >> 4); } return 0; 118

문장 문장 (statement) 수식문 (expression statement) 복합문 (compound statement) 레이블문 (labeled statement) 선택문 (selection statement) 반복문 (iterative statement) 점프문 (jump statement) 119

문장 (cont d) 문장 (cont d) 수식문 (expression statement) 수식뒤에세미콜론 (;) 을놓음으로써문장으로변환된다. a = 2; a = b = 3; b; 3; ; ioresult = scanf( %d, &x); // scanf() 의반환된값을저장 120

문장 (cont d) 문장 (cont d) 복합문 (compound statement) 영 (zero) 또는그이상의문장으로구성되는코드단위 : 블록 (block) { int x; int y; int z; 모든 C 함수는함수몸체로알려진복합문을포함하고있다. } x = 1; y = 2;... 121

참고문헌 [1] 김일광, C 프로그래밍입문, 한빛미디어, pp. 24 102. [2] 윤성우, 열혈강의 C 프로그래밍, 프리렉, pp. 21 148. [3] 김진외 7 인공역, 구조적프로그래밍기법을위한 C, 인터비젼, pp. 28 134 [4] Brian W. Kernighan, Dennis M. Ritchie, The C Programming Language 2/e, 대영사, 10 74. 122