p r e f a c eª…품c... · 2015-12-08 · 3주 3장 printf의 기본적인 사용법과 상수...

27

Upload: others

Post on 27-Dec-2019

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: P R E F A C Eª…품C... · 2015-12-08 · 3주 3장 printf의 기본적인 사용법과 상수 13장 번호가 붙은 변수, 배열 4주 4장 데이터를 보관하는 장소인
Page 2: P R E F A C Eª…품C... · 2015-12-08 · 3주 3장 printf의 기본적인 사용법과 상수 13장 번호가 붙은 변수, 배열 4주 4장 데이터를 보관하는 장소인
Page 3: P R E F A C Eª…품C... · 2015-12-08 · 3주 3장 printf의 기본적인 사용법과 상수 13장 번호가 붙은 변수, 배열 4주 4장 데이터를 보관하는 장소인

P R E F A C E

3

서 문

저자가 처음으로 컴퓨터와 프로그램이라는 것을 접했던 시기는 1984년 초쯤으로 기억합니

다. 그 당시 APPLE PC라고 하는 개인용 컴퓨터가 청계천 전자상가에서 조립되어 판매되기

시작했는데 본체의 가격도 고가였으며, 플로피 디스크를 이용하는 보조기억장치나 프린터

가 본체 가격만큼이나 비싸서(프린터는 본체의 2배로 기억) 그림의 떡이었던 시절이었기에

모든 장치를 완벽하게 갖춘 PC를 개인적으로 보유했던 사람이 드물었습니다.

우연히 교수님 연구실에 들렀을 때 컴퓨터로 프로그램 작업을 하던 교수님께서 너무도 궁금

해 하던 본인을 위해 짧은 시간 동안이었지만 컴퓨터의 기능과 프로그램을 소개해 주었고,

그 이후로 컴퓨터라는 기계에 매료되었습니다.

공부하는데 꼭 필요한 것이라고 부모님을 여러 번 조른 끝에 본체와 자그마한 흑백 모니터

는 어렵사리 장만했으나 보조기억장치를 이용할 수 없었기 때문에 한번 프로그램을 시작하

면 중간에 멈추고 다른 일을 할 수가 없었으며, 어찌되었던 실행 결과를 확인해야만 끝이 났

었습니다. 그런데 그 당시는 요즘과는 달리 밤늦은 시간에도 자주 정전이 되는 바람에 많은

시간을 공들여 작성했던 프로그램들이 실행 결과를 보기도 전에 한순간에 날아가 버리는 사

태가 이틀 걸러 일어났었고, 그때마다 말로 표현할 수 없는 탄식과 회의가 있었지만 어느 순

간부터 오기가 생겨 몇 번이고 다시 작성했었고, 아침이 된 것도 모르고 실행 결과를 보면서

흐뭇해하던 때가 있었습니다. 아마도 이러한 색다른 경험이 새롭고 다양한 프로그래밍에 대

해 눈을 뜨게 하였고, 초보 프로그래머를 위한 책을 만들려는 용기를 준 것으로 생각합니다.

저자의 경험상 프로그램 언어는 외국어와 마찬가지로 문법만을 외우거나 이해한다고 해서

외국인과의 대화를 자연스럽게 할 수 없듯이 직접 그리고 자주 프로그램을 작성해봐야만 그

문장과 문법의 의미를 이해할 수 있으며, 스스로 새로운 문제에 대해 프로그램을 작성할 수

있는 용기와 능력이 생기게 됩니다. 저자는 우연히도 그러한 연습을 본의 아니게 반복하게

되었지만 지금도 그때의 상황을 고맙게 생각하고 있습니다.

모든 일에는 순서가 있듯이 프로그램도 결국 그 처리의 순서를 정하여 작성하는 것입니다.

이 책이 나오기까지 많은 분들의 도움이 있었습니다. 10여년 가까이 프로그램 언어 과목을

강의해오면서 다소 엉뚱했지만 생각의 전환을 주었던 질문을 던진 학생들에게 고마움을 표

시합니다. 프로그램에 눈을 뜨게 하였고 다양한 마인드를 경험하게 해준 허문열 교수님, 책

Page 4: P R E F A C Eª…품C... · 2015-12-08 · 3주 3장 printf의 기본적인 사용법과 상수 13장 번호가 붙은 변수, 배열 4주 4장 데이터를 보관하는 장소인

P R E F A C E

4

의 목차와 구성에 대해 조언을 아끼지 않으셨던 학과의 여러 교수님께 감사를 드립니다. 그

리고 책의 여러 부분에서 생각의 모티브를 얻게 해준 C 언어 책을 출판하였던 선배 교수님

들께도 지면을 통해 감사드립니다.

그리고 김승기 사장님과 더불어 이 책이 더욱 돋보이도록 훌륭하게 편집해 준 편집부 직원

들에게도 감사의 말씀을 전하며, 항상 믿음으로 대해주는 아내와 정호, 지호 그리고 자식을

위해 헌신적인 도움을 주시는 부모님께 머리 숙여 감사를 드립니다.

