2009 년여름계절학기 C 프로그래밍및실습 한국항공대학교항공우주기계공학부 ( 강의자료 : http://mercury.kau.ac.kr/sjkwon) 1 강의 2시간 실습 1 시간 ( 진도범위내예제연습 ) TA 참여 강의계획서 2
강의계획서 각장과제물 ( 단순 copy 는영점처리 ) 1) 진도범위내의중간점검문제및이해점검문제 2) 프로그래밍과제 (3,6번문제 ) 소스코드와결과제출 제출기한 : 다음수업일, 제출장소 : 기계관 3 층사물함 3 Chapter 00 컴퓨터와프로그래밍 2009 한국항공대학교항공우주기계공학부 (http://mercury.kau.ac.kr/sjkwon) 4
컴퓨터와프로그램 컴퓨터 전자적으로계산을수행하는장치 프로그램 컴퓨터의행동을지시하는명령어 5 하드웨어와소프트웨어 하드웨어 (Hardware) 컴퓨터를구성하는물리적인장치 (device) 를의미 소프트웨어 (Software) 컴퓨터가수행할작업을지시하는명령어들의집합 ( 프로그램 ) 소프트웨어는응용소프트웨어와시스템소프트웨어로나누며, 시스템소프트웨어는하드웨어를작동시키는기본소프트웨어 6
컴퓨터시스템 컴퓨터시스템 컴퓨터시스템은하드웨어와소프트웨어로이루어진다. 컴퓨터하드웨어구성 120 GB 하드디스크드라이브 64 배속 DVD/CD-RW 콤보드라이브 512MB RAM 주메모리 키보드 CPU 2.8GHz 인텔펜티엄 4 프로세서 17 인치 LCD 모니터해상도 1280 1024 그림 1.1 컴퓨터하드웨어구성 7 컴퓨터하드웨어구성요소 중앙처리장치 (Central Processing Unit; CPU) 프로그램의명령어들을수행하는컴퓨터의두뇌 주메모리 (Main Memory) 프로그램과데이터를저장하는휘발성 (volatile) 기억장치 그림 1.1 에서 512 메가바이트 (MB) RAM 보조메모리장치 (Secondary Memory) 소프트웨어를비교적영구적으로저장하는비휘발성기억장치 그림 1.1의 120 기가바이트 (GB) 하드디스크드라이브 64배속 DVD/CD-RW 콤보 (combo) 드라이브 입출력장치 (Input/Output Device) 인간과컴퓨터의상호작용을도와주는장치 키보드, 마우스, 모니터 8
하드웨어구성요소간정보이동 프로그램실행을위한하드웨어구성요소간정보이동 하드디스크에저장된프로그램을주메모리에읽어들인다 CPU는주메모리로부터프로그램의명령어들을하나씩읽어들여서그명령어를한번에하나씩수행한다. 명령어가사용하는데이터도역시주메모리에저장되며그데이터는보조메모리혹은키보드같은입력장치를통해입력된다. 프로그램은실행되는동안필요에따라모니터와같은출력장치에정보를출력한다 9 소프트웨어 시스템소프트웨어 (system software) 컴퓨터시스템효율적인운영과관리를위한소프트웨어 운영체제, 컴파일러, 디버거, 유틸리티프로그램 응용소프트웨어 (application software) 시스템소프트웨어가아닌거의모든소프트웨어를지칭하는포괄적인용어 문서작성 S/W, 데이터관리 S/W, 스프레드시트, 그래픽 S/W, 웹관련S/W, 통계 S/W, 게임 S/W 등 10
소프트웨어 응용 S/W 파워포인트 유틸리티 시스템 S/W 운영체제 디버거 워드프로세서 웹브라우저 컴파일러 데이터베이스 그림 1.6 소프트웨어의종류 11 프로그램실행원리 프로그램실행원리 폰노이만구조 (von Neumann architecture) 를기본으로한다. 프로그램내장방식 (stored program) 의컴퓨터 프로그램 적재 주메모리 프로그램 ( 명령어 + 데이터 ) 명령어실행결과 명령어, 데이터인출 CPU PC 그림 1.4 폰노이만컴퓨터구조 12
컴퓨터의자료표현 자료표현원리 2진수체계를사용 비트와바이트 Bit Binary Digit, 0 또는 1 의두개정보표현하는정보의최소단위 byte 연속된 8개의비트 워드 연속된 4 개의바이트, 총 32 비트 실질적으로시스템마다워드의크기는다를수있음 13 저장단위의크기 단위 정보용량의비교 14
진법과수의구성 10 진법 0에서 9까지의수를사용하며, 이 10 가지의수를한자리의기본단위로하는진법 2 진법 0과 1의조합으로숫자를표시하는방법 컴퓨터의자료표현은한비트가두가지표현이가능 16진법 0에서 9, A에서 F까지 15 2, 8, 16 진수간상호관계 2 진수, 8 진수그리고 16 진수사이의관계 2진수의 4자리씩을 16진수로변환하면쉽게 2진수를 16진수로변환이가능 2진수의 3자리씩을 8진수로변환하면쉽게 2진수를 8진수로변환이가능 10 진수 26.625625 를각각 2 진수, 8 진수, 16 진수로표현하면 16
이진수와십진수 십진수 열개의숫자 (0에서 9) 를이용하여값을표현한다. 십진수의각자리에는자릿값이있다. 182 = 1 x 10 2 + 8 x 10 1 + 2 x 10 0 = 1 x 100 + 8 x 10 + 2 x 1 이진수 두개의숫자 (0 과 1) 를이용하여값을표현한다. 이진수의각자리에는자릿값이있다. 1101 2 = 1 x 2 3 + 1 x 2 2 + 0 x 2 1 + 1 x 2 0 = 1 x 8 + 1 x 4 + 0 x 2 + 1 x 1 = 13 17 십진수를이진수로변환 예 2 4 (=16) < 27 < 2 5 (=32) 27 = 1 x 16 + 1 x 8 + 0 x 4 + 1 x 2 + 1 x 1 = 1 x 2 4 + 1 x 2 3 + 0 x 2 2 + 1 x 2 1 + 1 x 2 0 = 11011 2 변환방법 27 을 2 4 (=16) 로나누면몫은 1 이고나머지는 11 이다. 첫번째비트는 1 이고, 11 은나머지 4 비트들로표현되어야한다. 11을 2 3 (=8) 으로나누면몫은 1이고나머지는 3이다. 두번째비트는 1이고, 3은나머지 3 비트들로표현되어야한다. 3 을 2 2 (=4) 로나누면몫은 0 이고나머지는 3 이다. 세번째비트는 0이고, 3은나머지 2 비트들로표현되어야한다. 3을 2 1 (=2) 로나누면몫은 1이고나머지는 1이다. 네번째비트는 1 이고, 1 은나머지 1 비트로표현되어야한다. 18
16 진수 (hexadecimal) 16 진수 (hexadecimal) 기수 16인수체계 0,, 9, A(10), B(11), C(12), D(13), E(14), F(15) 2AC 16 = 2 x 16 2 + A x 16 1 + C x 16 0 = 2 x 256 + 10 x 16 + 12 x 1 = 684 그림 1.7 이진수, 16 진수관계 19 2 의보수 2 의보수 (2 s complement) 음수를표현하는방식중가장많이사용되는방식이 2 의보수 20
2 의보수계산방법 음수의이진수표기인 2 의보수를구하는방법 1 2 n 에서음수의절대값을빼는방법 여기에서 n 은숫자가표현되는비트의개수 예를들어 4 를 4 비트로 2 의보수로표현하자면, 표현되는비트의수가 4 개이므로 2 4 4 = 12 = 1100 2 의보수를구하는방법 2 예를들어 4를 4비트로 2의보수로표현하자면 21 문자와논리 문자코드 N비트의조합에일정한문자를할당하여지정한것을문자코드 국제표준인문자코드는아스키코드, 엡시딕코드, 유니코드 아스키코드 ASCII(American Standard Code for Information Interchange) 국제적인표준으로사용하는문자코드체계로서 7 비트를사용하여 128개의문자, 숫자, 특수문자코드를규정 대문자 A의코드는 1000001이며, 소문자 a의코드는 1100001 논리 참과거짓 22
아스키코드표 23 프로그래밍언어 프로그래밍언어의필요성 사람과컴퓨터가서로의사교환을하기위해 사람이컴퓨터에게지시할명령어를프로그래밍언어로기술 24
기계어와어셈블리어 기계어 0과 1로표현되는프로그래밍언어로서컴퓨터가직접이해할수있는유일한언어 어셈블리어 기계어의연산코드와피연산자 (operand) 를프로그래머가좀더이해하기쉬운기호형태로일대일대응시킨프로그래밍언어 25 저급언어와고급언어 HLL 인간에게친근한언어를고급언어 LLL 기계어와어셈블리어는저급언어 26
프로그래밍언어 프로그램을작성하기위한언어 사람이컴퓨터에게시키고싶은내용을표현하기위한표기법 그발전단계에따라기계어, 어셈블리어, 고급언어로분류 기계어 이진수코드로 CPU 종류마다고유의기계어 1001 0001 0001 위치의값을누산기에저장하라. 1100 0010 누산기에 0010 위치의값을더하라 1010 0011 누산기의값을 0011위치에저장하라. 어셈블리어 기계어의이진수코드를기호화코드 (mnemonics) 로대치한것 LOAD Y Y의값을누산기에저장한다. ADD Z 누산기에 Z의값을더하라 STORE X 누산기의값을 X에저장하라. 고급언어 영어와비슷한구문으로표현되며, 읽고쓰기가보다쉽다 고급언어는프로그래머가기계의세부사항을알필요가없게해준다 X = Y + Z 27 고급언어의종류 포트란 포트란 (FORTRAN) 은 FORmula TRANslating system( 수식번역시스템 ) 의약자 과학과공학및수학적문제들을해결하기위해고안된프로그래밍언어 베이직 베이직 (BASIC) 은 Beginner s All-purpose Symbolic Instruction Code의약어 초보자도쉽게배울수있도록만들어진대화형프로그래밍언어 코볼 코볼 (COmmon Business Oriented Language) 은기업의사무처리에적합한프로그래밍언어 파스칼 PASCAL 은프랑스의수학자인파스칼 (Pascal) 의이름에서따온언어 프로그램의작성즉, 구조적프로그래밍및알고리즘학습에적합하도록개발된프로그래밍언어 28
C 와 C++ C C는유닉스 (UNIX) 의운영체제작성을위한시스템프로그래밍언어로설계된언어 컴파일러나수많은소프트웨어도구 (Tool) 들도 C 언어로개발 다른고급언어에비하여하드웨어에대한보다확실한통제가가능 특정컴퓨터기종에의존하지않으므로프로그램의이식성 (portability) 이높음 풍부한연산자와데이터형 (data type) 을갖고있기때문에범용 프로그래밍언어로서널리보급되었으며, 응용소프트웨어의개발에널리이용 C++ C++ 은객체지향프로그래밍 (OOP Object-Oriented Programming) 을지원하기위해 C 언어가가지는장점을그대로계승하면서객체의상속성 (inheritance) 등의개념을추가한효과적인언어 C++ 는 C언어의확장이라고볼수있으므로기존의 C언어로개발된모든프로그램들을수정없이그대로사용가능 29 자바 자바 자바 (JAVA) 의시초는 1992년미국의 SUN 사에서가전제품들을제어하기위한언어에서부터비롯됨 운영체제나 CPU와는독립적으로실행가능한프로그래밍언어 자바는 C++ 언어의기초위에객체지향개념을구현하도록설계된언어 분산네트워크상에서의프로그래밍이용이 자바프로그램의실행은운영체제의가상머신 (Virtual Machine) 위에서인터프리터방식으로 프로그래머에게중요한언어 C, C++, Java 기본은모두 C 언어 30
프로그램과소프트웨어 프로그램 프로그램은컴퓨터에게어떤일의수행을지시하는명령어 (instruction) 집합 소스와실행파일 특정한프로그램언어로이명령어의집합을모아놓은파일을프로그램소스 (source) 이소스파일로부터만들어진실행파일은컴퓨터가이해할수있는기계어로명령어를모아놓은파일 소프트웨어 소프트웨어는보통 프로그램 이라고부르는것외에도데이터와문서까지를포함하는포괄적인개념 31 소프트웨어공학과개발단계 소프트웨어공학 신뢰성있고실제기계에서효과적으로작동하는소프트웨어를경제적으로얻기위해서올바른공학적원리들을체계화시킨학문 소프트웨어의생명주기 소프트웨어개발단계는분석, 설계, 구현, 검사, 유지보수의과정을거치며, 개발과정에서이단계를순환적으로반복 32
프로그램개발환경 프로그램 컴퓨터에게어떤일의수행을지시하는명령어 (instruction) 의집합 통합개발환경 ( 예, Microsoft Visual Studio) Integrated Development Environments 프로그램을개발하는데필요한컴파일러, 디버거, 링커, 에디터등을통합적으로제공하는개발환경 33 컴파일러와어셈블러 컴파일러 (compiler) 고급언어로작성된프로그램을기계어로바꾸어주는프로그램 어셈블러 (assembler) 어셈블리언어로작성된프로그램을기계어로바꾸어주는프로그램 34
프로그램개발과정 링커 (linker) 이러한여러개의목적파일 (*.obj) 들을라이브러리함수와연결해서하나의파일인실행파일을생성하는작업을수행 로더 (loader) 작성된프로그램을컴퓨터의주기억장치에로드 (load) 함으로써프로그램을실행가능하게하는역할을수행 35 오류수정 디버깅 (debugging) 프로그램개발과정에서컴파일에러나실행에러를수정하는과정 36
컴파일러및인터프리터 컴파일러 고급언어로작성된코드를동등한의미의저급언어로된코드로번역하는소프트웨어이다. 입력 소스프로그램 인터프리터 출력 인터프리터 별개의컴파일단계없이한번에한문장씩번역 ( 혹은해석 ) 하여실행한다. 입력 소스프로그램 컴파일러 목적프로그램 출력 37