C Language Programming.hwp

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

OCW_C언어 기초

Microsoft PowerPoint - chap06-2pointer.ppt

슬라이드 1

PowerPoint 프레젠테이션

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

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

Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft PowerPoint - chap06-1Array.ppt

Microsoft PowerPoint - chap05-제어문.pptx

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

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

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

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

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

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

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

OCW_C언어 기초

설계란 무엇인가?

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

C 프로그램의 기본

11장 포인터

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

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

PowerPoint Presentation

02장.배열과 클래스

K&R2 Reference Manual 번역본

PowerPoint 프레젠테이션

OCW_C언어 기초

PowerPoint 프레젠테이션

KNK_C_05_Pointers_Arrays_structures_summary_v02

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

Microsoft PowerPoint - chap04-연산자.pptx

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

슬라이드 1

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

Microsoft PowerPoint - Chapter_04.pptx

구조체정의 자료형 (data types) 기본자료형 (primitive data types) : char, int, float 등과같이 C 언어에서제공하는자료형. 사용자정의자료형 (user-defined data types) : 다양한자료형을묶어서목적에따라새로운자료형을

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - chap-03.pptx

PowerPoint Presentation

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

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

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

11장 포인터

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

Microsoft PowerPoint - Lesson2.pptx

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

<4D F736F F F696E74202D20C1A633C0E52043C7C1B7CEB1D7B7A5B1B8BCBABFE4BCD2>

Data Structure

PowerPoint 프레젠테이션

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

슬라이드 1

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

Microsoft PowerPoint - 10장 문자열 pptx

PowerPoint 프레젠테이션

JAVA PROGRAMMING 실습 02. 표준 입출력

Microsoft PowerPoint - 제11장 포인터

Microsoft PowerPoint - chap01-C언어개요.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 - Perpect C 02.ppt [호환 모드]

Microsoft PowerPoint - C++ 5 .pptx

Microsoft PowerPoint - [2009] 02.pptx

Microsoft PowerPoint - c2.ppt

쉽게 풀어쓴 C 프로그래밍

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

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

Microsoft PowerPoint - chap12-고급기능.pptx

10 강. 쉘스크립트 l 쉘스크립트 Ÿ 쉘은명령어들을연속적으로실행하는인터프리터환경을제공 Ÿ 쉘스크립트는제어문과변수선언등이가능하며프로그래밍언어와유사 Ÿ 프로그래밍언어와스크립트언어 -프로그래밍언어를사용하는경우소스코드를컴파일하여실행가능한파일로만들어야함 -일반적으로실행파일은다

PowerPoint 프레젠테이션

chap7.key

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

슬라이드 1

1 장 C 언어복습 표준입출력배열포인터배열과포인터함수 const와포인터구조체컴파일러사용방법 C++ 프로그래밍입문

YRRZBRRLMCEQ.hwp

PowerPoint Presentation

untitled

Microsoft PowerPoint - 08-C-App-19-Quick-Preprocessor

5장. JSP와 Servlet 프로그래밍을 위한 기본 문법(완성-0421).hwp

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

PowerPoint 프레젠테이션

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

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

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

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

Microsoft PowerPoint - ch01.ppt

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

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

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

Microsoft PowerPoint - Chapter_02.pptx

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

Microsoft PowerPoint - chap-05.pptx

PowerPoint Template

<4D F736F F F696E74202D20C1A632C0E520C7C1B7CEB1D7B7A5B0B3B9DFB0FAC1A4>

PowerPoint Presentation

歯9장.PDF

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

PowerPoint Presentation

기초컴퓨터프로그래밍

Transcription:

Chapter 1. C 프로그래밍시작 1. C 언어란? - 프로그램을만들기위한각종언어들중한가지의언어 ( 우리가말을할때한국어를사용하고미국사람은영어, 일본사람을일본어를사용한다. 이처럼언어라는것은오직하나만있는것이아니듯프로그래밍언어도마찬가지로다양한언어가존재하는데그중한가지언어이다 ) - 사람과컴퓨터가대화하기위한매개체 ( 사람은컴퓨터에게어떤작업을시키길원하고컴퓨터는사람이시킨작업을수행해야한다. 그러나컴퓨터란 0,1만을이해할수있는기계이다. 즉, 사람은컴퓨터에게 0,1로이루어진명령을통하여작업을지시해야한다. 하지만사람이 0,1로이루어진명령을사용하기엔너무나어렵다. 그래서등장을한것이프로그래밍언어이다. 우리는프로그래밍언어를이용하여컴퓨터에게명령을전해줄수있는것이다. 사람은프로그래밍언어를알고컴퓨터는 0,1로이루어진명령 ( 기계어 ) 를알고있다. 하지만서로의언어를이해할수는없다, 그래서중간에서통역사역할을해주는장치가있는데그것을우리는컴파일러 (Compiler) 라고부른다, 컴파일러는프로그래밍언어와기계어를모두알고있어사람과컴퓨터의통역사역할을해주는것이다.) 사람이이해해기쉬운프로그래밍언어를 High-Level Language( 고급언어 ), 기계가이해하기쉬운프로그래밍언어를 Low-Level Language( 저급언어 ) 라고불리움 2. C 언어의역사와특징 Ⅰ. C 언어의역사 - C언어는 1971년경 Denis Ritchie와 Ken Thompson이라는사람이 UNIX라는운영체제시스템개발을위해설계한언어 - C언어란 B언어에서발전된언어이다그래서 C언어라는이름이붙게됨 ALGOL 60(1960년 )-> CPL(1963년 ) -> BCPL(1969년 ) -> B언어 (1970년) -> C언어 (1971년) 1

Ⅱ. C 언어의특징 - 절차지향적프로그래밍언어 - 높은이식성 - 높은효율성 - 상대적으로배우기가쉽지않음 3. 프로그램작성과정 - 프로그램작성 ( 소스파일 ) -> 컴파일 -> 링킹 -> 결과물생성 ( 실행파일 ) Ⅰ. 프로그램작성 - Mirosoft Visual Studio 2008 기준 1 작업공간 ( 솔루션 ) 만들기 ( 파일 -> 새로만들기 -> 프로젝트 ) 2

2 새프로젝트생성 ( Win32 -> Win32 콘솔응용프로그램 -> 이름입력후확인 ) ( 콘솔응용프로그램, 빈프로젝트선택후마침 ) 3

3 새프로젝트에소스파일추가 ( 소스파일우측클릭 -> 추가 -> 새항목 ) ( 템플릿 -> C++ 파일선택 -> 이름입력후확인 ) 이름입력시확장자를주지않으면 C++ 소스파일로생성되고.c 라는확장자를주면 C 소스파일로생성됨 4

3 소스작성 ( 현재는프로그램작성과정을확인하기위함이므로소스는예제와같이작성하고소스설명은뒤에서다시자세히함 ) #include <stdio.h> int main(void) { printf("hello World!\n"); return 0; } 5

Ⅱ. 컴파일 (Compile) - 컴퓨터가이해할수있는기계어로변환하는과정 ( 빌드 -> 컴파일 ) Ⅲ. 링크 (Link) - 컴파일된파일 ( 오브젝트파일 ) 을라이브러리파일과연결시켜주는단계 ( 빌드 -> 솔루션빌드 ) Ⅳ. 결과물 ( 실행파일 ) 실행 - 실행파일을실행하는방법은두가지가있다, 첫번째 Debug 폴더내에존재하는 [ 솔루션이름 ].exe 를실행하는방법, 두번째디버그의디버깅하지않고시작을선택 6