끝으로 이 책의 많은 부분에서 쉽게 표현하려고 했던 저자의 본래 의도와는 다르게 표현된

미흡한 점이 없지 않으나 프로그램 언어를 공부하려는 학생들에게 좋은 벗으로 기억되기를

희망합니다.

2013년 2월

안기수

Page 5: P R E F A C Eª…품C... · 2015-12-08 · 3주 3장 printf의 기본적인 사용법과 상수 13장 번호가 붙은 변수, 배열 4주 4장 데이터를 보관하는 장소인

P R E F A C E

5

이 책의 대상과 구성

이 책은 C 언어 문법과 프로그래밍 방법을 이해하기 쉽게 서술한 프로그램 입문서로서 컴

퓨터 비전공자나 전공자 모두를 대상으로 한다. 이 책에 포함된 예제 프로그램은 Visual

C++ 2010 Express를 기준으로 작성되었으나, Turbo C/C++의 경우와 실행 결과를 비교

할 수 있도록 함께 수록하여 컴파일러에 상관없이 예제 프로그램의 실습을 진행할 수 있다.

이 책은 다음과 같이 [프로그램 기초], [문법 이해와 적용], [프로그램 응용] 그리고 [분석 및

종합 평가]의 4단계로 진행할 수 있도록 구성되어 있으며, 총 11부(20장)로 구분하였다. 각

단계별 구성, 학습 내용과 진행은 다음과 같다.

구분 단계 학습 내용과 진행

프로그램

기초

1부 프로그램을 시작하기 전에2부 프로그램의 작성과 실행

프로그램

기초

컴퓨터와

프로그램

↓프로그램

환경 이해컴파일 실습

문법 이해와

적용

3부 데이터와 연산4부 제어문5부 함수6부 배열과 포인터7부 사용자가 정의하는 데이터 형8부 파일 출력과 파일 입력9부 고급 프로그래밍 기술

문법 학습 [기초 문법]

문법 이해[예제실습]

[실습문제]

↓문법 확인

응용력 향상

[단원정리]

[연습문제]

CD

프로그램

응용10부 응용 프로그래밍

프로그램

응용

[고급기술]

[심화학습]

분석 및

종합 평가11부 과제와 프로젝트 프로그램

과제선택[과제완성]

[프로젝트완성]

↓과제평가

예제 예제 프로그램, 실습문제 정답 Visual C++ source

Page 6: P R E F A C Eª…품C... · 2015-12-08 · 3주 3장 printf의 기본적인 사용법과 상수 13장 번호가 붙은 변수, 배열 4주 4장 데이터를 보관하는 장소인

P R E F A C E

6

이 책의 특징과 미리보기

이 책은 다음의 4단계로 진행하여 학습의 완성도를 높이고자 한다.

[단계 1]

프로그램

기초

➞ ➞ ➞

[단계 2]

문법 이해와

적용

[단계 3]

프로그램

응용

[단계 4]

분석 및

종합 평가

각 단계별로 특징을 요약하면 다음과 같다.

[프로그램 기초] 단계

•프로그램의 개요, 프로그램 작성에 요구되는 기초 지식(변수와 연산자, 출력) 설명

•맛보기 프로그램을 통해 프로그램을 작성하고, 컴파일과 실행 방법을 단계별로 진행

[문법 이해와 적용] 단계

• 프로그램 언어를 배울 초보자에게 문법의 개념은 쉽지 않으므로 각 단원 도입 부분에 실

생활과 연관지어 문법의 개념을 이해할 수 있도록 설명

• 각 장에는 예제와 더불어 실습문제를 추가하여 자기 주도적 학습으로 진행하도록 구성

• 빠른 실습 진행과 확고한 문법 이해를 위해 가능한 예제의 일관성 유지

• 각 장에 ‘참고’를 삽입하여 프로그래밍에 참고할 만한 추가적인 내용 제공

• 각 단원의 마지막에 제시된 ‘단원정리’를 통해 학습한 문법을 정리·확인

• 연습문제는 난이도 별로 다양한 형태로 제시하여 수준별 평가가 가능

Page 7: P R E F A C Eª…품C... · 2015-12-08 · 3주 3장 printf의 기본적인 사용법과 상수 13장 번호가 붙은 변수, 배열 4주 4장 데이터를 보관하는 장소인

P R E F A C E

7

[프로그램 응용] 단계

•[문법 이해와 적용] 단계에 대한 심화학습 부분

• 10부의 응용 프로그래밍은 진법 변환 외에 7개의 주제를 중심으로 각 주제에 대한 프로그

램을 어떻게 어떤 방법으로 확장시켜 나갈 수 있는지를 단계별로 설명하여, 자기 주도적

심화학습이 가능하도록 구성

[분석 및 종합 평가] 단계

• 다양한 내용으로 구성된 52개의 과제와 36개의 프로젝트 수록

• 비전공자나 전공자가 과제나 프로젝트를 수행하는데 있어서 쉽게 접근할 수 있도록 각 주

제별로 ‘설명’, ‘처리 방법과 기준’, ‘문제 분석’, ‘예제와 출력 형식’ 그리고 ‘주요 문법과 참

