C 언어 강의노트

Download Report

Transcript C 언어 강의노트

C Programming
(Chap1. Introduction to Computers)
컴퓨터공학과
C 언어
교수 조교 소개
담당교수 : 김승욱 – 컴퓨터공학과 부교수
AS관 903호
Tel : 02) 705-8932
E-mail : [email protected]
담당조교 : 박영재 – 컴퓨터공학과 박사생
AS관 901호
E-mail : [email protected]
컴퓨터공학과
1-2
C 언어
강의자료 안내
http://icclab.sogang.ac.kr
Board Click!
컴퓨터공학과
1-3
C 언어
강의자료 안내
http://icclab.sogang.ac.kr
C언어(교양)
Click!
컴퓨터공학과
1-4
C 언어
Chapter 1. Contents
컴퓨터공학과

Computer Systems

Computer Hardware

Computer Software

Computer Languages

A Overview of C

C program Development Environment

System Development

Program Development

Programming
1-5
C 언어
Computer Systems

Computer Systems


Data를 다루는 명령어들을 가진 머신(machine)
System은 두개의 부분으로 구성: hardware and software


컴퓨터공학과
hardware : 컴퓨터를 구성하는 물리적인 장치(device)를 의미
software : 컴퓨터가 수행할 작업을 지시하는 명령어들의 집합
(프로그램), 소프트웨어는 응용 소프트웨어와 시스템
소프트웨어로 나누며, 시스템 소프트웨어는 하드웨
어를 작동시키는 기본 소프트웨어
1-6
C 언어
Computer Hardware

Computer Hardware





컴퓨터공학과
입력장치 : 키보드, 마우스, 스캐너, 터치스크린 ...
중앙처리장치 (CPU)
 시스템 안에서 수리적 계산, 데이터의 비교, 데이터의 이동과 같은 명
령어들을 수행
 기능  산술(Arithmetic), 논리(Logical), and 제어(Control)연산
주 메모리 (Primary Storage )
 프로세스 동안에 프로그램과 데이터가 저장되는 장소
 CPU는 메모리의 어느 부분에서도 데이터를 가져 올 수 있다.
 액세스가 매우 빠르다 (예 : SRAM, DRAM)
보조기억장치(Secondary Storage)
 보조기억장치 ( example : 하드디스크, 플로피디스크 )
 데이터를 제거하기 전에는 영구적이다.
 상대적으로 저렴한 가격이다. 그러나 느리다.
출력장치 : 모니터, 프린터, 스피커, …….
1-7
C 언어

Basic hardware components
컴퓨터공학과
1-8
C 언어
Computer Software


System software : operating software
System support software
System development software
Application software : General-purpose software
Application-specific software
컴퓨터공학과
1-9
C 언어

System Software and Application Software

System Software : 컴퓨터의 하드웨어들을 처리하는데 사용하는 프
로그램과 컴퓨터연산을 처리하기 위한 프로그램으로 구성.
 Operating System: 사용자가 컴퓨터를 이용하기 편하게 인터페
이스를 제공한다. 시스템상호간 인터페이스, 파일 처리, 데이
터베이스처리의 서비스를 제공한다.
Application Software
Operating System
Hardware
Microcomputers Operating System: Windows, OS/2, MacOS-X
Mid-range Computers: UNIX on Workstations
OS/400 for IBM AS/400
VMS on DEC’s VAX-machine
컴퓨터공학과
1 - 10
C 언어
System Support Software: 포맷프로그램, 보안 프로그램과 같은
시스템 유틸리티를 제공한다.
 System Development Software: 언어 번역과 디버깅 툴을 포함한
다.
Application Software
 General Purpose Software: 워드프로세서, 데이터베이스관리시
스템 등…
 Application-specific Software: 채팅프로그램, ...


컴퓨터공학과
1 - 11
C 언어
컴퓨터공학과
1 - 12
C 언어
Layered View of Computer
컴퓨터공학과
1 - 13
C 언어
Computer Languages

Computer Languages




컴퓨터공학과
1940s Machine Languages(기계어)
 오직 기계만이 이해할 수 있다.
