C 언어기초[040913]_C의 개요.hwp

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

K&R2 Reference Manual 번역본

OCW_C언어 기초

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

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

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

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

Microsoft PowerPoint - chap06-2pointer.ppt

PowerPoint 프레젠테이션

슬라이드 1

Microsoft PowerPoint - [2009] 02.pptx

<4D F736F F F696E74202D20C1A633C0E52043C7C1B7CEB1D7B7A5B1B8BCBABFE4BCD2>

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

OCW_C언어 기초

Microsoft PowerPoint - chap-03.pptx


C 프로그램의 기본

OCW_C언어 기초

PowerPoint Presentation

슬라이드 1

Microsoft PowerPoint - Lesson2.pptx

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

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

歯9장.PDF

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

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

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

슬라이드 1

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - chap06-1Array.ppt

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

Microsoft PowerPoint - chap05-제어문.pptx

PowerPoint 프레젠테이션

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

Microsoft PowerPoint - ch07 - 포인터 pm0415

PowerPoint 프레젠테이션

11장 포인터

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

PowerPoint Presentation

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

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

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

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

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - c2.ppt

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

C언어 및 실습 C Language and Practice

Chapter_06

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

Infinity(∞) Strategy

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

Microsoft PowerPoint - Chapter_04.pptx

PowerPoint 프레젠테이션

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

PowerPoint 프레젠테이션

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

Microsoft PowerPoint - chap04-연산자.pptx

Microsoft PowerPoint - Chapter_02.pptx

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

Microsoft PowerPoint - chap12-고급기능.pptx

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

untitled

C++-¿Ïº®Çؼ³10Àå

untitled

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

쉽게

슬라이드 1

untitled

PowerPoint 프레젠테이션

ABC 2장

Visual Basic 반복문

쉽게 풀어쓴 C 프로그래밍

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

PowerPoint 프레젠테이션

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

chap7.key

컴파일러

Microsoft PowerPoint - ch01.ppt

슬라이드 1

4장.문장

쉽게 풀어쓴 C 프로그래밍

PowerPoint 프레젠테이션

<4D F736F F F696E74202D20C1A632C0E520C7C1B7CEB1D7B7A5B0B3B9DFB0FAC1A4>

<C6F7C6AEB6F5B1B3C0E72E687770>

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

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap08-1 [호환 모드]

중간고사

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

C# Programming Guide - Types

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

11장 포인터

쉽게 풀어쓴 C 프로그래밍

슬라이드 1

Tcl의 문법

쉽게 풀어쓴 C 프로그래밍

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

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

PowerPoint Presentation

Transcription:

1. C 의개요 이장에서는 C 언어로작성된프로그램의구성요소와형식들에대하여간단히설명한 다. 프로그램을이루는구성요소들은상호간에아주밀접한관계를맺고있어프로그램동 작에영향을미칠수있다. 먼저 C 언어의핵심적인몇가지특징들의이해를위하여간략 히설명한다. 1.1. C 프로그램의구성요소및특징 - 프로그램의구조 C 프로그램은아래 List 1-1 의구조을갖는다. #include <HeaderFileName> #include HeaderFileName 외부변수의선언 ; -----> semicolon(;) 은문자의끝을알림 main() -----> main 함수의시작 ( 프로그램시작 ) 내부변수의선언 ; statement sequence; -----> 함수내의문장들 ( 실행문 ) function_name( 변수들 ); -----> 함수의실행 ( 부프로그램실행 ) -----> main 함수의끝 ( 프로그램종료 ) function-name( 인수들 ) -----> 함수이름 ( semicolon 을붙이지않음 ) -----> 함수의시작 내부인수의선언 ; -----> 선언문 statement sequence;-----> 함수내의문장들 ( 실행문 ) -----> 함수의끝 < List 1-1 > C 프로그램의구조