고 프로그램’으로 구분하여 정리

CD에는 10부 응용 프로그래밍, 11부 과제와 프로젝트 프로그램, 실습문제 정답이 PDF 파일

로 수록되어 있으며, 예제 source 프로그램은 텍스트 형식으로 제공한다.

Page 8: P R E F A C Eª…품C... · 2015-12-08 · 3주 3장 printf의 기본적인 사용법과 상수 13장 번호가 붙은 변수, 배열 4주 4장 데이터를 보관하는 장소인

P R E F A C E

8

학습 일정(이 책은 한 학기 주당 3~4시간을 기준으로 구성하였다.)

1. 한 학기 학습 일정

주별 학습 일정 강의 및 실습 내용

1주1장 컴퓨터와 프로그램2장 프로그램의 작성과 실행

프로그램에 대한 기초 지식과 컴파일 과정 설명

2주2장 프로그램의 작성과 실행3장 printf의 기본적인 사용법과 상수

컴파일 과정과 기초 프로그래밍 학습

3주3장 printf의 기본적인 사용법과 상수4장 데이터를 보관하는 장소인 변수와 데이터 형

기초 프로그래밍 학습, 데이터의 표현 방법, 데이터

형의 종류와 차이, 변수의 사용 방법

4주4장 데이터를 보관하는 장소인 변수와 데이터 형5장 데이터 입력과 scanf

변수를 이용한 데이터의 입력

5주5장 데이터 입력과 scanf6장 계산에 필요한 연산자와 연산식

데이터의 입력과 연산

6주6장 계산에 필요한 연산자와 연산식7장 조건에 대한 판단과 선택

연산과 프로그램의 흐름과 순서를 제어하는 제어문

의 역할과 기능

7주8장 반복문9장 처리의 흐름 조절

프로그램의 일부를 반복 처리하는 반복문의 활용

방법과 기능, 프로그램의 흐름과 순서를 제어하는

제어문의 역할과 기능

8주중간 평가(또는 10장 특별한 기능을 처리하도록 만들어진 프로그램 단위, 함수)

9주10장 특별한 기능을 처리하도록 만들어진 프로그

램 단위, 함수

11장 변수에 대한 또 다른 속성, 기억 클래스

함수의 역할과 필요성, 라이브러리 함수 맛보기, 사

용자 정의 함수의 사용 방법

10주12장 라이브러리 함수와 응용13장 번호가 붙은 변수, 배열

라이브러리 함수의 종류와 기능, 사용 방법, 연속된

기억 장소를 사용하는 배열의 개념과 정의

11주13장 번호가 붙은 변수, 배열14장 포인터

배열의 활용 방법, 메모리의 주소를 가리키는 포인

터의 개념과 필요성

12주 14장 포인터포인터의 사용법과 포인터를 사용하는 라이브러리

함수들

13주15장 여러 데이터를 하나로 묶는 구조체 16장 그 외의 사용자 정의 데이터 형

여러 데이터를 묶어서 처리할 수 있는 구조체와

enum, union, bit filed

14주 17장 파일을 이용한 데이터의 입력과 출력데이터를 파일에 저장하고, 저장된 파일을 불러오는

파일 입출력 방법

15주18장 응용 프로그램 개발을 위해 필요한 방법과 문

법들

19장 응용 프로그래밍

응용 프로그래밍 실습

(응용 주제는 19장에서 선택)

16주 기말 평가기말시험 및 과제(프로젝트)

(과제와 프로젝트는 20장에서 선택)

Page 9: P R E F A C Eª…품C... · 2015-12-08 · 3주 3장 printf의 기본적인 사용법과 상수 13장 번호가 붙은 변수, 배열 4주 4장 데이터를 보관하는 장소인

P R E F A C E

9

2. 두 학기 학습 일정

두 학기의 과정으로 진행할 경우에는 시간적 여유가 있으므로 강사만의 강의 진행을 탈피하

여 학생들이 자기 주도적 학습에 의해 프로그램을 완성해 나갈 수 있도록 10부와 11부의 응

용 프로그램들을 활용할 수 있다.

주별 1학기 학습 일정 2학기 학습 일정

1주1장 컴퓨터와 프로그램2장 프로그램의 작성과 실행

10장 특별한 기능을 처리하도록 만들어진 프로그램 단위, 함수

12장 라이브러리 함수와 응용

2주2장 프로그램의 작성과 실행3장 printf의 기본적인 사용법과 상수

응용 프로그래밍 1(함수)

3주 3장 printf의 기본적인 사용법과 상수 13장 번호가 붙은 변수, 배열

4주4장 데이터를 보관하는 장소인 변수와 데이터 형5장 데이터 입력과 scanf

14장 포인터

5주 5장 데이터 입력과 scanf 응용 프로그래밍 2(배열과 포인터)

6주 6장 계산에 필요한 연산자와 연산식15장 여러 데이터를 하나로 묶는 구조체 16장 그 외의 사용자 정의 데이터 형

7주 7장 조건에 대한 판단과 선택 응용 프로그래밍 3(구조체)