첫번째 : 명령프롬프트실행 ( 윈도우키 +R) -> 경로이동 -> [ 솔루션이름 ].exe 실행 두번째 : 디버그 -> 디버깅하지않고실행 7

4. 프로그램기본구성 Ⅰ. 함수 - 특정인자를받아결과값을반환하는개체 - C 언어프로그램은하나이상의함수가모여있는프로그램 Ⅱ. 함수의형태 - 함수이름 : 실행하고자하는함수의이름ㅤㅤ - 입력형태 : 함수를실행할때전달할인자의형태 - 출력형태 : 함수가실행되고종료될때반환되는값의형태 - 함수의몸체 : 함수의실행내용 Ⅲ. 메인함수 - C언어프로그램의가장핵심이되는함수 - 메인함수의호출은프로그램의시작을의미하고메인함수의끝은프로그램의종료를의미함 - 일반적인함수호출은사용자가하지만메인함수의호출은운영체제가함 Ⅳ. 헤더파일 - 함수의선언이포함되어있는파일 - 확장자는.h 를사용 8

- 사용자는미리정의되어있는함수를사용하기위해서는그함수가선언되어있는헤더파일을포함해야함 - 예를들어 printf라는함수를사용하기위해서는 printf가선언되어있는 stdio.h 라는헤더파일을포함해야함 stdio : standard input output 의약자로표준입출력관련함수들이선언되어있음 Ⅴ. 주석 (comment) - 컴파일의대상이되지않는코드, 즉프로그래머가코드중간에메모를하기위한용도로사용 - 주석은내가만든코드를다른사람이봤을때이해하기쉽게하기위함도있지만내가만든코드일지라도시간이지나면잊어버릴수있기때문에적절한주석은필수임 - 주석의사용방법 여러줄에걸쳐사용시 : /* 주석내용 */ 단일행에사용시 : // 주석내용 Ⅵ. 특수문자 (Escape Sequence) - 키보드에나타나지않는문자나화면에출력되지않는제어문자를사용하기 위한문자 - \( 백슬러시 ) 로시작됨 \ 기호가나타나지않는환경은 기호가백슬러시임 - 특수문자의종류 문자 기능 문자 기능 \n 다음줄로이동 (New Line) \t 탭간격만큼이동 \r 줄의처음으로이동 (Carriage return) \a 내부스피커를통해경고음출력 \b 왼쪽으로커서이동 (backspace) \0 널 (NULL) 문자 \\ 백슬러시 (\) 문자출력 \" 큰따옴표출력 9

Chapter 2. 데이터형, 변수, 상수 1. 데이터형 Ⅰ. 데이터형이란? - 데이터의형태 ( 정수, 실수, 문자 ) 를구분하며, 데이터의범위나부호의사용여부 등을결정짓는것 Ⅱ. 정수형 - 소수점이하를표현하지못하는데이터형 - unsigned 가붙으면부호가없는데이터형을의미함 데이터형 범위 크기 short -32,768 ~ 32767 2Byte int -2,147,483,648 ~ 2,147,483,647 4Byte long -2,147,483,648 ~ 2,147,483,647 4Byte unsigned short 0 ~ 65,535 2Byte unsigned int 0 ~ 4,294,967,295 4Byte unsigned long 0 ~ 4,294,967,295 4Byte int 형의크기는정해져있지않다, 32bit 환경일경우컴파일러에따라 2Byte 또는 4Byte 일수있다. Ⅲ. 실수형 - 소수점이하를표현할수있는데이터형 - 실수데이터형에는 unsigned를사용할수없음 - 실수는부동소수점방식으로표현함 - 부동소수점에는오차가존재하는데, 이때문에컴퓨터는정확한실수값을표현할수없음 데이터형 범위 크기 float 3.4 X 10-37 ~ 3.4 X 10 +38 4Byte double 1.7 X 10-307 ~ 1.7 X 10 +308 8Byte Ⅳ. 문자형 - 컴퓨터는 0,1의 2진수만을표현하기때문에문자를표현할수없음 - ASCII 코드를이용하여문자를표현 ASCII(American Standard Code for Information Interchange) : 미국표준협회 (ANSI, American National Standard Institute) 에서제정한문자의표현에대한약속 ( 표준 ) 데이터형 범위 크기 char -128 ~ 127 1Byte unsigned char 0 ~ 255 1Byte Ⅴ. 데이터의표현방식 10

1 2진수, 10진수, 16진수 - 2진수 : 두개의기호를이용해서값 ( 데이터 ) 를표현하는방식 - 10진수 : 열개의기호를이용해서값 ( 데이터 ) 를표현하는방식 - 16진수 : 열여섯개의기호를이용해서값 ( 데이터 ) 를표현하는방식 2 데이터의표현단위 ( 비트, 바이트 ) - 비트 (bit) : 컴퓨터가나타내는데이터의최소단위로서 2진수값하나를저장할수있는메모리공간을의미 - 바이트 (byte) : 데이터처리또는문자의최소단위로서 8개의비트가모여하나의바이트가구성됨 참고사항 - 1 nibble( 니블 ) : 1byte의반을의미, 즉 4bit의크기를가진단위 - 1 word( 워드 ) : CPU가처리할수있는데이터의크기로서 32bit CPU는 1word=32bit 이고 64bit CPU는 1word=64bit를의미 11

3 정수의표현방식 - 모든정수의가장왼쪽에있는비트는 MSB(Most Significant Bit) 라는비트 - MSB란부호를나타내기위한영역으로서 0이면양수, 1이면음수를의미함 - MSB비트를제외한나머지비트는크기를나타내는데사용 4 음의정수의표현방식 - 음의정수는우리가생각하는일반적인방식으로사용하면안됨 - 음의정수를표현시에는 2 의보수라는것을사용 - 2 의보수란 1 의보수에 1 을더한값 (1 의보수는 0 과 1 을뒤집은값 ) 12

5 실수의표현방식 - 실수를표현하는방식을정수표현방식과같이표현하면표현할수있는 범위가매우작음 - 넓은범위의실수를표현하기위하여정의된수식을이용하여사용 - 정의된수식을이용하면넓은범위의실수를표현가능하지만오차존재한다는 단점이있음, 이오차를 부동소수점오차 라부름 부동소수점오차에대한문제는컴퓨터의문제이기때문에 C 언어에국한된 문제가아님, 따라서다른프로그래밍언어들도같은문제를가지고있음 2. 변수 Ⅰ. 변수란? - 데이터를저장할수있는메모리공간에붙여진이름 ( 메모리공간자체 ) 을의미함 - 변수는정수형변수와실수형변수로나뉨 정수형변수 : char형, int형, long형 실수형변수 : float형, double형 Ⅱ. 변수선언 - 변수를선언하면메모리에공간이할당되고변수이름으로그공간에접근할수있음 - 선언되지않은변수를사용하면에러가발생함 - 변수의선언은항상함수의선두부분에해야함 - 변수를선언하면할당된메모리공간에의미없는값 (= 쓰레기값 ) 이들어있음 데이터형변수명 ; ex) int val; 변수선언시이름은반드시의미를지니는이름을주려고노력해야함, 또한연산을수행하는모든문장들은세미콜론 (;) 으로끝나야함 13

