SeoulTech 00- nd 프로그래밍입문 장. 컴퓨터, 프로그램및 C 입문 박종혁교수 UCS Lab (http://www.parkjonghyuk.net) Tel: 0-970-670 Email: jhpark@snut.ac.kr
강의목표 컴퓨터기초, 프로그램, 운영체제개념 (.-.4) ( 선택 )진수, 0진수, 6진수수의표현 (.5) ================================ C 역사 (.6) C 프로그램작성방법 (.7) C 프로그램개발주기이해 (.8) ================================ ( 선택 )Visual C 로프로그램작성 (.9) ( 선택 )Dev-C 로프로그램작성 (.0) ( 선택 ) 윈도우명령라인에서컴파일하기 (.) ) ( 선택 )Unix 명령라인에서컴파일하기 (.) C 로시작하는객체지향프로그래밍
컴퓨터구성 컴퓨터는다음의주요한하드웨어컴포넌트로구성되어있다. 중앙처리장치 (CPU), 메모리 ( 주메모리 ), 저장장치 ( 하드디스크, CD, 테이프 ), 입출력장치 ( 모니터, 키보드, 마우스, 프린터 )- 통신장치 ( 모뎀및네트워크카드 (NIC)) Bus Storage Devices Memory CPU Communication Devices Input Devices Output Devices e.g., Disk, CD, e.g., Modem, e.g., Keyboard, e.g., Monitor, and Tape and NIC Mouse Printer C 로시작하는객체지향프로그래밍 3
CPU 중앙처리장치 (CPU) 는컴퓨터의중추로서메모리에서명령을읽어오고실행하는역할을담당한다. CPU 는 개의요소로구성되는데제어부 (control unit) 와산술논리부 (arithmetic/logic unit) 이다. 컴퓨터의클럭속도는보통 MHz(00 만 Hz) 이며 CPU의속도는지속적으로증가되어왔다. 최근의 PC들은 Intel Core Duo 프로세서를탑재하고 3GHz(GHz는,000MHz임 ) 이상의속도를내고있다. Bus Storage Communication Input Output Memory CPU Devices Devices Devices Devices e.g., Disk, CD, and Tape e.g., Modem, and NIC e.g., Keyboard, Mouse e.g., Monitor, Printer C 로시작하는객체지향프로그래밍 4
Memory 메모리에는데이터와프로그램명령들이 CPU에서실행될수있도록저장되어있다. 메모리단위는바이트로 8 비트묶음을의미한다. 사용되기전에프로그램과데이터는메모리로로드되어야한다. 메모리는완전히비어있다기보다는무엇인가기록되어있다고볼수있으며, 초기화되지않은값이메모리에있다면프로그램에서사용할수있는의미있는값은아니며, 새로운의미있는정보가메모리에쓰이게되면이전의값은사라진다. Bus Storage Devices Memory CPU Communication Devices Input Devices Output Devices e.g., Disk, CD, and Tape eg e.g., Modem, and NIC e.g., Keyboard, Mouse e.g., Monitor, Printer C 로시작하는객체지향프로그래밍 5
데이터저장형태 컴퓨터는이진상태인 과 0으로서정보를표현하는기기이다. 여러종류의데이터, 숫자, 문자, 문자열등은일련의비트 ( 바이너리디지트 : 0과 ) 로인코딩된다. 메모리에는이러한데이터와프로그램명령들이 CPU 에서실행될수있도록저장되어있다. 메모리단위는바이트로 8비트묶음을의미하며순서대로번지가매겨진다. 프로그래머는데이터의인코딩, 디코딩에신경쓸필요는없다. 인코딩규칙에따라시스템에서자동으로수행되기때문이다. 인코딩규칙은다양한데, ASCII 인코딩의경우문자 J 를 00000 8 비트 ( 바이트 ) 로인코딩한다.3 과같이작은숫자는 바이트에저장하고, 큰수를저장하고자할경우에는인접한여러바이트를사용하여숫자를저장하게된다. 바이트는최소저장단위이다. Memory address Memory content...... 000 00000 Encoding for character J 00 00000 Encoding for character a 00 000 Encoding for character v 003 00000 Encoding for character a 004 000000 Encoding for number 3 C 로시작하는객체지향프로그래밍 6
저장장치 메모리는휘발성이므로전원이없으면정보가지워지게된다. 때문에영구적인저장을위해서프로그램과데이터는저장장치에저장되어야하며컴퓨터가실제로사용할때메모리로옮겨져서사용된다. 예 : 디스크드라이브 ( 하드디스크, 플로피디스크 )- CD 드라이브 (CD-R, CD-RW, DVD)- 테이프드라이브- USB 플래시드라이브 Bus Storage Devices Memory CPU Communication Devices Input Devices Output Devices e.g., Disk, CD, and Tape e.g., Modem, and NIC e.g., Keyboard, Mouse e.g., Monitor, Printer C 로시작하는객체지향프로그래밍 7
출력장치 : 모니터 모니터는텍스트또는그래픽정보를출력하는장치이다. 해상도와도트피치 (dot pitch) 가모니터의화질을결정한다. Bus Storage Devices Memory CPU Communication Devices Input Devices Output Devices e.g., Disk, CD, and Tape e.g., Modem, and NIC e.g., Keyboard, Mouse e.g., Monitor, Printer C 로시작하는객체지향프로그래밍 8
모니터해상도와도트피치 해상도 resolution 평방인치당픽셀 (pixel: picture elements) 의수로결정되는데, 픽셀은화면에이미지를출력하기위해사용되는작은점 ( 화소 ) 을의미한다. 7인치일반 LCD 모니터의경우가로 80, 세로 04 픽셀을표준해상도로사용한다. 해상도는사용자에의해조절이가능하고해상도를높이게되면이미지가선명해지고깨끗하게보인다. 도트피치 dot pitch 픽셀간간격을의미하는것으로보통 0. 밀리미터에서 0.8 밀리미터정도가된다. 도트피치가작을수록화질이좋다. C 로시작하는객체지향프로그래밍 9
통신장치 많이사용되는통신장치에는다이얼업모뎀 (modem), DSL, 케이블모뎀, 네트워크카드등이있다. 다이얼업모뎀은전화선을사용하여 56,000bps(bit per second) 속도로통신이가능하다. DSL(Digital Subscriber Line) 도전화선을사용하여통신하지만, 다이얼업모뎀에비해 0배빠른속도로통신이가능하다. 케이블모뎀은케이블 TV 업체의케이블라인을사용하여통신하는방식이며 DSL 과속도가비슷하다. 네트워크카드 (NIC: Network Interface Card) 는컴퓨터를 LAN(Local Area Network) 에연결하기위해필요한장치이며 LAN은기업, 대학및기관에서폭넓게사용되고있다. 일반적인 NIC는 0BaseT로 0Mbps( 초당백만비트 ) 의속도로통신이가능하다. Bus Storage Devices Memory CPU Communication Devices Input Devices Output Devices e.g., Disk, CD, e.g., Modem, e.g., Keyboard, e.g., Monitor, and dtape and dnic Mouse Printer C 로시작하는객체지향프로그래밍 0
프로그램 프로그램은소프트웨어를의미하는것이며컴퓨터가실행할명령 (instruction) 을의미한다. 사용자는프로그램을통해컴퓨터가처리할작업을지시하게된다. 프로그램이없다면컴퓨터는하나의비어있는기계덩어리에불과하다. 컴퓨터는사람의말을이해할수없으므로, 컴퓨터언어를사용하여컴퓨터에필요한프로그램을작성하는것이필요하다. C 로시작하는객체지향프로그래밍
프로그래밍언어 기계어어셈블리언어고급언어 기계어는가장원시적인수준의언어로 0 과 의조합으로구성된언어이며특정플랫폼의컴퓨터에적합하게작성되어다른타입의컴퓨터간에는호환되지못한다. 명령어도바이너리코드형태로되어있으므로, 다양한명령을사용하려면여러바이너리코드를사용해야한다. 기계어로프로그램을작성하는것은지루한작업이며읽고수정하는것도쉽지않다. 예로써두수를더하는경우다음과같은명령을작성하여야한다. 0000000 C 로시작하는객체지향프로그래밍
프로그래밍언어 기계어어셈블리언어고급언어 어셈블리어 (assembly language) 는저수준의프로그래밍언어로기계어명령을대신하는연상기호 (mnemonic) 를사용한다. 예로써두수를더하는경우를어셈블리어로작성하면다음과같은명령을작성하여야한다. ADDF3 R, R, R3 Assembly Source File Machine Code File ADDF3 R, R, R3 Assembler 0000000 C 로시작하는객체지향프로그래밍 3
프로그래밍언어 기계어어셈블리언어고급언어 고급언어 (high-level language) 는영어문장과유사한형태로만들어져있으므로배우기쉽고프로그램작성이용이하다. 예를들어고급언어로원의반지름이 5인원의면적을구하는프로그램은다음과같이작성하면된다. area = 5 * 5 * 3.45; C 로시작하는객체지향프로그래밍 4
인기있는고급언어 COBOL (Common Business Oriented Language) FORTRAN (FORmula TRANslation) BASIC (Beginner All-purpose Symbolic Instructional Code) Pascal (Blaise Pascal이라고도함 ) Ada (Ada Lovelace이라고도함 ) Visual Basic (Microsoft에서개발한비주얼베이직 ) Delphi (Borland에서개발한 Pascal 유사언어 ) C (B 언어를토대로만들어진언어 ) C (C 기반객체지향언어 ) Java C# (Microsoft 에서개발한 Java와유사한언어 ) C 로시작하는객체지향프로그래밍 5
소스코드컴파일 고급언어로작성된프로그램을소스프로그램 (source program) 이라고한다. 컴퓨터는소스프로그램을바로이해할수없기때문에컴파일러 (compiler) 를사용하여기계어로변환하는과정을거치게된다. 기계어프로그램은라이브러리와링크되어실행파일을만들게된다. Source File Compiler Object File Linker Excutable File C 로시작하는객체지향프로그래밍 6
운영체제 운영체제 (OS) 는컴퓨터에서실행되는가장중요한프로그램으로컴퓨터시스템의자원을관리하고프로그램을관리하는역할을한다. 우리가보통사용하는운영체제는윈도우 (98, NT, 000, Me, XP, Vista) 나 Mac OS 또는 Linux 운영체제중의하나일것이다. 윈도우는현존하는가장인기있는운영체제이며, 웹브라우저, 워드프로세서같은응용프로그램도운영체제없이는실행될수없다. User Application Programs Operating System Hardware C 로시작하는객체지향프로그래밍 7
수체계 NOTE: 이절은우선넘어가고다음에 진수체계나 6진수에대한궁금한사항이있을때찾아보는형태로활용해도좋다. binary 0, octal decimal 0,,, 3, 4, 5, 6, 7 0,,, 3, 4, 5, 6, 7, 8, 9 hexdecimal 0,,, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F C 로시작하는객체지향프로그래밍 8
수체계 컴퓨터는내부적으로메모리나디스크같은저장장치에 0과 을저장할수있기때문에 진수체계를사용한다. 컴퓨터의숫자나문자는 0과 로구성된열로작성된다. 이때 0과 각각을비트 (bit) 라고한다. 진수체계는두개의수, 즉 0 과 을가지고있는것이다. 우리는 0진수체계를사용하므로 진수는쉽게의미가오지는않는다. 프로그램에서 0을작성하는경우 0진수로작성하게되지만, 컴퓨터소프트웨어에의해 진수로변환되며, 컴퓨터내부의 진수도변환에의해 0진수로표현된다. C 로시작하는객체지향프로그래밍 9
수체계, cont. 0진수의숫자는 0,,, 3, 4, 5, 6, 7, 8, 9이며 0진수는이들숫자로만만들어진다. 숫자는위치에따라숫자의값도달라진다. 숫자의위치에따른값은 0의멱승이된다. 예를들어, 십진수 743에는숫자 7, 4,, 3이있는데각기 7000, 400, 0, 3 값을가진다. 7 4 3 0 3 0 0 0 0 = 3 7 0 4 0 0 3 = 7000 400 0 3 = 743 0 0 0진수체계시스템은 0개의수를사용하며각자리는 0의멱승의값을가진다. 여기에서 0은밑수 (base) 또는기수 (radix) 가된다. 따라서 진수의경우에는 개의수가사용되므로기수가 가되며, 6진수의경우에는 6개의수가사용되므로기수가 6 이된다. C 로시작하는객체지향프로그래밍 0
수체계, cont. 많은경우 0진수형태로프로그램을작성하게되지만, 운영체제같은시스템프로그래밍을작성하는경우에는기계어코드를직접작성하는것도필요하므로 진수를직접사용하기도한다. 진수로표현하면길어지고이해도쉽지않게되므로 6진수 (hexadecimal number) 가 진수를간략히표현하는형태로사용된다. 6진수는이진비트 4개로표현되며, 6진수체계는 03456789ABCDEF 0,,, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, 의 6 개의기호로숫자를표현한다. A, B, C, D, E, F 기호는숫자 0에서부터 5 까지를의미한다. C 로시작하는객체지향프로그래밍
Binary Numbers => Decimals y 진수는다음의진수와같은값을가진다 0... b b b b b b n n n 다음의 0 진수와같은값을가진다. 0 0 b b b b b b n n n n n n... 0 b b b b b b n n n 진수 0 은 = 0 진수 이다. 0 진수 000 은 = 0 진수 8 이다. 0 0 0 3 이진수이진수 000 은 = 0 진수 7 이다. 0 0 0 3 4 5 6 7 C 로시작하는객체지향프로그래밍
Decimals => Binary 0진수를 진수로변환하려면, b, n, bn, b n,..., b, b b0 비트의값을구하는것이필요하다. 다음과같이표현된다. d = b n n n n bn bn... b b b0 0 진수를구하는방법은 0진수를 로나누는데몫이 0이될때까지계속나누기를한다. 이때구해진나머지가 b 0, b, b,..., bn, bn, bn 이된다. 예를들어 0 진수 3 은 진수로 0 이다. 변환은다음과같다. 0 3 7 5 30 6 Quotient 0 3 7 6 5 4 30 30 0 6 60 3 Remainder b 6 b 5 b 4 b 3 b b b 0 C 로시작하는객체지향프로그래밍 3
Windows 계산기 공학용윈도우계산기로수변환기능이있다. 계산기프로그램은윈도우에서 [ 시작 ]-[ 프로그램 ]- [ 보조프로그램 ] 에서실행한다. C 로시작하는객체지향프로그래밍 4
Hexadecimals => Decimals 6진수는이진비트 4개로표현되며, 6진수체계는 0,,, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F 의 6 개의기호로숫자를표현한다. A, B, C, D, E, F 기호는숫자 0에서부터 5까지를의미한다. 6 진수 h... h nhn h 는 n hh 0 다음의 0진수와같다. h n n n n 6 hn 6 hn 6... h 6 h 6 h0 6 0 6진수 7F 7 6 5 = 0진수 7 3 6진수 FFFF 5 6 5 6 5 6 5 = 0진수 65535 C 로시작하는객체지향프로그래밍 5
Decimals => Hexadecimal 6 진수 h n, hn, h n,...,, h, h, h0 은 0진수로다음과같은표현할 수있다. d = h n n n n 6 hn 6 hn 6... h 6 h 6 h0 6 0 6 진수를구하는방법은 0 진수를 6으로나누어몫이 0이될때까지 7 계속한다. 이때구해진나머지가 6 7 6 3 h 0, h, h,..., hn, hn, hn 이된다. 0 0 Quotient 7 Remainder 예를들어 0 진수 3 은 6 진수로 7B이다. 변환은다음과같다. h h 0 C 로시작하는객체지향프로그래밍 6
Hexadecimal Binary Binary Hex Decimal 6진수를 진수로변환하기위해서는 0000 0 0 6진수의각자리를 4비트 진수로변환하면 000 된다. 000 00 3 3 000 4 4 진수를 6진수로변환하기위해서는 00 5 5 오른쪽에서부터왼쪽으로 진수 4자리마다 00 6 6 잘라 6진수로변환하면된다. 0 7 7 000 8 8 00 9 9 00 A 0 0 B 0 0 0 0 00 C 0 D 3 0 E 4 3 F 5 8 D C 로시작하는객체지향프로그래밍 7
C 의역사 C, C, Java, C# 은유사하며서로관련이있는언어이다. Java는 C 가모델이되었고, C# 은 C 와비슷하면서 Java 언어의특징을가지는언어이다. 이들중한언어를알고있으면다른언어를배우기가쉬워진다. 언어는 B 언어로부터발전하였으며 B 언어는 BCPL 언어가모태가되었다. BCPL은 960년대중반에운영체제와컴파일러개발을위해마틴리차드 (Martin Richards) 에의해개발되었으며켄톰슨 (Ken Thompson) 은 BCPL의많은특징을수용하여 B언어를만들게되었다. C 는 C 의확장으로 983-985 년동안에벨연구소의비얀스트로스트룹 (Bjarne Stroustrup) 에의해개발되었으며 C 언어에여러특징들이더해졌다. 가장중요한특징은객체지향프로그래밍 (object-oriented oriented programming) 을위한클래스에관한내용이추가된것이다. C 언어에대한국제표준은 998년미국ANSI(American National Standards Institute) 에의해서정해졌다. C 로시작하는객체지향프로그래밍 8
간단한 C 프로그램 C 언어를사용하여화면에 Welcome to C! 이란문자열을출력하는프로그램이다. #include <iostream> int main() { // Display Welcome to C to the console std::cout << "Welcome to C!" << std::endl; return 0; } Welcome Run C 로시작하는객체지향프로그래밍 9
간단한 C 프로그램확장 리스트.의프로그램은한줄의메시지를출력하였다. 일단이프로그램을이해하고나면여러줄을출력하는것은어려운일이아니다. 리스트. 는리스트.을수정하여 3줄을출력하는프로그램으로수정하였다. #include <iostream> int main() { std::cout << "Welcome to C!" << std::endl; std::cout << "Welcome to CBuilder!" << std::endl; std::cout << "Welcome to C Compiler!" << std::endl; return 0; } C 로시작하는객체지향프로그래밍 30
프로그램작성, 컴파일, 실행 Source code (developed by the programmer) #include <iostream> int main() { // Display Welcome to C to the console std::cout << "Welcome to C!" << std::endl; return 0; } Create/Modify Source Code Saved on the disk Source Code Compiler stored on the disk If compilation errors An object file (e.g., Welcome.obj) is created. Machine Code Linker stored on the disk Anexecutable file (e.g., Welcome.exe) is created. Executable Code Run Executable Code eg e.g., Welcome Result If runtime errors or incorrect result C 로시작하는객체지향프로그래밍 3
프로그램밍실습준비 -VC 사용하기 순서 ) 프로젝트를만든다. ) 파일에서 C Source파일을만든다. 3) 프로그램소스를만든다. 4) 컴파일하기 ( 소스파일 목적파일로변환 ) 5) 실행파일만들기 6) 에러찾기 (F4) 및수정 단축키를활용하여보다편리하게프로그래밍할수있음. 빌드단축키 :F7 실행단축키 : Ctrl F5 * 실행을바로해도자동적으로빌드를실행함. C 로시작하는객체지향프로그래밍 3
프로젝트만들기 / 소스파일작성하기 C 로시작하는객체지향프로그래밍 33
프로젝트만들기 / 소스파일작성하기 C 로시작하는객체지향프로그래밍 34
프로젝트만들기 / 소스파일작성하기 C 로시작하는객체지향프로그래밍 35
프로젝트만들기 / 소스파일작성하기 C 로시작하는객체지향프로그래밍 36
컴파일하기 & 실행하기 C 로시작하는객체지향프로그래밍 37
컴파일하기 & 실행하기 C 로시작하는객체지향프로그래밍 38
컴파일하기 & 실행하기 C 로시작하는객체지향프로그래밍 39
질의및응답 끝 C 로시작하는객체지향프로그래밍 40