8주 중간 평가 중간 평가

9주 8장 반복문 17장 파일을 이용한 데이터의 입력과 출력

10주8장 반복문9장 처리의 흐름 조절

응용 프로그래밍 4(파일 입출력)

11주10장 특별한 기능을 처리하도록 만들어진 프로그

램 단위, 함수

18장 응용 프로그램 개발을 위해 필요한 방법과 문법들

12주10장 특별한 기능을 처리하도록 만들어진 프로그

램 단위, 함수

11장 변수에 대한 또 다른 속성, 기억 클래스19장 응용 프로그래밍

13주 12장 라이브러리 함수와 응용 19장 응용 프로그래밍

14주 13장 번호가 붙은 변수, 배열 20장 과제와 프로젝트

15주 19장 응용 프로그래밍 20장 과제와 프로젝트

16주 기말 평가 기말 평가

Page 10: P R E F A C Eª…품C... · 2015-12-08 · 3주 3장 printf의 기본적인 사용법과 상수 13장 번호가 붙은 변수, 배열 4주 4장 데이터를 보관하는 장소인

C O N T E N T S

10

차 례

PARTⅠ 프로그램을 시작하기 전에

01C H A P T E R 컴퓨터와 프로그램

1.1 프로그램이 필요한 이유는? 22

1.2 프로그램은 무엇으로 만드는가? 23

1.3 프로그램은 어떻게 시작되었나? 25

1.4 프로그램은 요리를 만들어가는 과정과 같다 26

1.5 컴퓨터는 프로그램을 이해하는가? 28

1.6 실행 가능한 프로그램이 만들어지기까지의 과정 29

1.7 프로그램은 어디에서 어떻게 작성하는가? 31

단원정리 33

연습문제 34

PARTⅡ 프로그램의 작성과 실행

02C H A P T E R 프로그램의 작성과 실행

2.1 Visual C++ 설치와 실행 38

2.2 처음으로 작성하는 프로그램과 실행 40

2.3 이미 작성된 프로그램의 수정 50

2.4 오류 메시지와 수정 54

단원정리 57

연습문제 59

03C H A P T E R printf의 기본적인 사용법과 상수

3.1 printf에서 상수 출력 65

3.2 printf에서 상수와 연산 결과의 출력 69

3.3 printf에서 문자형과 문자열 상수의 출력 72

단원정리 76

연습문제 79

Page 11: P R E F A C Eª…품C... · 2015-12-08 · 3주 3장 printf의 기본적인 사용법과 상수 13장 번호가 붙은 변수, 배열 4주 4장 데이터를 보관하는 장소인

C O N T E N T S

11

PARTⅢ 데이터와 연산

04C H A P T E R 데이터를 보관하는 장소인 변수와 데이터 형

4.1 변수와 상수 86

4.2 인질을 담보로 하여 돈과 교환? 88

4.3 변수의 데이터 형 91

4.4 데이터 형의 사용 범위 99

4.5 모든 데이터 형 101

단원정리 102

연습문제 104

05C H A P T E R 데이터 입력과 scanf

5.1 scanf의 기본적인 사용법과 변수의 데이터 형 110

5.2 여러 데이터를 한 줄에 입력하는 방법 119

5.3 형식 지정자의 종류 122

단원정리 124

연습문제 126

06C H A P T E R 계산에 필요한 연산자와 연산식

6.1 산술 연산자(+, -, *, /, %) 132

6.2 증가, 감소 연산자(++, --) 135

6.3 대입 연산자(=, +=, *=, …) 137

6.4 수식을 연산식으로 표현하는 방법 139

6.5 연산 순서 140

6.6 그 밖의 연산자 147

단원정리 156

연습문제 158

PARTⅣ 제어문

07C H A P T E R 조건에 대한 판단과 선택

7.1 조건에 대해 참인 경우만 처리, if 문 165

7.2 조건에 대해 참 또는 거짓을 구분하여 선택, if else문 168

Page 12: P R E F A C Eª…품C... · 2015-12-08 · 3주 3장 printf의 기본적인 사용법과 상수 13장 번호가 붙은 변수, 배열 4주 4장 데이터를 보관하는 장소인

C O N T E N T S

12

7.3 2개 이상의 조건에 대해 참 또는 거짓을 구분하여 선택, if ~ else if 문 170

7.4 특정한 사례를 선택, switch case문 173

7.5 논리 연산자를 이용하여 여러 개의 조건을 판단 176

7.6 범위(구간)로 표시되는 조건의 판단 178

7.7 switch case 문의 응용 180

단원정리 182

연습문제 183

08C H A P T E R 반복문

8.1 횟수가 정해지는 반복, for 문 191

8.2 횟수가 정해지지 않은 반복, while 문 198

8.3 for 문의 응용 202

8.4 중첩된 반복문 207

8.5 for 문의 축소와 확장 215

단원정리 219

연습문제 221

09C H A P T E R 처리의 흐름 조절

9.1 처리 순서의 흐름을 중단하는 break 문 231

9.2 처리 순서의 흐름을 계속 이어주는 continue 문 232