List 1-1 의 C 프로그램에서보는바와같이프로그램은 1 개이상의함수 (function) 로구성되 며, 각함수는 1 개이상의문장 (statement) 으로이루어진다. 함수는이름을갖고있으며 프로그램의다른부분에서호출될수있다. 그러나 main() 함수는프로그램내에서단한번 만호출이되어야하며다른함수는부프로그램의역할을수행한다. 즉 C 프로그램은 List 1-1 에서보는바와같이함수 main() 의 으로프로그램의시작을 으로프로그램의끝 을나타내고, 문장들은 과 내에포함되어야한다. 또한 C 언어의문장은 ; ( 세미콜론 ) 으로끝나며, 한줄에두개이상의문장을쓸수있다. 문장에서사용되어지는변수, 상 수등등의선언과관계되어지는것은문장이쓰여지기전에선언되어야한다. 이러한변수 의선언은함수내의선언과함수밗의선언이구별되어진다. 이것은변수의사용영역의 유효범위를나타낸다. 즉일반적인변수는함수 main() 밗에서선언될경우는프로그램의 어느곳에서나사용이가능하고함수 main() 그리고부프로그램으로서의함수내에서선언될 경우는불리어진함수내에서만선언된변수는사용이가능하다. 상수, 데이터형, 그리고 함수의이름들은영어대문자 A ~ Z, 소문자 a ~ z, 그리고밑줄 (_) 로시작가능하다. 나 머지부분은문자, 숫자 ( 0 ~ 9 ), 밑줄 (_) 만을사용한다. 그리고 C 언어는다른언어 Fortran, BASIC 등의언어와달리대문자와소문자를구별한다. 즉 index, Index, 그리고 INDEX 는모두구별된다. 이들은에디터 (editor) 의특성에따라다르지만, 일반적으로처음 32 개문자만의미가갖는다. 표준라이브러리의함수들의프로토타입 (prototype) 이저장된파일을헤드화일 (header file) 이라하며이들함수들은목적화일 (*.obj) 로제공되며, 헤드화일은 #include 지시어와 함께사용된다. 필요에따라헤더파일에함수의프로토타입뿐만아니라함수프로그램 을포함시킬수있으며이를읽어서프로그램에삽입한다. 지시어 #include 는프로그램이 컴파일이루어지기전에선행처리 (preprocessing) 된다. 표준라이브러리 (standard library) 는모든 C 컴파일러에서제공하는기본함수들의집합을일반적으로얘기하며, 표준라이브러리는입출력, 스트링조작, 수학계산등을처리하기위한함수이다. 이를위하여 ANSI C 표준은모든 C 컴파일러에서제공할기본라이브러리함수들을규정하고있다. List 1-1에서의공백 (space) 는무시한다. C언어로작성된프로그램에서의함수는프로그램의골격을이루며이는블록 (block) 의구조를갖는다. 문장들은대부분연산을수행하는프로그램의일부분으로함수에포함된다.

윗의내용을요약하면다음과같다. 함수에서 시작을과 끝을나타내고, 문장들은 과 내에포함되어야한다. 모든 C 문장은세미콜론 (;) 으로끝나며, 한줄에두개이상의문장을쓸수있다. 상수, 데이터형, 변수, 그리고함수의이름들 : (Identifiers) - 문자 (A ~ Z 또는 a ~ z) 또는밑줄 (_) 로시작 - 나머지는문자, 숫자 ( 0 ~ 9 ), 밑줄 (_) 만을사용 - 대문자와소문자를구별한다.( 예 : index, Index, 그리고 INDEX는모두구별된다.) - 처음 32개문자만의미가있음 ( 일반적인경우 ) 표준라이브러리 (standard library) 는모든 C 컴파일러에서제공하는기본함수들의집합 을이야기하며, 이는입출력, 스트링조작, 수학계산등을처리하는함수들이다. 이를 위하여 ANSI C 표준은모든 C 컴파일러에서제공할기본라이브러리함수들을규정하고 있다. 표준라이브러리의함수들의원형이저장된파일을헤드화일 (header file) 이라하며, #include 지시어와함께사용된다. 함수들의프로그램은목적파일로제공된다. 필요에 따라헤더화일을읽어서프로그램에삽입하기도한다. #include 지시어는선행처리 (preprocessing) 된다. C 언어는공백 (space) 을무시한다.

C 프로그램의작성과동작에있어필요한여러가지요소에대하여간단히이야기하자. 우리가컴퓨터의사용에있어가장먼저필요한것은입력과출력장치일것이다. 아무리 고성능의컴퓨터라하더라도지금의현재의상태를알수가없으면컴퓨터의이용에아주 큰어려움이있을것이다. 그러므로컴퓨터는현재의수행되고있는상황을사용자가알 수있도록출력하는것이아주중요할것이다. 현재의수행되고있는상황을알수있는 장치가모니터 (monitor) 일것이다. 컴퓨터에게가장쉽게명령을내리는장치가키보드 (keyboard) 일것이다. 컴퓨터의자료를결과물또는제출물로출력하는장치가프린터일 것이다. 프로그램은위와같은요소을포함하는입출력요소, 데이터요소, 연산요소, 조건부 요소, 반복요소, 부프로그램으로이루어진다. 표 1-1 은프로그램의기능적인요소그리고 표 1-2 는프로그램의구조적인요소에대하여간단히설명하고있다. < 표. 1-1> 프로그램의기능적인요소. 출력요소데이터요소연산요소입력요소조건부요소반복요소부프로그램 ( 서브루틴 ) Monitor, HDD(file), Printer, 수 ( 정수, 실수 ), 문자, 문자열, address를포함하는상수, 변수그리고 structure 덧셈, 나눗셈, 비교 Keyboard, HDD(file), Mouse, Scanner, Camera 지정된조건이 참 일때만명령어집합을실행지정된수만큼혹은조건이 참 일동안, 명령어집합을실행분리되어명명된명령어집합으로, 그이름이불리어지면프로그램의어디에서건실행이될수있다. < 표 1-2> 프로그램의구조적요소. 1. 프로그램의최소단위는함수이다. ( 가장간단한프로그램은? ) 2. 기능적요소는하나이상의함수로구성되거나, 한개이상의문장 (statement) 로이루어진다. 3. 모든프로그램은한개이상의함수 (function) 집합이며, 함수는한개이상의문장 (statement) 으로이루어진다. 4. main( ) 함수가맨먼저실행되는함수이며, 여러개의함수들은 main() 함수내에포함된다.