Ⅲ. 변수이름작성규칙 1 변수의이름은알파벳, 숫자, 언더바 (_) 로구성 2 C언어는대소문자를구분, 따라서변수 Val 과 val은서로다른변수임 3 변수의이름은숫자로시작할수없고, 키워드 ( 예약어 ) 를사용하는것도불가능 4 공백이나특수기호포함될수없음 잘못사용된변수이름 int 1st int mail@address int my name int for 잘못된이유변수의이름이숫자로시작변수이름에특수기호사용변수이름에공백사용변수이름에키워드 ( 예약어 ) 사용 키워드 ( 예약어 ) - C99 기준 auto _Bool break case char _Complex const continue default restrict do double else enum extern float for goto if _Imaginary inline int long register return short signed sizeof static struct switch typedef union unsigned void volatile while - C99란? : 1999년도에정의된 C언어의표준을뜻함, 이는 C언어의가장최근표준을의미 하는것으로이전의표준과는조금차이가남, 그러나대부분이전의표준을변경하는 형태가아니라추가하는형태로변경된것이기때문에이로인한문제는걱정하지 않아도됨 Ⅳ. 변수사용방법 - 변수초기화 ( 변수에값을대입하는과정을뜻함 ) int val; // val 이라는이름을가진 int 형의변수선언 val = 10; // val 이라는메모리공간에 10 이라는값을대입 - 변수선언과동시에초기화 int val = 10; // val 이라는이름을가진 int 형의변수선언하고할당된 // 메모리영역에 10 이라는값을대입 - 같은형의변수여러개선언 int val1, val2; // val1, val2 라는이름을가진 int 형의변수선언 14

3. 상수 Ⅰ. 상수란? - 한번값을초기화하면변경할수없는공간으로선언하면서초기화해야함 Ⅱ. 리터럴 (Literal) 상수 - 이름이없는상수, 어떤값자체를의미함 - 위그림의 30 과 40 같이프로그램상에표현되는숫자도메모리에저장이되어야 함, 이처럼저장되는값은이름이존재하지않기때문에값을변경할수없음 - 1 단계 : 정수 30 과 40 이메모리공간에상수형태로저장됨 - 2 단계 : 두상수를기반으로 CPU 가덧셈을함 - 3 단계 : 덧셈의결과로얻어진정수 70 이변수 num 에저장됨 1 정수상수 - 소수점이하가없는데이터 - 0으로시작하면 8진수, 0x로시작하면 16진수를의미함 - 정수상수는메모리에 4Byte로저장 - 정수상수뒤에 L(l) 을붙이면 Long형으로표현됨 int val1 = 10; int val2 = 010; int val3 = 0x10; long val4 = 10L; // 10진수정수 // 8진수정수 // 16진수정수 // long형정수 2 실수상수 - 소수점이하가있는데이터, 지수형태도포함 - 실수상수는메모리에 8Byte로저장 - F(f) 을붙이면 4Byte로저장됨 15

double val1 = 1.2; double val2 = 1.234E+02; float val3 = 1.2f; 3 문자상수 - 문자한글자를의미함 - 작은따옴표 ( ) 안에표기함 - 특수문자 (Escape Sequence) 도문자상수에포함 char val1 = 'A'; char val2 = '\n'; 4 문자열상수 - 문자두글자이상을의미함 - 큰따옴표 ( ) 안에표기함 문자열상수는뒤에서다시배우도록함 Hello","World","Hi","010-xxxx-xxxx" Ⅲ. 심볼릭 (Symbolic) 상수 - 이름이있는상수 - 상수의이름은일반적으로대문자로선언하고함 - const 키워드를붙여선언한변수와매크로를이용한상수를의미함 매크로상수는뒤에서다시배우도록함 16

Chapter 3. 자료의입출력 1. 스트림과자료전송 Ⅰ. 스트림 (Stream) 이란? - 운영체제는키보드, 모니터, 프린트, 파일등을스트림이라는동등한장치로처리함즉, 입출력장치는다르지만스트림이라는논리적인동등한장치로표현되기때문에동일한방법으로입출력이가능함 - 표준스트림 이름 스트림의종류 입출력장치 stdin 표준입력스트림 키보드 stdout 표준출력스트림 모니터 stderr 표준에러스트림 모니터 Ⅱ. 버퍼 (Buffer) - 표준입출력함수 (printf, scanf...) 는스트림내에버퍼를사용함 - 버퍼란임시기억장소 ( 임시저장공간 ) 를말함 - 입출력데이터는한번에하나씩전송되는것이아니라버퍼에저장되었다가일정순간에입출력이됨 - 버퍼의데이터가입출력이되면버퍼의데이터는비워짐 Ⅲ. 버퍼비우기 - 데이터처리중버퍼에남아있는데이터를제거할필요성이있음 - 버퍼를비울때는 fflush라는함수를사용 - 입력버퍼를비우면버퍼안에데이터는삭제되며, 출력버퍼를비우면버퍼의내용이화면에즉시출력되고버퍼는비워짐 - 입력버퍼비우기 : fflush(stdin); - 출력버퍼비우기 : fflush(stdout); 17

2. 출력함수 Ⅰ. printf 함수란? - 문자열을화면에출력하는함수 - 출력하고자하는문자열을큰따옴표 ( ) 안에입력 - 특수문자출력이가능함 - 서식화된출력이가능함 Ⅱ. 특수문자출력 - 특수문자가필요한이유 ex) C언어정말재미있다. 정말! 대박! 재미있다. printf("c언어정말재미있다. " 정말! 대박!" 재미있다."); -> 위의문장을컴파일하면에러가발생 -> 이유는컴파일러는첫번째큰따옴표를만나는시점을문자열의시작으로인식하고두번째큰따옴표를만나는시점을문자열의끝으로인식함때문에위의코드에서 [ 정말! 대박!] 부분의문자열을인식하지못하여컴파일러는에러를발생시킴 printf("c 언어정말재미있다. \" 정말! 대박!\" 재미있다."); -> \" 같은특수문자를이용하면큰따옴표를출력할수있음 Ⅱ. 서식문자를이용한출력 - printf 의 f 는 formatted( 서식화된 ) 을의미함 - 서식문자의종류와의미 서식문자 출력형태 %c 단일문자 %d 부호있는 10진정수 %i 부호있는 10진정수, %d와같음 %f 부호있는 10진실수 %s 문자열 %o 부호없는 8진정수 %u 부호없는 10진정수 %x 부호없는 16진정수, 소문자사용 %X 부호없는 16진정수, 대문자사용 %e e 표기법에의한실수 %E E 표기법에의한실수 %g 값에따라서 %f, %e 둘중하나를선택 %G 값에따라서 %f, %E 둘중하나를선택 %p 포인터의번지출력 %% % 기호출력 Ⅲ. 옵션지정자를이용한출력 - 출력시필드의폭, 정렬, 정확도를나타내기위한옵션지정자 18

서식문자 출력형태 %7d 필드폭을 7칸확보하고우측정렬하여출력 %+7d 필드폭을 7칸확보하고우측정렬하여출력, 양수면 +, 음수는 -를붙여서출력 %-7d 필드폭을 7칸확보하고좌측정렬하여출력 %07d 필드폭을 7칸확보하고우측정렬하여출력, 빈공간발생시 0으로채움 %7.2f 필드폭을 7칸확보하고우측정렬하여출력, 소수점이하두자리만출력 Ⅳ. 실수의출력을위한서식문자 (%f, %e) - 컴퓨터는지수를표현할수없으므로 e 표기법으로지수를대신표현 Ⅴ. %g의실수출력과 %s의문자열출력 - %g는실수의형태에따라서 %f와 %e사이에서적절한형태의출력을진행 - %g와 %G의차이점은 e 표기법의 e를 %g는소문자 %G는대문자로출력 - %s는문자열을출력하기위한서식문자 문자열출력과관련해서는뒤에서다시배우도록함 19