9.3 처리 순서를 이동시키는 goto 문 233

단원정리 235

연습문제 236

PARTⅤ 함수

10C H A P T E R 특별한 기능을 처리하도록 만들어진 프로그램 단위, 함수

10.1 함수를 사용하는 이유 243

10.2 함수의 호출과 결과의 반환 244

10.3 라이브러리 함수 맛보기 245

10.4 사용자가 정의하는 함수 251

10.5 메인 함수, void main 254

10.6 자기 자신을 호출하는 재귀 함수 257

단원정리 266

연습문제 268

Page 13: P R E F A C Eª…품C... · 2015-12-08 · 3주 3장 printf의 기본적인 사용법과 상수 13장 번호가 붙은 변수, 배열 4주 4장 데이터를 보관하는 장소인

C O N T E N T S

13

11C H A P T E R 변수에 대한 또 다른 속성, 기억 클래스

11.1 지역(local) 변수와 전역(global) 변수 277

11.2 자동(auto) 변수 279

11.3 정적(static) 변수 280

11.4 외부(extern) 변수 284

11.5 레지스터(register) 변수 285

단원정리 287

연습문제 289

12C H A P T E R 라이브러리 함수와 응용

12.1 문자와 문자열 관련 함수 294

12.2 수학 계산 함수 297

12.3 화면과 커서의 제어 305

단원정리 310

연습문제 312

PARTTⅥ 배열과 포인터

13C H A P T E R 번호가 붙은 변수, 배열

13.1 여러 개의 변수가 필요한 경우 321

13.2 배열과 변수의 차이 321

13.3 1차원 배열의 선언과 사용 322

13.4 scanf를 이용한 배열 요소의 입력 325

13.5 배열과 문자열 326

13.6 2차원 배열의 초기화와 출력 330

13.7 함수와 배열 334

단원정리 338

연습문제 341

14C H A P T E R 포인터

14.1 데이터와 메모리 주소 352

14.2 메모리 주소를 저장하는 포인터 변수 355

14.3 포인터와 배열 360

14.4 포인터에 대한 연산 361

14.5 포인터와 문자열 366

Page 14: P R E F A C Eª…품C... · 2015-12-08 · 3주 3장 printf의 기본적인 사용법과 상수 13장 번호가 붙은 변수, 배열 4주 4장 데이터를 보관하는 장소인

C O N T E N T S

14

14.6 함수와 포인터 370

14.7 문자열 처리와 관련된 라이브러리 함수 377

14.8 키워드 const 384

단원정리 386

연습문제 388

PARTⅦ 사용자가 정의하는 데이터 형

15C H A P T E R 여러 데이터를 하나로 묶는 구조체

15.1 구조체가 필요한 경우 401

15.2 구조체 만들기 402

15.3 구조체와 데이터 404

15.4 구조체 변수, 구조체 멤버 간의 데이터 저장 409

15.5 구조체 배열 410

15.6 구조체 포인터 412

15.7 구조체 멤버가 배열 또는 포인터인 경우의 데이터 처리 413

15.8 구조체 형의 크기와 멤버의 위치 414

15.9 구조체와 함수 417

15.10 구조체를 헤더 파일로 저장하여 사용하는 방법 421

15.11 구조체 속의 구조체(중첩된 구조체) 422

15.12 자기 참조 구조체 427

단원정리 432

연습문제 433

16C H A P T E R 그 외의 사용자 정의 데이터 형

16.1 구조체와 비슷하지만 차이가 있는 공용체, union 440

16.2 상수들의 집합을 정수로 대신하는 열거형, enum 443

16.3 비트 필드(bit field) 445

단원정리 447

연습문제 448

Page 15: P R E F A C Eª…품C... · 2015-12-08 · 3주 3장 printf의 기본적인 사용법과 상수 13장 번호가 붙은 변수, 배열 4주 4장 데이터를 보관하는 장소인

C O N T E N T S

15

PARTTⅧ 파일 출력과 파일 입력

17C H A P T E R 파일을 이용한 데이터의 입력과 출력

17.1 파일 처리를 위한 기초 지식 458

17.2 텍스트 방식의 파일 다루기 462

17.3 이진 방식의 파일 다루기 479

17.4 원하는 블록의 위치에서 파일 읽기와 쓰기가 가능한 랜덤 처리 방식 486

단원정리 501

연습문제 503

PARTⅨ 고급 프로그래밍 기술

18C H A P T E R 응용 프로그램 개발을 위해 필요한 방법과 문법들

18.1 프로젝트와 분할 컴파일 513

18.2 프로그램 실행 중에 기억 공간을 확보하는 동적 할당 516

18.3 전처리기 519

18.4 배포 프로그램 530

단원정리 534

연습문제 535

부록 540

찾아보기 546

Page 16: P R E F A C Eª…품C... · 2015-12-08 · 3주 3장 printf의 기본적인 사용법과 상수 13장 번호가 붙은 변수, 배열 4주 4장 데이터를 보관하는 장소인

C O N T E N T S

16

PARTⅩ 응용 프로그래밍