1.2 변수선언과값의치환 C 언어에서의변수의선언은 Basic 등다른컴퓨터언어와달리사용하기전에모든변수를 선언하여컴파일러에게어떤변수형이사용되었는가를알려준다. 아래는변수에대하여간 략히정리하였다. 변수 (variable) : 임의값을저장할수있는기억장소. 변수형을저장할임의값의형태를의미한다. 변수이름 - 문자 (A ~ Z 또는 a ~ z) 또는밑줄 (_) 로시작 - 나머지는문자, 숫자 ( 0 ~ 9 ), 밑줄 (_) 만을사용 - 대문자와소문자를구별한다. - 처음 32개문자만의미가있음 ( 일반적인경우 ) - 키워드를사용할수없음 - 변수의사용법 변수는사용전에반드시선언되어야한다. 선언형식 : type var-name ; 변수의선언위치 : 함수의외부 ----> 전역 (global) 변수 함수의내부 ----> 지역 (local) 변수 여러개의변수들을동시에선언가능하다. 예 ) float x, y, z; 치환문 (assignment statement) : 변수에값을저장하는실행문. 형식 : var-name = expression ; expression은상수, 변수, 식등이될수있다. 상수 (constant) : 고정된값을나타냄여러가지상수형 ( 문자, 정수, 실수, 배정도실수 ) 이있다. 예 ) 'A', 'x', 100, 100.0 변수의선언단계에서초기값을부여할수도있다. 형식 : type var-name = 초기값 ;

1.3 출력요소 출력정보는프로그램에서아주중요한요소이다. 출력은보통 monitor screen, 기억장치 (HD, FD) 인 I/O port( serial port, print port) 로작성된자료를보내어사용자가원하는출 력임을확인하고, 이를정보화할수있도록출력의형식을변화시킬수있다. 이절에서 는가장일반적인출력함수인 printf() 함수와다른출력함수에대하여간단히공부한다. printf() stdout(monitor screen) 에 format 에의한출력을행한다. 형식 printf( <format string> [, < argument 1>, < argument 2>...] ); format string : 출력되는데이터의형식지정자 argument : 인수 함수 printf 는인수들을받아들여, format string 으로주어진 format 문자열에포함되는각 각의포맷지정에적용되어, stdout 로 formatted 데이터를출력한다. 인수의수와포맷 지정의수는반드시같아야한다. /* printf example */ #include <stdio.h> #include <string.h> #define I 555 #define R 5.5 int main(void) int i,j,k,l; char buf[7]; char *prefix = buf; char tp[20]; printf("prefix 6d 6o 8x 10.2e 10.2f\n"); strcpy(prefix,"%"); for (i = 0; i < 2; i++) for (j = 0; j < 2; j++) for (k = 0; k < 2; k++) for (l = 0; l < 2; l++)

if (i==0) strcat(prefix,"-"); if (j==0) strcat(prefix,"+"); if (k==0) strcat(prefix,"#"); if (l==0) strcat(prefix,"0"); printf("%5s ",prefix); strcpy(tp,prefix); strcat(tp,"6d "); printf(tp,i); strcpy(tp,""); strcpy(tp,prefix); strcat(tp,"6o "); printf(tp,i); strcpy(tp,""); strcpy(tp,prefix); strcat(tp,"8x "); printf(tp,i); strcpy(tp,""); return 0; strcpy(tp,prefix); strcat(tp,"10.2e "); printf(tp,r); strcpy(tp,prefix); strcat(tp,"10.2f "); printf(tp,r); printf(" \n"); strcpy(prefix,"%"); < List. 1-2> 함수 printf() 의예제프로그램과결과.