3. 입력함수 Ⅰ. scanf 함수란? - 서식에맞게버퍼의내용을꺼내오는함수 - 버퍼에내용이없을시키보드로부터입력받아버퍼에저장 - 변수명앞에는주소를의미하는 & 연산자를붙여야함 & 연산자를붙이는이유는뒤에서다시배우도록함 - 두개이상의입력을받을시에는서식문자사이의문자가입력의구분기호가됨 Ⅱ. 정수기반의입력형태정의 - 데이터를입력받는 scanf 함수에게는두가지정보를전달 입력의형식 : 어떻게받아들일거니? 입력의장소 : 어디에저장할까? - 서식문자의의미는출력을입력으로만변경하면 printf 함수와유사함 20

%d : 10 진수정수의형태로데이터를입력받음 %o : 8 진수양의정수의형태로데이터를입력받음 %x : 16 진수양의정수의형태로데이터를입력받음 Ⅲ. 실수기반의입력형태정의 - printf함수에서는서식문자 %f,%e,%g의의미가다르지만 scanf함수에서는 'float형데이터를입력받겠다 ' 라는동일한의미를지님 - double형 long double형데이터의삽입을위한서식문자 %lf : double (%f에 l이추가된형태 ) %Lf : long double (%f에 L이추가된형태 ) 21

22

Chapter 4. 연산자 1. 산술연산자 - 정수연산의결과는정수이며, 정수와실수연산의결과는실수 - 정수나눗셈의결과가양수면소수점아래를버리고, 음수면소수점아래를올림 - 나머지를구하는 % 연산자는정수연산에만사용할수있음 연산자 연산자의의미 결합성 + 왼쪽과오른쪽에있는값을더함 - 왼쪽에있는값에서오른쪽에있는값을뺌 * 왼쪽과오른쪽에있는값을곱함 / 왼쪽에있는값을오른쪽에있는값으로나눔 % 왼쪽에있는값을오른쪽에있는값으로나눠서나머지를반환 2. 대입연산자 - 변수와연산후다시그변수에대입하는경우사용하는연산자를말함 연산자 연산자의의미 결합성 = 오른쪽값을왼쪽으로대입 += 왼쪽과오른쪽값을더한값왼쪽에대입 -= 왼쪽과오른쪽값을뺀값왼쪽에대입 *= 왼쪽과오른쪽값을곱한값왼쪽에대입 /= 왼쪽과오른쪽값을나눈값왼쪽에대입 %= 왼쪽과오른쪽값을나눈나머지값왼쪽에대입 23

3. 증가, 감소연산자 - 값을하나증가, 하나감소시키는경우에사용되는단항연산자 전치연산 ( 증감연산자가변수앞에나오는경우 ) : 변수에저장된값을증 / 감시킨후연산 후치연산 ( 증감연산자가변수뒤에나오는경우 ) : 연산수행후변수에저장된값을증 / 감 연산자 연산자의의미 결합성 ++a 값을 1증가후연산을진행 ( 선증가, 후연산 ) a++ 연산을진행한후값을 1 증가 ( 선연산, 후증가 ) --b 값을 1 감소후연산을진행 ( 선감소, 후연산 ) b-- 연산을진행한후값을 1 감소 ( 선연산, 후감소 ) 24

25

4. 관계연산자 - 두개의변수의관계를따지는연산자, 다른말로비교연산자라고도함 - 관계연산자는조건을만족하면 true(1), 만족하지못하면 false(0) 을반환 일반적으로참은 1, 거짓은 0 이지만사실 0 이외의값은모두참으로처리함 연산자 연산자의의미 결합성 < ex) a<b a가 b보다작은가? > ex) a>b a가 b보다큰가? == ex) a==b a와 b가같은가?!= ex) a!=b a와 b가같지않은가? <= ex) a<=b a가 b보다작거나같은가? >= ex) a>=b a가 b보다크거나작은가? 26

5. 논리연산자 - 여러조건을동시에검사할때주로사용되는연산자 - and( 그리고 ), or( 또는 ), not( 그러나 ) 를표현하는연산자 연산자 연산자의의미 결합성 && 피연산자가모두참이면 true를반환 (and의의미 ) 피연산자중하나라도참이면 true를반환 (or의의미 )! 피연산자가 true면 false를, false면 true를반환 (not의의미 ) 27

6. 비트연산자 - 2 진수로변환하여비트단위의연산을수행하는연산자 - int, short, long 형데이터에서만사용가능 - 주로하드웨어를직접제어하거나한글등을처리할때이용 연산자 연산자의의미 결합성 & 비트단위 AND ex) a & b 비트단위 OR ex) a b ^ 비트단위 XOR ex) a ^ b ~ 비트단위 NOT ex) ~a << 왼쪽으로이동 ( 쉬프트 ) ex) a << 2 >> 오른쪽으로이동 ( 쉬프트 ) ex) a >> 2 Ⅰ. & 연산자비트단위 AND 28

Ⅱ. 연산자비트단위 OR Ⅲ. ^ 연산자비트단위 XOR 29

Ⅳ. ~ 연산자비트단위 NOT Ⅴ. << 연산자비트의왼쪽이동 ( 쉬프트 ) 30

Ⅵ. >> 연산자비트의오른쪽이동 ( 쉬프트 ) 오른쪽이동으로인한왼쪽의빈자리를채울때시스템에따라 1 로채워지는경우와 0 으로채워지는경우가있음, 따라서호환성이요구되는경우에는사용을자제해야함 7. 기타연산자 Ⅰ. 콤마연산자 (,) - 둘이상의변수를동시에선언하거나둘이상의문장을한행에삽입하는경우에사용되는연산자 - 둘이상의인자를함수로전달할때인자의구분을목적으로도사용 - 콤마연산자는다른연산자들과달리연산의결과가아닌 ' 구분 ' 을목적으로함 Ⅱ. 조건연산자 - 조건을판별하여조건이참인경우참을실행하고거짓인경우거짓을수행 - [ 조건 ]? [ 참 ] : [ 거짓 ] Ⅲ. sizeof 연산자 - 데이터형, 상수, 변수, 수식에대한기억장소의크기 (byte) 를구하는연산자 - sizeof( 데이터 ); Ⅳ. 형변환연산자 - 이미지정된변수의데이터형을일시적으로다른데이터형으로변환하는연산자 - ( 데이터형 ) 변수 ; 31

8. 연산자우선순위 우선순위 연산자 결합성 우선순위 괄호, 구조체, 공용체 () []. -> 단항연산자! ~ ++ -- - + * & sizeof cast 승제 * / % 가감 + - SHIFT << >> 이항연산자 비교 < > <= => 등가 ==!= bit AND & bit XOR ^ bit OR 높음 낮음 논리 AND && 논리 OR 조건연산자? : 대입연산자 = += -= *= /= %= >>= <<= &= ^= = 콤마연산자, 32

Chapter 5. 제어문 Ⅰ 1. 제어문의종류 조건문 반복문 기타제어문 if switch for while do~while break continue 2. 조건문 - 흐름의분기가필요한이유 33