19C H A P T E R 응용 프로그래밍

19.1 진법 변환

19.2 비트 연산과 응용

19.3 난수를 이용한 게임

19.4 시간과 날짜

19.5 기초 통계 계산

19.6 메뉴 선택으로 진행하는 프로그램

19.7 자료 구조

19.8 데이터 검색(Search)

19.9 데이터 정렬(sort)

연습문제

PARTⅩⅠ과제와 프로젝트 프로그램

20C H A P T E R 과제와 프로젝트

20.1 과제 프로그램

[과제 1] 등차수열

[과제 2] 등비수열

[과제 3] 계차수열

[과제 4] 최대공약수와 최소공배수

[과제 5] 소수 이하 임의의 자릿수에서 반올림

[과제 6] 행렬의 합, 차 그리고 곱의 계산

[과제 7] 파스칼의 삼각형

[과제 8] 비만도의 측정과 판정

[과제 9] 고속도로 통행요금 계산

[과제 10] 당구장 이용 요금 계산

[과제 11] 사원 봉급 계산

[과제 12] 승용차 세금 계산

[과제 13] 전력 요금 청구서

CD 수록

CD 수록

Page 17: P R E F A C Eª…품C... · 2015-12-08 · 3주 3장 printf의 기본적인 사용법과 상수 13장 번호가 붙은 변수, 배열 4주 4장 데이터를 보관하는 장소인

C O N T E N T S

17

[과제 14] 수도 요금 청구서

[과제 15] 도량형 환산

[과제 16] 삼각형 변의 길이 계산

[과제 17] sine과 cosine 그래프를 동시에 출력

[과제 18] 한자리 디지털 숫자 출력

[과제 19] 주유기 메타 출력

[과제 20] 끝말 이어가기

[과제 21] 영문 문자열 처리 함수

[과제 22] 한글 문자열 처리 함수

[과제 23] 사칙연산 계산기

[과제 24] 정수형 숫자의 카운트

[과제 25] 실수형 숫자의 카운트

[과제 26] 문장에 사용된 알파벳, 숫자, 기타 문자의 카운트

[과제 27] 서기를 간지로 변환

[과제 28] 특정일로부터 며칠 후 계산

[과제 29] 특정일의 요일 계산

[과제 30] 주민등록번호를 이용한 생년월일, 성별, 띠 그리고 만 나이 계산

[과제 31] 현재 시간과 경과 시간 출력

[과제 32] 세계 주요 도시의 현재 시간

[과제 33] stopwatch

[과제 34] 제비뽑기 번호 출력

[과제 35] 두 사람씩 서로의 숫자 카드를 교환

[과제 36] 트럼프 카드에서 임의로 10개 선택

[과제 37] 기억력 테스트

[과제 38] 숫자 야구게임

[과제 39] 사용자가 생각한 숫자를 컴퓨터가 맞추는 게임

[과제 40] 동전 던지기 모의실험

[과제 41] 주사위 던지기 모의실험과 막대그래프 출력

[과제 42] 주택복권 당첨 번호 발생기

[과제 43] 발 크기에 대한 통계 조사

[과제 44] 순위 계산

[과제 45] 영화의 eding credit을 출력

[과제 46] 파일에 포함된 알파벳 문자 카운트

[과제 47] 파일 크기의 계산과 파일 내용을 거꾸로 출력

[과제 48] 소스 프로그램에 line 번호를 붙여 텍스트 파일로 출력

[과제 49] 신호등 제어

Page 18: P R E F A C Eª…품C... · 2015-12-08 · 3주 3장 printf의 기본적인 사용법과 상수 13장 번호가 붙은 변수, 배열 4주 4장 데이터를 보관하는 장소인

C O N T E N T S

18

[과제 50] 택시미터기 제어

[과제 51] 자동판매기 제어

[과제 52] 이용자가 1명인 엘리베이터 운행 제어

20.2 프로젝트 프로그램

[프로젝트 1] 임의의 정수형 숫자에 대한 디지털 숫자 출력

[프로젝트 2] 임의의 아라비아 숫자를 로마 숫자로 변환

[프로젝트 3] 2, 8, 10, 16 진법 변환

[프로젝트 4] 스택을 이용한 후위 표기법

[프로젝트 5] 스택을 이용한 계산기

[프로젝트 6] 로또 추첨과 같은 방식의 로또번호 생성

[프로젝트 7] 로또 당첨번호에 대한 모의실험

[프로젝트 8] 구구단 학습 프로그램

[프로젝트 9] 정규난수 생성

[프로젝트 10] 대기 행렬 모형

[프로젝트 11] 보간(interploation) 검색

[프로젝트 12] heap 정렬

[프로젝트 13] shell 정렬 후 파일 출력

[프로젝트 14] quick 정렬 후 파일 출력

[프로젝트 15] 극장 좌석 관리 프로그램

[프로젝트 16] 패스트푸드 전문점의 메뉴선택 및 금전등록기 처리 프로그램

[프로젝트 17] 텍스트 파일에 대한 정렬