puts() 화면 (stdout) 에스트림으로문자열을출력한다. 서식 : #include <stdio.h> int puts(s); 인수 : char *s 출력하는문자열 기능 : puts 는널로끝나는문자열을표준출력 stream stdout 에복사하고 새로운라인문자를추가한다. putchar() 화면 (stdout) 에 1 문자를출력한다. 서식 : #include <stdio.h> int putchar(c); 인수 : int c 출력하는문자 기능 : putchar 는 putch(c, stdout) 로정의된매크로 (macro) 이다. /* PUTS.C: This program uses puts to write a string to stdout. */ #include <stdio.h> void main( void ) puts( "Hello world from puts!" ); Output Hello world from puts! < List 1-3> 함수 puts() 예제프로그램과결과.

1.4 데이터요소 프로그램을작성할때, 프로그래머 (programmer) 는몇종류의데이터를사용하여작업한 다. 이들은대부분기본적인 4 가지의데이터형에속한다. 정수, 부동소수, 문자, 그리고 포인터 (pointer) 이다. 기본데이터형 : < 표. 1-3> C 의기본테이터형. 데이터형 의미 키워드 character 문자데이터 char integer 정수 int float 실수 float double 배정도실수 double void 값이없음 void 정수는 16bits, 2bytes 즉 1word로이루어져있으며양의정수 unsigned int 표현에서는 16 bits의모든 bit가수를표현하는데이용이되나 signed int에서는 16bits 가운데 MSB(Most Significant Bit) 는정수의음, 양을표현하는부호 (sign) 를위하여이용이된다. 16bits의정수는유효값의크기가그다지크지가않아유효자리수의확장을위하여 long int 32bits로표현한다. unsigned int 양의정수 - 16bits long int 유효자리수확장 ( 배정도정수 ) - 32 bits 실수는자연계의값을표현할수있는형식이나할당된 bit 수에따른유효자리수가변화 하게된다. 이는 32bits 로이루어진부동소수 (float) 는 8bits 의지수부분과 24bits 의가수부 분으로이루어져있으며, 유효자리수의확장을위하여 64bits 로이루어진 double 을이용하 기도한다. unsigned float 양의실수 - 32 bits double 유효자리수확장 ( 배정도실수 ) - 64 bits

문자 (character) 는영문자, 숫자, 특수문자 (%, &, *...) 등을나타내며이는컴퓨터로표현 할수있는가장기본적인형태의문자를의미하며, 이는 7bits 로이루어진 ASCII 코드를 근간으로하여 1bit 가추가된 8bits 를 1 문자로표현한다. 그러므로영문의문자코드의 MSB 는항상 0 을나타난다. 그러나한글의표현에서는 1 문자가 2bytes(16bits) 로이루 어지며 MSB 는 1 로표현하여영문과한글을구별하게된다. unsigned char : 문자 - 8 bits ( ASCII code - 7 bits ) 문자열는문자의의미있는표현은단어, 문장으로표현이되어야한다. 이러한연속되어 지는문자들의집합을문자열 (char string) 이라한다. 이러한문자열을이용하기위하여문 자배열또는포인터 (pointer) 를이용하기도한다. 문자열정의법 : 문자배열또는문자포인터 main() char msg[30]; strcpy(msg,"hello, world"); puts(msg); <List. 1-4> 배열을이용한문자열출력프로그램. main() char *msg; msg="hello, world"; puts(msg); <List. 1-5> 포인터을이용한문자열출력프로그램.

1.5 연산요소 연산은컴퓨터가가장잘할수있는일이며가장기본적인기능이다. 이러한컴퓨터의 탁월한연산능력은컴퓨터의성능향상을이끌어왔으며, 음식압축, 영상압축, 음식인식, 그 리고영상인식등등의고수준의알고리즘의연구및개발은컴퓨터에의한다양하고복잡한 문제해결능력을갖도록변화시키고있다. 컴퓨터는데이터를프로그램의사용가능한연산자를사용하여처리할것이다. 이러한 연산에사용되는중요연산자에대하여간단히살펴보자. 대입연산자가장기본적인연산자로 ratio = a / b; ch=getch(); 와같은우측항의값을좌측항으로의대입이다. 이는일반적인문장의한형태이며, 대입의연산자로는단일등호 ( = ) 로나타낸다. 즉등호우측에있는값이좌측의변수에대입된다. tmp = a = b; 와같은문장이표현될수있다. 이런경우의연산순서가중요할것이다. 연산의 순서는우측항에서좌츠항으로수행되어진다. 그결과변수 b 의값이변수 a 의값으 로대입되고난후, 변수 a 의값이변수 tmp 의값으로대입된다. 변수 b, a, tmp 는모두같은값을가지게된다. 단일연산자와이항연산자 ( 산술연산자 ) C언어는 2진산술연산자를지원하며, 단일연산을지원한다. C에서는단일뺄셈연산 c = ( a + (-b) ) 또는 c = ( a + (+b) ) 를지원하는데, 이것은 2의보수 를수행한다. 연산자 의미 + 덧셈 (addition) - 뺄셈 (subtraction) * 곱셈 (multiplication) / 나눗셈 (Division) % 나머지 (modulus)