1950s Symbolic Languages (Navy)  Assembly Languages
 기호코드를 기계어로 번역한다.
1960s High-Level Languages: Portable to many different computers and
must be compiled. ( Fortran, COBOL, Pascal, C )
1990s Natural Languages (Evolving)
 컴퓨터는 자연어를 이해해서 즉시 실행한다.
1 - 14
C 언어

프로그램언어의 분류

고급언어의 분류

컴퓨터공학과
고급 언어로 분류하는 여러 방법 중의 하나가 절차지향
(Procedural) 언어와 객체지향(Object oriented) 언어로 나누
는 방법
1 - 15
C 언어

BASIC



FORTRAN



포트란(FORTRAN)은 Formula Translating system(수식 번역 시스템)
의 약자
과학과 공학 및 수학적 문제들을 해결하기 위해 고안된 프로그래밍 언어
COBOL


베이직(BASIC)은 Beginner’s All-purpose Symbolic Instruction
Code의 약어
초보자도 쉽게 배울 수 있도록 만들어진 대화형 프로그래밍 언어
코볼(Common Business Oriented Language)은 기업의 사무처리에
적합한 프로그래밍 언어
PASCAL

컴퓨터공학과
프로그램의 작성 즉, 구조적 프로그래밍 및 알고리즘 학습에 적합하도록
개발된 프로그래밍 언어
1 - 16
C 언어

C++



C++은 객체지향 프로그래밍(OOP Object-Oriented Programming)
을 지원하기 위해 C언어가 가지는 장점을 그대로 계승하면서 객체의 상
속성(inheritance) 등의 개념을 추가한 효과적인 언어
C++는 C언어의 확장이라고 볼 수 있으므로 기존의 C언어로 개발된 모
든 프로그램들을 수정 없이 그대로 사용 가능
JAVA





컴퓨터공학과
자바(JAVA)의 시초는 1992년 미국의 SUN 사에서 가전 제품들을 제어
하기 위한 언어에서부터 비롯됨
운영체제나 CPU와는 독립적으로 실행 가능한 프로그래밍 언어
자바는 C++언어의 기초 위에 객체지향 개념을 구현하도록 설계된 언어
분산 네트워크상에서의 프로그래밍이 용이
자바 프로그램의 실행은 운영체제의 가상 머신(Virtual Machine) 위에
서 인터프리터 방식으로 작동하므로 프로그램의 속도가 떨어진다는 단
점도 지적
1 - 17
C 언어
컴퓨터공학과
1 - 18
C 언어
A Overview of C

The Origins of C



C 는 Dennis Ritchie가 Unix 운영체제에서 사용되는 a DEC PDP-11
에서 개발함 (1970s)
1983 ANSI standard C for UNIX version
C is a middle level language


컴퓨터공학과
bits, bytes, address을 조작할 수 있다
C high-level languages와 assembly language의 특성이 병합되어 있
다
1 - 19
C 언어

C는 구조적 언어이다.




구조적 : block-structured language은 프로시저나 함수 내에서 프로
시저나 함수를 선언할 수 있다. --> visibility (local or global)
Pascal, Ada, C, Modula-2와 비슷하다.
비구조적 언어 : FORTRAN, BASIC, and COBOL
C is a programmers language



컴퓨터공학과
Industry-proven programming language
system programming으로 사용 : 운영체제의 부분 또는 지원하는 유
틸리티
Systems programs
 운영체제, 인터프리터, 에디터, 어셈블리 프로그래밍, 컴파일러,
데이터베이스관리시스템.
1 - 20
C 언어

Compiling a C program




Creating your program => file_name.c
Compiling your program => many names.o files
Linking your program with whatever functions are needed from the
library
=> filename.exe file
Stack
C’s memory map




stack ; 함수호출 주소, 지역변수 호출 등의
주소 반환를 유지…
heap ; 프로그램이 동적할당으로 사용하는
자유 메모리 지역
global variables
program code
Heap
Global variables
Program code
컴퓨터공학과
1 - 21
C 언어
C program Development Environment
Editor