[프로젝트 18] 이진 파일에 대한 정렬

[프로젝트 19] 랜덤 접근에 의한 파일 데이터의 추가와 변경

[프로젝트 20] 학생 성적 파일 관리

[프로젝트 21] CD판매점의 판매 및 재고관리 프로그램

[프로젝트 22] 시간표 작성 및 파일 출력

[프로젝트 23] 도서관의 도서관리 프로그램

[프로젝트 24] 일정 관리 프로그램

[프로젝트 25] 고객 파일 관리

[프로젝트 26] 텍스트 파일에 저장된 데이터에 대한 단순 회귀분석

[프로젝트 27] 텍스트 파일에 저장된 데이터에 대한 상관 관계

[프로젝트 28] 영어 문장이 포함된 파일에 대해 단어별 목차(index) 파일 만들기

[프로젝트 29] 특정한 월의 바이오리듬(Biorhythm)

[프로젝트 30] 하노이 탑

[프로젝트 31] 수치 적분

Page 19: P R E F A C Eª…품C... · 2015-12-08 · 3주 3장 printf의 기본적인 사용법과 상수 13장 번호가 붙은 변수, 배열 4주 4장 데이터를 보관하는 장소인

C O N T E N T S

19

[프로젝트 32] 연립방정식의 해법

[프로젝트 33] 경마 게임

[프로젝트 34] 컴퓨터 초보자를 위한 자판(keyboard) 연습 프로그램

[프로젝트 35] library 함수들을 이용한 수학 계산 프로그램

[프로젝트 36] 이용자가 2명인 엘리베이터의 운행 제어

Page 20: P R E F A C Eª…품C... · 2015-12-08 · 3주 3장 printf의 기본적인 사용법과 상수 13장 번호가 붙은 변수, 배열 4주 4장 데이터를 보관하는 장소인
Page 21: P R E F A C Eª…품C... · 2015-12-08 · 3주 3장 printf의 기본적인 사용법과 상수 13장 번호가 붙은 변수, 배열 4주 4장 데이터를 보관하는 장소인

찾아보기INDEX

546

ㄱ각도 302

간접 연산자 412

감소 연산자 136

값에 의한 호출 254, 335

계승 260

공용체 441

관계 연산자 147

구조체 400

구조체 멤버 403

구조체 배열 410

구조체 변수 404

구조체 태그 403

구조체 포인터 412

구조체 형 402

구조체 형 FILE 465

기억 클래스 276

ㄴ난수 249

논리 연산자 149

ㄷ단순 연결 리스트 591

대입 연산자 137

데이터의 표현 100

데이터 형 101

도트 연산자 412

동적 할당 375, 414, 516

디버그 모드 531

디버깅 30

ㄹ라디안 302

라이브러리 함수 245

랜덤 접근 486

레지스터 변수 285

릴리즈 모드 531

ㅁ매크로 상수 522

매크로 함수 524

메모리의 기억 영역 283

메인 메뉴 589

문자열 326

문자열 상수 73

문자형 배열 327

문자형 상수 72

미리 정의된 매크로 526

ㅂ배열 320

배열 요소 322

배열 첨자 322

변수 86

보수 143

복합 대입 연산자 137

복합문 197

분할 컴파일 512

비트 연산자 150

비트 필드 445

ㅅ사용자 정의 함수 252

찾아보기

Page 22: P R E F A C Eª…품C... · 2015-12-08 · 3주 3장 printf의 기본적인 사용법과 상수 13장 번호가 붙은 변수, 배열 4주 4장 데이터를 보관하는 장소인

찾아보기 INDEX

547

산술 연산자 133

산술 연산자의 우선순위 141

삼각 함수 302

삽입 정렬 613

상수 65

선행처리기 519

솔루션 빌드 41, 47

스트림 460

시프트 연산자 151

실수형 상수 67, 91

실행 오류 30

ㅇ아스키 97

연결 리스트 428

연산자 우선순위 154

열거형 443

예약어 54

외부 정적 변수 282

원시 프로그램 41

이중 연결 리스트 599

이진 검색 605

이진 트리 599

인수 254

인자 254

임의 접근 486

입력 함수 110

입력 형식 지정자 123

ㅈ자기 참조 구조체 428

자동 변수 279

재귀적 호출 544

재귀 호출 257

전역 변수 277

정렬 612

정수형 상수 66

정적 변수 280

제어문 164

제어변수 192

조건 연산자 148

조건 컴파일 527

주소에 의한 전달 418

주소에 의한 호출 371

중첩된 구조체 422

중첩된 반복문 207

증가 연산자 136

지역 변수 277

ㅊ참조에 의한 호출 370

출력 형식 지정자 123

ㅋ캐스트 연산자 153

컴파일러 28

콤마 연산자 152

키워드 54

ㅌ텍스트 방식 460

트리 428, 599

트리의 운행 600

ㅍ파일 458

파일 포인터 462

포인터 352

포인터 배열 368

포인터 변수 355

포인터 상수 360

프로젝트 41

피보나치 검색 609