증가 (++) 와감소 (--) C 는다른언어와다른특수한단일연산자와이항연산자를갖는다. 가장잘알려진 단일연산자 (unary) 는증가 (++) 와감소 (--) 이다. 이는 a = a + 1; => a++; a = a - 1; => a--; 좌측항의식을우측항의단일연산자로대체할수있다. 컴퓨터의수행능력에있어서도 향상된결과를얻을수있다. 이단일연산자는간단하고도강력한연산자이지만프로그램 작성전에수행에대한정확한이해가필요하다. add = a+ b++; add = a+ ++b; 윗두식의차이에대하여간단히설명하면다음과같다. 첫번째식은, 변수 a 의값과변 수 b 의값을더하여변수 add 에저장한후, 변수 b 의값을 1 만큼증가시키는프로그램이 다. 두번째식은, 변수 b 의값을 1 만큼증가시킨후, 변수 a 의값과변수 b 의값을더한 결과를변수 add에대입한다. 즉문장 b++; 는프로그램수행후변수 b의값을 1만큼증가시키고, 문장 ++b; 는프로그램수행전변수 b의값을 1만큼증가시킨후문장을수행한다. 아래의프로그램을수행시킨후결과를이해하도록하자. #include <stdio.h> void main(void) int char a, b, add; *format; format = " a = %d, b = %d, add = %d \n"; a=3; b=5; add = a + b; printf(format, a, b, add); add = a++ + b; printf(format, a, b, add); add = ++a + b; printf(format, a, b, add); add = --a + b; printf(format, a, b, add); add = a-- + b; printf(format, a, b, add); add = a + b; printf(format, a, b, add); <List. 1-6> 전치증감과후치증감예제프로그램.

관계연산자 관계연산자는조건문에서사용되며, 같은데이터형의두값을비교하는것으로, 그비교 값이 참 인가 거짓 인가에따라다른결과를주어진다. 비교결과는논리값으로표현되 며 거짓 으로판정될때는결과값을 0 을발생시키고, 참 일경우결과값은 1 을발 생시킨다. 연산자 의미 > 보다크다 >= 보다크거나같다. < 보다작다. <= 보다작거나같다. == 같다.!= 같지않다. 논리연산자 논리연산자는조건문에서사용되며주로프로그램의분기와관련된관계연산자의결과와 함께사용된다. 연산자 && 의미 AND OR! NOT 비트단위연산자 한다. 비트단위연산자는논리연산자와는달리비교또는해당되는비트에대한연산을수행 연산자 의미 << bitwise shift left >> bitwise shift right & bitwise AND bitwise OR

^ ~ bitwise XOR bitwise NOT 결합된연산자 C 언어에서는여러개의연산자를갖는수식을쓸때, 간단한형식을변환하여사용할수 있도록한다. 대입연산자를단일, 이항, 증가, 감소, 그리고비트단위연산자들과결합할 수있다. 변수 = 변수 연산자 식 ; -----> 변수 연산자 = 식 ; a = a + b; -----> a + = b; a = a * b; -----> a * = b; a = a << b; -----> a <<= b; a = a & b; -----> a &= b; a = a % b; -----> a %= b; 어드레스연산자 C는두개의어드레스연산자를지원한다. 이는 address-of" 연산자 (&) 와 indirection" 연산자 (*) 이다. & 연산자는주어진변수의어드레스를되돌려준다. * 연산자는어드레스에간직된값을되돌려준다. void main() int sum; char *msg; sum = 5 + 3; msg = " Hello, there \n"; printf(" sum = %d &sum = %p \n", sum, &sum ); printf(" msg = %c &msg = %p \n", *msg, msg ); <List. 1-7> 어드레스연산자예제프로그램.