Disk
Program is created in
the editor and stored
on disk.
Disk
Preprocessor program
processes the code.
Disk
Compiler creates
object code and stores
it on disk.
Disk
Linker links the object
code with the libraries,
creates a.out and
stores it on disk.
C Programs 개발과정






Edit
Preprocess
Compile
Link
Load
Execute
Preprocessor
Compiler
Linker
Primary
Memory
Loader
Loader puts program
in memory.
Disk
..
..
..
Primary
Memory
CPU
..
..
..
컴퓨터공학과
1 - 22
CPU takes each
instruction and
executes it, possibly
storing new data
values as the program
executes.
C 언어
Pure Interpretation
컴퓨터공학과
1 - 23
C 언어
Compilation
Process
컴퓨터공학과
1 - 24
C 언어

Writing, Editing, Compiling, and Linking Programs



컴퓨터공학과
Step 1 : writing and editing programs
 텍스트 에디터를 사용하여 소스 코드를 작성한다. (ex. Notepad,
VC++ editor, etc.)
 작성된 코드는 소스 파일로 저장된다.
Step 2 : Compiling Programs
 디스크에 저장된 소스파일은 기계어로 번역되어야 하는데 이 과
정을 컴파일링이라 부르며 C 컴파일러는 preprocessor와 translator
두 가지 프로그램으로 나뉜다.
 Preprocessor : 기계어 번역을 위한 준비 수행.
 Translator : 준비된 프로그램을 기계어로 번역하여 object 모듈 (실
행 가능한 완전한 프로그램은 아닌 기계어 모듈) 을 만든다.
Step 3 : Linking Programs
 링커는 번역된 object 모듈들을 연결하여 실행 가능한 프로그램
을 만든다.
1 - 25
C 언어

Program Execution


컴퓨터공학과
보조기억장치에 저장된 실행 가능한 프로그램을 실행하기 위해서
는 운영체제에 대한 실행명령과 함께 실행을 수행할 로더(loader)가
필요하다.
Loader는 프로그램을 주 메모리로 옮겨주며, 프로그램이 시스템 컨
트롤을 넘겨 받게 되면 실행은 시작된다.
1 - 26
C 언어
System Development

System Development Life Cycle
구현 단계는 흐름도 또는 의사
코드를 컴퓨터가 이해할 수 있
는 프로그래밍 언어로 번역
(translation)하는 단계
컴퓨터공학과
1 - 27
C 언어
Program Development

Program Development



컴퓨터공학과
Understand the Problem
 문제를 해결하기 위한 첫 번째 과정으로 문제의 요구사항이 무
엇인지 충분히 숙지하고 나서 문제 해결을 시작해야 한다.
Develop the Solution
 문제를 숙지한 후 바로 프로그램을 작성하는 것은 바람직하지
못하다. 반드시 문제 해결을 위한 충분한 고민 이후에 프로그램
을 작성하는 것이 여러 측면에서 유리하다.
 Structure Chart, Pseudocode, Flowchart 등을 이용하여 설계한다.
 충분히 고려된 설계를 통해 에디터를 사용 소스코드를 작성한
다.
Test the Program
 요구사항에 명시된 대로 문제 해결이 이루어 지도록 프로그램
이 작성되었는지 확인하는 것은 중요하다.
1 - 28
C 언어
Programming

Programming Style


좋은 프로그램이란...?
 단순하면서 읽기 쉽고 수행이 빠른 프로그램
 전체가 모듈로 잘 나뉘어 이해가 쉬운 프로그램
 문제의 특성과 일치하는 프로그램
Debugging




컴퓨터공학과
완벽한 프로그래밍은 불가능하다.
모든 프로그램은 오류가 있으며 오류가 없는 프로그램을 만드는 것
보다는 발견되는 오류에 대한 유지보수, 관리가 더 중요하다.
잘 짜여진 프로그램은 디버깅 하기도 쉽다.
C언어는 기계에 따라, 컴파일러에 따라 결과가 다를 수 있는 만큼
디버깅은 중요하다.
1 - 29