Page 23: P R E F A C Eª…품C... · 2015-12-08 · 3주 3장 printf의 기본적인 사용법과 상수 13장 번호가 붙은 변수, 배열 4주 4장 데이터를 보관하는 장소인

찾아보기INDEX

548

ㅎ함수 242

함수 원형 246, 252

함수 정의 252

함수 포인터 373

함수 호출 244

헤더 파일 245

헤더 파일 <ctype.h> 295

헤더 파일 <math.h> 246

헤더 파일 <stdlib.h> 296

헤더 파일 <string.h> 379

헤더 파일 <time.h> 562

형 변환 134, 152

형식 지정자 122

호도 302

AAND 연산 176

ANSI 256

ASCII 97

atof 296

atoi 296

atol 296

auto 279

Bbreak 173

break 문 231

bubble 정렬 574

Cceil 298

char 96

CLK_TCK 566

clock 565

const 375, 384

continue 문 232

cos 302

Ddefault 173

difftime 566

double 94

do while 문 201

Eenum 443

EOF 470

exit 463

exp 299

extern 284

Ffclose 465

feof 471

fflush 477

fgetc 469

fgets 473

floor 298

fmod 301

fopen 463

for 문 192

fprintf 474

fputc 467

fputs 472

fread 484

free 516

frexp 299

fscanf 476

fseek 487

ftell 487

fwrite 481

Page 24: P R E F A C Eª…품C... · 2015-12-08 · 3주 3장 printf의 기본적인 사용법과 상수 13장 번호가 붙은 변수, 배열 4주 4장 데이터를 보관하는 장소인

찾아보기 INDEX

549

Ggetc 469, 471

getch 306

getchar 468

gets 329

gotoxy 308

goto 문 233

Iif else 문 168

if 문 166

int 93

isalpha 294

islower 295

isupper 295

itoa 377

Kkbhit 567

Lldexp 299

localtime 563

log 299

log10 299

ltoa 377

Mmain 함수 254

malloc 375, 377, 430, 516, 594

modf 301

NNULL(\0) 327

Ppause 532

pow 299

putc 467

puts 330

Rrand 249, 554

return 문 253

rewind 488, 493

Sscanf 110

sin 302

sizeof 414, 572

sizeof 연산자 154

Sleep 566

sqrt 299

srand 250

static 280

strcat 380

strcmp 381, 491

strcpy 375, 382

strlen 382

strncmp 381

strncpy 382

strtod 379

strtol 379

strtoul 379

switch case 585

switch case 문 173, 180

system 532

Ttan 302

time 250, 563

toascii 295

tolower 295

toupper 295

Page 25: P R E F A C Eª…품C... · 2015-12-08 · 3주 3장 printf의 기본적인 사용법과 상수 13장 번호가 붙은 변수, 배열 4주 4장 데이터를 보관하는 장소인

찾아보기INDEX

550

Uunsigned 101

Vvoid 255

Wwhile 문 199

-- 136

/ 133

& 354

&& 177

% 133

++ 136

<< 151

>> 151

|| 178

%c 72

%d 66

#define 384, 522

#elif 528

#else 528

#endif 528, 529

%f 67

#if 528

#ifdef 529

#ifndef 529

#include 421, 520

#include 문 245

%lf 116

\n 52

%o 111

%p 354

%s 73

%u 354

%x 111

1차원 배열 324

2차원 배열 330

Page 26: P R E F A C Eª…품C... · 2015-12-08 · 3주 3장 printf의 기본적인 사용법과 상수 13장 번호가 붙은 변수, 배열 4주 4장 데이터를 보관하는 장소인
Page 27: P R E F A C Eª…품C... · 2015-12-08 · 3주 3장 printf의 기본적인 사용법과 상수 13장 번호가 붙은 변수, 배열 4주 4장 데이터를 보관하는 장소인

■안기수([email protected])

성균관대학교 통계학과 졸업

성균관대학교 대학원 통계학과 전산통계학 전공(석사, 박사)

현 동남보건대학 세무회계학과 교수

저서

단계별로 설명한 C 프로그래밍(2000, 생능출판사)

응용 프로그램 개발을 위한 명품 C 언어 프로젝트(2010, 생능출판사)

저 자 약 력

저자와의 협의에 의해인지를 생략합니다.

명품 C 언어 프로그래밍

안기수 지음

초 판 발 행 : 2007. 9. 1

개 정 판 : 2013. 2. 28

발 행 인 : 김 승 기

발 행 처 : 생능출판사

신 고 번 호 : 제406-2005-000002호

신 고 일 자 : 2005. 1. 21

I S B N : 978-89-7050-771-2 (93000)

4⃞1⃞3⃞-7⃞5⃞6⃞

경기도 파주시 문발동 507-12 파주출판도시

대표전화 : (031)955-0761, FAX : (031)955-0768

홈페이지 : http://www.booksr.co.kr

* 파본 및 잘못된 책은 바꾸어 드립니다. 정가 27,000원* 이 책을 불법 복사할 경우 저작권법에 의해

5년 이하의 징역이나 5,000만 원 이하의 벌금에 처해질 수 있습니다.

<개정판>