1.6 입력요소 C 언어에서는몇가지의입력함수를제공하고있다. 이들은파일, 입력문자열, 또는키 보드로부터입력을받는다. 이러한입력함수에대하여공부한다. scanf( ) 함수 : 값을키보드에서입력받기위한표준함수 서식 : #include <stdio.h> scanf ( format string, addr, addr, ) ; 인수 : format string 입력받을데이터의형식지정자 addr 결과을저장하는변수의주소를지정 기능 : scanf 는필드를연속적으로읽고, 한번에한문자씩 stdin 스트림에서 읽는다. 그런다음각각의필드는 format이가리키는 format 문자열에서 scanf에보내지는 format 지정에따라 format 된다. scanf는 format에뒤따라오는함수의어드레스에 format 된것을저장한다. 입력필드의어드레스와 format 지정자의수는같아야한다. scanf("%d %d", &a, &b) ; 두개의 10진정수를변수에입력 변수들의주소를지정 입력받을데이터의형식지정자 %d : 정수 %f : 부동소숫점 %s : 문자열 Whitespace ( 의미상의공백 ) 두개의 %d 형식명령어간의 whitespace은다음과같은의미가있다. Whitespace는공백, 탭, 그리고줄바꿈의조합이다. 두값들사이에는필요한만큼의 whitespace가올수있으며공백대신콤마로분리할수있다. scanf("%d,%d", &a, &b)

gets() 키보드 (stdin) 에서문자열을입력한다. 서 식 : #include <stdio.h> char *gets(s) 인 수 : char *s; 입력한문자열을저장하는영역의포인터. 기 능 : gets는표준입력스트림키보드 (stdin) 에서, carriage return으로끝나는문자열을 s에저장한다. Carriage return은 s에서널문자 (0) 로대치된다. scanf와는달리, gets는공백문자 (spaces, tabs) 를포함하는문자열을입력하는것을허락한다. /* GETS.C */ #include <stdio.h> void main( void ) char line[81]; printf( "Input a string: " ); gets( line ); printf( "The line entered was: %s\n", line ); Output Input a string: Hello! The line entered was: Hello! <List. 1-8> 함수 gets() 예제프로그램과결과.

getch() 키보드로문자를입력하며, 화면에 echoback 은안된다. 서 식 : #include <conio.h> int getch(); 인 수 : None 기 능 : getch는화면에 echoback은하지않고, console로부터직접 1문자를입력받는다. getch는키보드 (stdin) 를사용한다. #include <conio.h> main() int i; while((i=getch())!= '\007') /* press : Ctrl-G */ putch(i); <List. 1-9> 함수 getch() 예제프로그램과결과.

1.7 조건부요소 조건부요소에서는관계연산자와논리연산자를이용하여조건명령문의 참 과 거짓 을 판별하여 참 일경우결과는 1 을발생시키고 거짓 일경우결과로 0 을발생시킨다. 이렇게참과거짓일경우에따라적절한함수또는문장을수행하도록한다. 일반적인조 건문은 if 문을이야기하며 for, while, do~while 반복문에서조건에따른반복이이루어지므 로조건문이포함된형태를가진다. 아래에서는명령문 if 에대하여간단히설명한다. if 명령문 if ( value or condition ) statement1; else statement2; 1) - value 또는 condition의값이 1 ( 참 ) 이경우 statement1 이실행 - value 또는 condition의값이 0 ( 거짓 ) 일경우 statement2 가실행 - else statement2 부분은생략가능 2) - 명령문 1개이상을실행하고자할때는, 합성명령문을사용 - 합성명령문은다음과같이구성된다 // block의시작 statement_1 ; statement_# ; // semicolon 으로끝나는몇개의문장 // block 의끝 다음은 if 문이사용된몇개의문장들의차이점에대하여알아보자. if ( i > 0 ) y = x / i; else x = i; y = f( x ); <List. 1-10> if~else 문의예제프로그램.

List. 1-10 프로그램의 y = x/i; 문장은 i의값이 0보다클경우에수행된다. 만약 i의값이 0보다작거나같으면 i의값은 x에치환되고함수 f(x) 가수행되어반환값은변수 y에대입된다. if~else 문에서문장그룹과복잡한문의구조를명확하게하기위하여중괄호를이용하면프로그램의수행에많은도움이될것이다. 중괄호가없다면컴파일러의수행은에매모호한결과를낳을수있다. if ( i > 0 ) /* Without braces */ if ( j > i ) x = j; else x = i; <List. 1-10> if 문내에 if~else 문의예제프로그램. 외부의 if문은 else부분이없는문장이다. else 구문은내부의 if문에대한 else 구문이다. 만약, 외부의 if문에서 i의값이 0보다작거나같으면내부 if~else문은수행이되지않는다. 즉어떠한값도변수 x에주어지지않는다. 외부의 if문에서 i의값이 0보다크면, 내부의 if~else 문을수행한다. 이때, 변수 j의값고 i의값을비교하여, j의값이크면, 변수 x에 j의값을대입하고그렇지않으면변수 x에 i의값을넣으라는프로그램이다. if ( i > 0 ) /* With braces */ if ( j > i ) x = j; else x = i; <List. 1-11> if~else 문내의 if 문의예제프로그램. List. 1-11 프로그램과 List. 1-10 프로그램의중괄호가없는경우와비교하여보자. 이예 제에서는내부 if 문의주위에중괄호를가지고있다. 이경우 else 구문은외부 if 문의짝이 된다. 만약 i 의값이 0 보다크면내부 if 문을수행하고그렇지않으면변수 x 에 i 의값을대 입한다.