Ⅰ. if문 1 단순 if문 - 조건식을판별하여조건이참이면중괄호 ({}) 안의명령문을수행하고, 거짓이면중괄호 ({}) 안의명령문을점프후다음명령을수행하는가장단순한형태의조건문 조건에따라수행해야할명령문이한개일경우중괄호는생략가능 1) 단순 if문사용예 if( 조건 ) { 명령문 1; 명령문 2;... 명령문 n; } 다음명령 ; 2) 단순 if 문사용예 ( 중괄호생략 ) if( 조건 ) 명령문 ; 다음명령 ; 34

2 if ~ else 문 - 둘중한개를선택하는조건문으로조건이참인경우와거짓인경우에수행하는명령이다름 - if문의조건이만족하지못하면 else문이수행 else 다음에는절대로조건을쓸수없음 - 조건에따라수행해야할명령문이한개일경우에는중괄호는생략가능 35

3 다중 if문 (if, else if, else) - 여러개중한개를선택하는경우사용하는조건문으로조건에따라수행되는명령문이다름 - 다중 if문은위에있는조건부터차례대로비교하면서내려오게되는데조건이참이되어명령을수행하게되면아래있는나머지조건은비교하지않고다중 if문전체를빠져나옴 - 조건에따라수행해야할명령문이한개일경우에는중괄호는생략가능 36

Ⅱ. switch문 - 변수의값을 case에서찾아명령을수행하는조건문 - 해당하는값이없을경우에는 default의명령문을수행 case 와명령문사이에는콜론 (:) 을써야함 switch( 변수 ) { case 상수 : 명령문 ; break; case 상수 : 명령문 ;... case 상수 : 명령문 ; default: 명령문 ; } 37

38

39

- switch 문과 if~else 문의비교 switch 문을사용하면 if~else 문보다간결하게작성할수있음 조건에연산을필요로하는경우는 switch 문으로사용할수없음 40

Chapter 6. 제어문 Ⅱ 1. 반복문 - 하나이상의문장을두번이상반복실행하기위해구성하는문장 Ⅰ. for문 - 조건이참인경우중괄호 ({}) 안의명령문을반복적으로수행하는제어문 - for문의괄호안에는 3개의명령을쓸수있는데이명령은세미콜론 (;) 으로분리 - 3개의명령중필요없는명령은생략가능하며, 모든명령을생략하면무한루프임 - 조건에따라수행해야할명령문이한개일경우에는중괄호 ({}) 생략가능 for문내에서초기값과증 / 감값이여러개인경우콤마 (,) 로나열할수있다. 그러나조건이여러개인경우는콤마 (,) 로나열하는것이아니라 &&(AND) 또는 (OR) 연산자로조건을연결해야한다. 만약, 조건을콤마로나열시가장우측에있는조건만수행된다. 단, for문내에서너무많은연산식을사용할시프로그램분석에어려움이따를수있기때문에적절하게사용하는것이좋다. for( 초기값 ; 조건 ; 증감값 ) { 명령문1; 명령문2;... 명령문n; } 초기값 : 본격적으로반복을시작하기에앞서딱한번실행 조건 : 매반복의시작에앞서실행되며, 그결과를기반으로반복유무를결정 증감식 : 매반복실행후마지막에연산이이루어짐 41

42

Ⅱ. 다중 for문 - for문안에 for문이들어간형태로내부의명령을외부의횟수만큼반복하게됨 for( 초기값 ; 조건 ; 증감값 ) { for( 초기값 ; 조건 ; 증감값 ) { 명령문1; 명령문2;... 명령문n; } } 43

Chapter 7. 제어문 Ⅲ 1. 반복문 Ⅰ. while 문 - 조건이참인경우중괄호 ({}) 안의명령문을반복적으로수행하는제어문 - 조건에따라수행해야할명령문이한개일경우에는중괄호는생략가능 while( 조건 ) { 명령문1; 명령문2;... 명령문n; } Ⅱ. do ~ while문 - 명령문을먼저실행하고조건을비교하는반복문 - 반드시한번은명령문이수행됨 - while문뒤에세미콜론 (;) 을써야함 - 조건에따라수행해야할명령문이한개일경우에는중괄호생략가능 44

do { 명령문1; 명령문2;... 명령문n; }while( 조건 ); 45

2. 기타제어문 Ⅰ. break 문 - 반복명령의실행도중강제적으로빠져나올때사용되는명령 - 여러개의반복문이중첩되어있는경우가장안쪽반복문한개만빠져나옴 Ⅱ. continue 문 - 반복문의나머지부분을무시하고그반복문의선두로이동할때사용되는명령 Ⅲ. goto문 - 조건없이지정한곳으로무조건점프하는제어문 - 쉽게사용할수있다는장점이있지만프로그램의구조를복잡하게만들기때문에자주쓰이지않음 - goto로옮길지점을레이블로표시하며, 레이블다음에는콜론 (:) 을붙여사용 #include <stdio.h> int main(void) { int i=0; } label: // 레이블표시 i++; if(i<=100) { if(i%2==0) { printf("%2d ", i); if(i==50) printf("\n"); } goto label; // goto 사용 } printf("\n"); return 0; 46

Chapter 8. 1 차원배열 1. 배열 (array) - 배열은같은타입의변수가여러개필요한경우이용 - 배열은같은타입의변수가하나의배열이름에연속적인메모리에할당 2. 1 차원배열의선언 - 배열선언시 3 가지정보가필요함 ( 배열의자료형, 배열의이름, 배열의길이 ) - 배열선언시배열의길이는반드시정수상수로선언 47

3. 1 차원배열의접근 - 배열은같은이름의변수가연속적인메모리에할당되어있기때문에배열이름에 인덱스 ( 요소의위치 ) 를이용하여각각의변수를구별함 - 인덱스는항상 0 부터시작하기때문에마지막인덱스는배열의크기보다항상 1 이작음 48

4. 1 차원배열의초기화 - 배열의초기값은여러개존재하기때문에중괄호 ({}) 안에차례로씀 - 배열의크기보다적은개수의초기값을할당하게되면나머지배열의값은무조건 0 으로초기화됨 - 초기값을입력하고배열의크기를생략하면초기값의개수가묵시적으로배열의크기가됨 49

50

5. char 형배열의문자열저장과널문자 - 문자열의끝에는문자열의끝을의미하는널문자 (\0) 이삽입이됨 6. 널문자와공백문자의비교 - 널문자를 %c 를이용해서출력시아무것도출력되지않음 - 널문자의 ASCII 코드값은 0 이고, 공백문자의 ASCII 코드값은 32 - 널문자는모니터출력에서의미를갖지않기때문에아무것도출력이안됨 51

7. 문자열끝에널문자가필요한이유 - 문자열의시작은판단할수있어도문자열의끝은판단이불가능함, 때문에 문자열의끝을판단할수있도록널문자가삽입됨 52

Chapter 9. 다차원배열 1. 다차원배열 - 2 차원, 3 차원등의배열을다차원배열이라함 2. 2 차원배열의선언 - 2 차원배열은행과열로구성된형태로, 첫번째크기는행을의미하며두번째크기는 열을의미 - 행과열은논리적인표현일뿐, 실제메모리는 1 차원배열과같은방식으로할당됨 int arr1[3][4]; int arr1[3][4]; 53

3. 2 차원배열의접근 - 1 차원과마찬가지로다차원배열도인덱스를사용 - 1 차원에서는인덱스를한개를사용, 2 차원배열은두개의인덱스를사용한다 즉, n 차원배열은 n 개의인덱스를사용함 54

