C프로그래밍 및 실습

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