1.8 반복요소 프로그램에서명령문을반복하여실행할경우반복을위한명령어를사용한다. 반복을 위한명령어에는기본적으로세가지종류가있으며, 이들은조건문이포함이된상태이다. 조건에따른반복의횟수를결정하게된다. - while loop - for loop - do while loop while loop 형식 1) while( value or condition) statement ; 2) while( value or condition) statement1 ; statement2 ; 설명 (value or condition ) " 참 이면 statement 실행, 거짓 이면 while loop 끝냄 while ( i >= 0 ) string1[i] = string2[i]; i--; <List. 1-12> while문의예제프로그램. List. 1-12 프로그램은배열 string2의값을배열 string1에대입한다. 만약 i의값이 0보다크거나같으면, 배열 string2의 i번째의값 string2[i] 을배열 string1의 i번째의값 string1[i] 으로대입하고 i의값을 1 감소시킨다. i의값이 0보다작아질때, while문의수행은종료될것이다.

for loop 형식 1) for( 식1 ; 식2 ; 식3 ) statement ; 2) for( 식1 ; 식2 ; 식3 ) statement1 ; statement2 ; 설명 : 식1 보통 index variable에대한지정식2 loop 계속을위한테스트식3 보통 index variable에대한변경 - 식들은생략할수있지만, semicolon(;) 은있어야한다. 이문장, for( ;; ); 은무한루프를만드는전형적인방법이다. 이무한루프를빠져나오기위하여 break 문, goto 문또는 return 문을이용할수있다. List. 1-13 프로그램은배열 line 의내에스페이 스 ( ) 와탭 ( \t') 문자를헤아리고배열 line 내의탭문자를스페이스문자로대체한다. 먼저, 변수 i, space, 그리고 tab 을 0 의값으로초기화한다. i 의값과상수 MAX 와비교하여 i 의 값이 MAX 보다작으면 for 문내의문장들이수행이된다. 배열 line[i] 의값에따라각각의 if 문이수행될수있다. i 의값이상수 MAX 보다작은한계속반복하여 for 문내의문장들 이수행된다. for ( i = space = tab = 0; i < MAX; i++ ) if ( line[i] == ' ' ) space++; if ( line[i] == '\t' ) tab++; line[i] = ' '; <List. 1-13> for 문의예제프로그램.

do while loop 형식 1) do statement while( value or condition ); 2) do statement1 ; statement2 ; while ( value or condition ); 설명 : 1) 적어도한번은실행 2) (value or condition) 이 참 인동안실행 List. 1-13 프로그램은 do~while 문장의예프로그램이다. 이 do~while 문장에서는, 변 수 x의초기값에관계없이, 두개의문장 y = f( x ); 과 x--; 이수행된다. 그리고난후, x의값이 0보다큰지를조사한다. 만약 x의값이 0보다큰다면 do와 while사이의문장들이다시수행되며, 그후또다시 x의값이 0보다큰지를조사한다. do와 while사이의문장들은 x의값이 0보다크면계속반복하여수행할것이다. do~while 문의수행은 x의값 이 0 과같거나음의수를가질때종료한다. 여기에서중요한사실은, do~while 문내의 문장들은적어도한번은수행을하게된다. do y = f( x ); x--; while ( x > 0 ); <List. 1-14> do~while 문의예제프로그램.

1.9 부프로그램 ( 서브루틴, 함수 ) C 프로그램은함수단위로이루어진다. 이는동일한명령어집합을다른데이터집합또 는사용자프로그램에있는다른위치에서수행하려고할경우, 이들명령문을서브루틴에 놓고, 필요할시에호출하여사용할수있다. C 언어에서는사용자가함수를 선언 하고 정의 할수있다. 그리고선언된함수는다 른함수에의해호출될수있다. 함수를정의할때, 사용자는그함수자체에대한실제코드를제공해야한다. 함수는하나의프로그램블록 (block) 을얘기하며, 이블록은 1개이상의함수들로프로그램이구성된다. 함수내에서다른함수를호출할때, 인수가없는경우도있지만, 대부분의함수는인수를갖는다. 인수 (argument) 는함수를호출할때전달되는값을말한다. 호출된함수는호출한함수의인수의개수와매개변수 (parameter) 의개수가동일하여야한다. 매개변수란호출된프로그램에서인수를받기위한변수를얘기한다. List 1-15 프로그램처럼함수는그함수의호출부분으로값을반환할수있다. 함수에서는 return 문이값을반환한다. 그리고함수내에서 return 문을만나면즉각호출한모프로그램 ( 함수 ) 부분으로되돌아간다. 형식 : 1) return value ; 2) return (value): 반환값 ( 상수혹은변수혹은식 ) ratio = get_ratio(a,b); // 인수 ( argument) float get_ratio(float dividend, float divisor) // 매개변수 (parameter) if(divisor == 0.0 ) return( INFINITY ); else return( dividend / divisor ); <List. 1-15> 매개변수와인수의전달예프로그램.