55

4. 2 차원배열초기화 - 초기화리스트안에행단위로초기화할값들을별도의중괄호로명시 - 채워지지않은공간은 0 으로채워짐 - 별도의중괄호를사용하지않으면좌상단부터우하단순으로초기화 - 별도의중괄호없이한줄에표현도가능 56

57

5. 배열의크기지정없이초기화 - 두개가모두비면컴파일러가채워넣을숫자를결정하지못함 - 세로길이만생략할수있도록약속되어있음 58

Chapter 10. 함수와기억클래스 1. 함수란? - main함수안에모든프로그램을작성하면전체프로그램이복잡해지고이해하기어려움 - 프로그램을기능별로분리된단위프로그램으로나누어정의함으로써코드의재사용이나유지보수가용이함 - 중복되는작업의중복을피할수있음 2. 함수의정의 리턴타입함수명 ( 데이터형변수1, 데이터형변수2,..., 데이터형변수n) {... return 값 ; } 리턴타입 - int, char, void,... 등을쓸수있으며리턴시돌려주는값의데이터형사용 - 리턴시돌려주는값이없을경우 void를사용 리턴타입이 void인경우 return은생략가능 함수명 - 함수명은가급적이면의미있는이름으로정하며, 변수명을정하는규칙과같음 함수의괄호 - 호출부에서전달한값을받을변수선언 - 전달하는개수와데이터형은일치해야함 - 전달인수가여러개일경우콤마 (,) 로구분, 없을경우생략가능 return - 함수를호출한곳으로결과값을돌려주며, 함수를탈출 3. 함수의선언 - 함수의선언은컴파일러에게함수의정보를알려주는역할을하며, 이정보를이용하여컴파일러는함수사용에관련된오류를검사함 - 함수선언은메인함수전에함 - 함수선언은함수호출이전에하며, 함수정의부분끝에세미콜론 (;) 을추가함 - 함수선언시전달인자 ( 매개변수 ) 의이름은생략가능 - 함수정의부를함수호출이전에두면, 함수선언은생략가능리턴타입함수명 ( 데이터형변수1, 데이터형변수2,..., 데이터형변수n); 59

60

4. 함수의구분 - 함수는전달인자와반환값의유무에따라 4가지유형이있음 1 전달인자 (O), 반환값 (O) 2 전달인자 (O), 반환값 (X) 3 전달인자 (X), 반환값 (O) 4 전달인자 (O), 반환값 (X) 61

- 유형 1 인경우 - 유형 2,3,4 인경우 62

5. 기억클래스 - 변수는데이터형 (Data Type) 과기억클래스 (Storage Class) 를가지고있음 - 데이터형은변수의크기와어떤타입의데이터를처리할것인가를결정 - 기억클래스는변수가사용되는유효범위와초기화방법을결정 Ⅰ. 지역변수 - 함수내에선언되는변수로선언된함수내에서만접근이가능 - 함수가종료되면메모리에서소멸 - 매개변수 ( 전달인자 ) 도지역변수에포함 - 초기화하지않으면쓰레기값을갖음 63

Ⅱ. 전역변수 - 함수외부에서선언된변수 - 프로그램의시작과동시에메모리공간에할당되어종료시까지존재함 - 별도의값으로초기화하지않으면 0 으로초기화 - 프로그램전체영역어디서든접근이가능 64

Ⅲ. 정적변수 - static 을붙여선언된변수를말함 - 선언된함수내에서만접근이가능 ( 지역변수특징 ) - 프로그램실행시메모리가단한번할당되며프로그램이종료되면메모리에서소멸 ( 전역변수특징 ) 65

66

Chapter 11. 포인터의이해 1. 포인터 - 포인터란메모리의주소를저장하기위한변수 - 포인터또한변수이기때문에포인터변수라고함 2. & 연산자 - & 연산자를이용하면변수의주소를구할수있음 포인터변수의크기는시스템의주소값크기에따라다름 16비트시스템 -> 주소값크기 16비트 -> 포인터변수의크기 16비트 32비트시스템 -> 주소값크기 32비트 -> 포인터변수의크기 32비트 67

3. 포인터선언 - 포인터를선언할때에는 * 연산자를사용 - 포인터의데이터형은주소를저장하는변수의데이터형과일치해야함 포인터는데이터형에상관없이모두 4byte(32 비트기준 ) - 포인터변수선언에서 * 의위치에따른차이는없음 4. * 연산자 - 포인터변수앞에 * 연산자를쓰면포인터가참조하는메모리에접근할수있음 - 포인터를이용한메모리접근방식을간접접근 (Indirect Access) 라고함 - 포인터는간접접근을위해서데이터형이존재해야함 68

5. * 연산자용도 연산자 용도 형식 사용예 a*b; 곱하기 * 포인터 ( 주소를저장하는변수 ) 간접접근 ( 포인터가가리키는값 ) 변수또는상수 x*3; 5*5; 데이터형 * 변수명 int *p; double *dp; * 포인터명 *p; *dp; 6. 잘못된포인터사용과널포인터 - 잘못된포인터 ptr이쓰레기값으로초기화됨, 따라서 200이저장되는위치를알수없음 - 널포인터잘못된포인터연산을막기위해서특정한값으로초기화하지않는경우에는널포인터로초기화하는것이안전함 널포인터 NULL은숫자 0을의미, 0은 0번지를뜻하는것이아니라아무것도가리키지않는다는의미로해석됨 69

7. 배열과포인터 Ⅰ. 배열이름의의미 - 배열의이름은배열의시작주소값을의미하는 ( 배열의첫번째요소를가리키는 ) 포인터 - 단순히주소값이아닌포인터인이유는메모리접근에사용되는 * 연산이가능하기때문 Ⅱ. 배열이름과포인터변수의비교 70

Ⅲ. 포인터연산 - 포인터는연산시가리키는데이터형의크기만큼증가및감소함 71

- arr[i] == *(arr+i) - 배열이름을포인터처럼사용할수있음 - 포인터를배열처럼사용할수있음 72

Chapter 12. 포인터와함수 1. 함수의데이터전달방법 Ⅰ. 값에의한전달 (Call-by-Value) - 함수를호출할때단순히값을전달하는형태의함수호출 - 함수외부의선언된변수에접근이불가능 Ⅱ. 주소에의한전달 (Call-by-Reference) - 함수를호출할때메모리접근에사용되는주소값을전달하는형태의함수호출 - 함수외부의선언된변수에접근이가능 Ⅲ. 값에의한전달과주소에의한전달비교 - Call-by-Value 형식의코드 - 결과가제대로나오지않음 73

- Call-by-Reference 형식의코드 - 결과가제대로나옴 74

2. scanf 함수호출시 & 붙이는이유 - 변수 num 앞에 & 연산자를붙이는이유 scanf 함수내에서외부에선언된변수 num 에접근하기위해서는 num 의주소값을 알아야함, 때문에 scanf 함수는변수의주소값을요구 - 배열이름 str 앞에 & 연산자를붙이지않는이유 str 은배열이름이고그자체가주소값이기때문에 & 연산자를붙이지않음 str 을전달함은 scanf 함수내부로배열 str 의주소값을전달하는것 75