/* Function declarations */ void get_parms(float *p1, float *p2); float get_ratio(float dividend, float divisor); void put_ratio(float quotient); const float INFINITY = 3.4E+38; /* Main function: starting point for program */ main() float a, b, ratio; char ch; do get_parms(&a, &b); ratio = get_ratio(a,b); put_ratio(ratio); printf("press q to quit, any other key to continue "); while((ch=qetch())!= 'q'); /* End of Main */ /* Function definition */ void get_parms(float *p1, float *p2) printf(" Enter two numbers: "); scanf("%f %f",p1,p2); float get_ratio(float dividend, float divisor) if(divisor == 0.0 ) return( INFINITY ); else return( dividend / divisor ); void put_ratio(float ratio) if( ratio == INFINITY ) printf(" The ratio is undefined\n "); else printf("the ratio is %f\n", ratio); <List. 1-16> 함수를이용한프로그램.

1.10 프로그램의주석달기 주석 (comment): 프로그램을쉽게이해하도록하기위한부연설명, 식의첨가등등여러 형태가존재할수있다. 그러나프로그램의컴파일러는주석을무시한다. 형식 : /* 설명문...*/ 예. /* This is a comment. */ /* 주석시작 Programmer : Kim, Jae Chul. This is a long comment. extending over several lines. */ 주석끝 // 1 line comment <List. 1-16> 주석문의예. 작성된프로그램의일부를일시적으로제거하는데편리하게사용할수있다. 주석문안에또다른주석을둘수없다. (compile option 에따라달라질수있다.)

1.11 프로그램작성과컴파일 프로그램의작성은에디터 (editor : 문서편집기 ) 에서이루어지며, 초기의에디터는라인 (line) 에디터였으나요즘은특별한곳을제외한대부분의에디터는스크린 (screen) 에디터이다. 프로그램작성을위한에디터로서는컴파일러자체에통합내장된에디터를가장많이사용하고있으며, 문서전용에디터로서는 Ultraeditor, MS-Word, Norton editor, notepad 등등의다양한 editor 을이용하여프로그램을작성한다. 그램임을알리기위하여파일이름확장자를 *.c 로표한한다. 작성된프로그램은 C 프로 작성된프로그램을컴파일 을수행하여기계어로구성된목적화일을발생시킨다. 컴파일된목적화일은링크프로그램 을이용한목적화일의링크작업을수행하여실행가능한파일 *.exe" 를만들어컴파일러 의작업을종료하게된다. 만들어진수행파일의동작을확인하기위하여디버거 (debug) 기 능을이용하여잘못된프로그램을수정하면효율적으로프로그램을완성할수있을것이다. 에디터 : 프로그램작성을위한도구 ( UltraEdit, hwp, BC editor, Visual C++ ) 소스화일 : C 언어로작성된프로그램화일 (.c 확장자 ) 목적화일 : 기계어로구성된화일 (.obj 확장자 ) 실행화일 : 실행가능한화일 (.exe 확장자 ) 컴파일 : 소스화일을목적화일로만드는작업 링 크 : 목적화일을실행화일로만드는작업 소스화일 ---> 목적화일 ---> 실행화일 컴파일 링크 IBM-PC 에서의컴파일러 : Turbo/Borland C/C++, Microsoft Visual C/C++, Delphi, Power Buildr 등 ( 통합환경 : 에디터 + 컴파일러 )

1.12 C 의예약어 ANSI 표준 C는변수이름이나함수이름으로사용될수없는 32개의키워드 (keyword) 를정의하고있다. 그리고상용의 C언어컴파일러는약간의추가키워드를가지고있다. 이는 8086계열의프로세서의메모리관리를효율적으로하기위하여, 또는다른언어와의상호프로그램을지원하기위하여도입되었다. 가장널리사용되는키워드는아래에있는것과같다. C언어에서의모드키워드는소문자로되어있다. 또한키워드는함수나변수의이름으로사용될수없다. 컴파일러는키워드와함수, 변수의이름을혼동하기때문이다. 표1-4. ANSI 표준 C에서정의된 32개의키워드 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 표1-5. 추가로도입된키워드 asm _cs _ds _es _ss cdecl far huge interrupt near pascal