Chapter 13. 문자열 1. 문자열 Ⅰ. 문자상수 vs 문자열상수 - C 언어에서문자상수와문자열상수는완전히다르게처리됨 문자 문자열 형태 한글자 두글자이상 표기방법 작은따옴표 ( ) 큰따옴표 ( ) 사용예 A', 'b', '\n' "apple", "banana", "Korea" 처리방법 정수로처리 주소로처리 특징 아스키코드와대응 문자열끝에널문자 (\0) 가추가됨 2. 문자열처리방법 Ⅰ. 배열을이용한문자열처리 - C언어는문자열을저장하는기본데이터형이없음 - 문자열이란문자들이모여이루어지는것이므로배열을이용하면저장할수있기때문 - 문자열은문자열의끝을의미하는널문자 (\0) 가있기때문에항상문자열의길이보다 1byte 크게배열의크기를설정해야함 ( 한글은 1음절이 2byte기때문에, 음절의두배 + 1에해당하는크기로설정해야함 ) Ⅱ. 포인터를이용한문자열처리 - 문자열은문자열이저장곳의시작주소로처리되기때문에 char형포인터는문자열을저장할수있음, 이경우포인터는문자열의주소를저장하고있는것 - 배열은문자열을또다른메모리공간에저장하지만문자열의주소만저장하고있을뿐, 때문에포인터로문자열을처리하면문자열에접근만할수있을뿐문자열의수정은불가능함 - 포인터에문자열을저장하면문자열의길이에상관없이문자열의주소를저장하는 4byte 포인터만있으면되기때문에메모리를효율적으로사용할수있지만문자열의수정은불가능한읽기전용이됨 3. 문자열입출력함수 Ⅰ. 문자열출력함수 : puts, fputs - 인자로전달되는문자열을화면에출력 - fputs는두번째인자를통해서출력의대상을지정할수있음 puts함수가호출되면문자열출력후자동으로개행이이루어지지만, fputs함수가호출되면문자열출력후자동으로개행이이뤄지지않음 76

Ⅱ. 문자열입력함수 : gets, fgets - 키보드로입력되는문자열을변수에저장하는함수 - fgets 는세번째인자를통해서입력의대상을지정할수있음 77

- gets 함수의경우입력되는문자열의길이가배열을넘어설경우할당받지 않은메모리를참조하는오류가발생 78

Chapter 14. 문자열함수 1. 문자열함수 - 문자열함수는 string.h 헤더파일에선언되어있으므로문자열함수를사용하려면 이헤더파일을추가해야함 Ⅰ. strlen 함수 - 문자열의길이를반환하는함수 79

Ⅱ. strcpy, strncpy 함수 - 문자열을복사하는함수 - strcpy : str1 에저장된문자열을 str2 에복사 - strncpy : str1 에저장된문자열을 str2 에복사하되 sizeof(str2) 의반환값만큼복사 80

Ⅲ. strcat, strncat 함수 - 문자열을덧붙이는함수들 81

Ⅳ. strcmp, strncmp 함수 - 문자열을비교하는함수들 - 크고작음은 ASCII코드값을근거로함 - A보다 B가, B보다 C가 ASCII코드값이더크고 A보다 a가, B보다 b가 ASCII코드값이더크니, 알파벳순서를기준으로뒤에위치할수록더큰값임 82

Ⅴ. atoi, atol, atof 함수 - stdlib.h 에선언되어있음 - 문자열의내용을숫자형태로변환해주는함수 83

84

Chapter 15. 전처리기 1. 전처리기 - 전처리기 (Preprocessor) 란컴파일에앞서미리처리되는처리기를뜻함 - C 언어로작성된원시프로그램은컴파일과링크의단계를거쳐실행파일을생성하게 되는데컴파일단계를좀더세분화한다면전처리단계와컴파일단계로나눌수있음 반드시해시표시 (#) 로시작해야함 명령문의끝은세미콜론 (;) 을붙이지않음 한줄에하나의명령만씀 일반적으로대문자를기초로작성 2. 매크로 - 매크로 (macro) 는매크로명을명령이나수식또는상수로치환 - #define 은매크로를정의 3. 매크로상수 - 매크로명을상수로치환 85

4. 매크로함수 - 매크로함수는데이터형에독립적 ( 어떤데이터형이전달되어도상관없음 ) - 함수호출시발생하는오버헤드가발생하지않아실행속도가향상 - 함수호출부가매크로함수몸체부분으로완전히치환되기때문에코드의크기는커짐 - 매크로함수는함수의크기가작은경우에만사용 Ⅰ. 매크로함수사용 86

Ⅱ. 잘못된매크로의정의와소괄호의해결책 87

Ⅲ. 여러줄에걸쳐매크로정의 - 여러줄에걸쳐매크로를정의할때는백슬러시 (\) 를사용 에러발생 정상사용 Ⅳ. 문자열내에서의매크로매개변수치환 - 매크로치환시문자열안에서는치환이일어나지않음 - # 연산자를이용하면치환값이상수가아니라문자열로치환 - 둘이상의문자열선언을나란히하면, 이는하나의문자열선언으로인식이됨 88

Chapter 16. 구조체 Ⅰ 1. 구조체 - 구조체란두개이상의데이터형을묶어서새로운데이터형을정의하는것을말함 < 구조체정의 > struct 구조체명 { 멤버 1; 멤버 2;... 멤버 n; }; < 구조체선언 > struct 구조체명변수명 ; < 구조체멤버접근 > 변수명. 멤버 ; < 구조체초기화 > struct 구조체명구조체변수명 = { 값1, 값2, 값3}; 구조체로정의한데이터형은 struct키워드를사용 구조체정의끝은항상세미콜론 (;) 으로끝냄 구조체정의시멤버변수초기값의할당은불가능 구조체멤버초기화방법은배열과같음 Ⅰ. 구조체의정의 89

Ⅱ. 구조체변수의선언과접근 - 구조체변수선언의기본형태 - 멤버의접근방식 90

91

Ⅲ. 구조체정의와동시에변수선언하기 - 구조체를정의함과동시에변수를선언하는문장은잘사용되지않음 Ⅳ. 구조체변수의초기화 92

2. typedef - 데이터형을새롭게정의하는명령 - typedef를하면원래데이터형과새롭게정의한데이터형을모두사용할수있음 - 데이터형의이름을명시적으로쓰고싶은경우나구조체와같이데이터형의이름이긴경우사용 typedef 데이터형재정의데이터형 ex) typedef int size_t; typedef unsigned int UINT; typedef struct student student; 3. 구조체배열 - 구조체또한데이터형이기때문에배열선언가능 93

- 구조체배열의초기화시다차원배열처럼각각의초기화값을중괄호로묶어서표현 구조체변수의초기화 구조체배열의초기화 94

4. 구조체포인터 - 구조체포인터란구조체의주소를저장하는포인터 - 구조체포인터로구조체멤버를접근할때는간접멤버접근연산자 (->) 를사용 구조체변수멤버접근시는멤버접근연산자 (.), 구조체포인터변수멤버접근시는간접멤버접근연산자 (->) 사용을꼭기억 95

Chapter 17. 구조체 Ⅱ 1. 구조체연산 - 구조체변수도대입연산가능 ( 멤버대멤버의복사 ) - 덧셈및뺄셈같은사칙연산은허용되지않음, 필요시함수를정의해서사용 대입연산의예 96

덧셈및뺄셈연산의예 2. 구조체와함수 - 구조체변수도 Call-by-Value 방식과 Call-by-Reference 방식으로전달 - Call-by-Value 방식으로전달하는경우는멤버대멤버복사가수행 - Call-by-Reference 방식으로전달하는경우는구조체변수의주소를포인터에저장 97

함수의인자로구조체변수전달 (Call-by-Value) 함수의인자로구조체배열변수전달 (Call-by-Value) 98

함수의인자로구조체변수주소값전달 (Call-by-Reference) 99

3. 중첩된구조체의정의와변수의선언 - 앞서정의한구조체는이후에새로운구조체를선언하는데있어서 기본자료형의이름과마찬가지로사용이될수있음 4. 공용체 - 구조체와같은사용자정의자료형 - 구조체와매우비슷한특징을가지고있고 union키워드사용 - 공용체는서로다른자료형의변수를하나의메모리공간에서공유하는경우에사용 현시점에서많이사용되지는않으므로구조체와구분되는특징을위주로이해하고넘어가기로함 100

Ⅰ. 구조체와공용체의선언방식의차이 - struct 대신 union 이라는키워드를사용한다는차이점만있고 나머지는구조체와동일함 Ⅱ. 구조체와공용체의메모리적차이 - 구조체는멤버변수각각메모리공간을독립적으로할당받지만공용체는 멤버변수중가장큰데이터형의메모리공간하나만을할당받아공유함 101

102

Ⅲ. 공용체의예 103

104

Chapter 18. 포인터고급 1. 포인터배열 - 포인터배열이란이름그대로포인터들의배열을말하는것으로같은타입의포인터가 여러개필요한경우포인터를배열로선언 105

2. 2 차원포인터 - 싱글포인터 ( 포인터 ) 는변수의주소를저장하기위한포인터라면 2 차원포인터 ( 더블포인터 ) 는싱글포인터의주소를저장하는포인터 3. 2 차원배열과포인터 Ⅰ. 2 차원배열이름과포인터 - 배열이름은배열의시작주소를가리키는포인터 - 배열이름 [ 행 ] 은행의시작주소 - 배열이름증 / 감연산시행단위로이동 106

107

Ⅱ. 2 차원배열이름의포인터타입 - 1차원배열이름은배열이름연산시증 / 감되는바이트가항상같기때문에데이터형이같은경우포인터타입도일치 - 2차원배열의이름은포인터연산시증 / 감되는바이트가일치하지않기때문에포인터타입이다름 108

109

Chapter 19. 파일입 출력 1. 파일입 출력의개념 - 표준입 출력함수는모니터와키보드로입 출력을수행하지만파일처리함수는보조기억장치파일 (file) 에데이터를입 출력함 - 파일입 출력은텍스트모드와 2진모드로구분됨 텍스트모드 : 프로그램에서파일로읽어들이거나쓰는경우에데이터변환이일어나는입 출력모드를의미, 일반적인문자열과같은텍스트기반의데이터에사용 2진모드 : 아무변환없이데이터를입 출력하는모드를의미, 영상데이터와같이데이터의변환이발생하면안되는경우에사용 2. FILE 포인터를이용한파일입 출력 Ⅰ. 파일입 출력의수행과정 1 파일을개방 2 입 출력을수행 3 파일을닫음 Ⅱ. fopen 함수 - fopen 함수가호출되면 FILE 구조체변수가생성 - 생성된 FILE 구조체변수에는파일에대한정보가담김 - FILE 구조체의포인터는사실상파일을가리키는 지시자 역할 110

- 출력스트림의생성 - 입력스트림의생성 111

Ⅲ. fclose 함수 - 운영체제가할당한자원의반환 - 버퍼링되었던데이터의출력 3. 파일모드 - 텍스트모드는파일모드뒤에 't' 를, 2 진모드는 'b' 를사용 't', 'b' 아무것도붙이지않으면텍스트모드 't' 로파일개방 - 모드의 '+' 는읽기, 쓰기가모두가능한스트림의형성을의미 - 모드의 'a' 는쓰기가가능한스트림을말하며기존데이터의끝부터쓰는것을의미 4. 파일입 출력함수 fputc int fputc(int c, FILE *stream); - 스트림에한문자를출력하는함수 - 출력한문자를리턴하며에러가발생할경우 EOF(-1) 를리턴 112

fgetc int fgetc(file *stream); - 스트림에서한문자를읽어오는함수 - 입력된문자를리턴하지만파일의끝을만났을경우 EOF(-1) 을가질수도있기때문에정수형변수에대입해야함 fputs int fputs(const char *string, FILE *stream); - 스트림에문자열을출력하는함수로개행문자 ('\n') 가있더라도한꺼번에출력됨 - 널문자 ('\0') 이전까지출력되므로문자열은반드시널문자로끝나야함 - 출력된마지막문자를리턴하며에러가발생하면 EOF(-1) 를리턴 fgets char *fgets(char *s, int n, FILE *stream); - 스트림에서문자열을읽어와 char형배열에저장하는함수 - 개행문자를 ('\n') 를만날때까지문자열을읽어들이거나두번째인수의길이만큼읽어들임 - 개행문자를만나면읽기를중단하기때문에행단위로읽어들일경우많이사용 - 리턴타입은문자열이저장된배열의주소이기때문에파일의끝을만나저장된문자열이없는경우는 NULl을리턴 fprintf int fprintf(file *stream, const char *format [,argument ]...); - 스트림에서식화된출력하기위해사용되는함수 - 첫번째인수로 FILE의포인터를넘긴다는것을제외하고 printf와동일함 fscanf int fscanf(file *stream, const char *format [,argument ]...); - 스트림에서서식화된데이터를읽어오기위해사용되는함수 - 첫번째인수로 FILE의포인터를넘긴다는것을제외하고 scanf와동일함 fcloseall int fcloseall(); - 열려있는모든스트림을닫음 113

114

Chapter 20. 메모리관리와동적할당 1. 메모리관리 Ⅰ. 메모리 (Memory) - 프로그램이실행되는동안저장되는데이터는 RAM 이라는메모리공간에저장 - RAM 은크게코드, 데이터, 스택, 힙영역으로나뉨 코드영역 : 실행할프로그램의코드가저장되는공간, CPU는코드영역에저장된명령문을하나씩가져다가실행 데이터영역 : 전역변수와 static변수가할당되는영역, 프로그램시작과동시에할당되어종료시까지남아있는특징의변수가저장되는공간 힙영역 : 프로그래머가원하는시점에메모리공간에할당및소멸을하기위한공간 스택영역 : 지역변수와매개변수가할당되는공간, 함수를빠져나가면소멸되는변수를저장하는공간 2. 정적할당과동적할당 정적할당 - Compile( 컴파일 ) 시할당될메모리크기가결정 - Stack영역과 Data영역에할당되는메모리 동적할당 - 실행중에메모리가할당 - 동적할당된메모리는 Heap영역에할당 115

3. malloc/free 함수 Ⅰ. malloc/free 함수 - malloc함수 : 전달인자의크기만큼메모리를할당하고할당된메모리의시작주소리턴리턴되는주소는 void포인터타입이기때문에반드시형변환해서사용 malloc함수의리턴형이 void인이유 : malloc함수는인자로숫자만하나전달받을뿐이기때문에할당하는메모리의용도를알지못함, 따라서메모리의포인터형을결정짓지못함, 때문에형변환의과정을거쳐서할당된메모리의주소값을저장 - free함수 : 주소가가리키는메모리를해제 - stdlib.h 헤더파일안에선언되어있으므로사용시 stdlib.h를포함 116