1. 토/일, 공휴일을 제외한 영업일 기준으로 배송이 진행됩니다.
2. 단순변심으로 인한 구매취소 및 환불에 대한 배송비는 구매자 부담입니다.
3. 제주 산간지역에는 추가배송비용이 부과됩니다.
4.우체국에서 발송해야하는 군부대및 사서함지역은 이용불가합니다. 이용시 우체국 실요금이 추가 발생될 수 있습니다.
※ 해당 상품은 교보문고에서 제공하는 정보를 활용하여 안내하는 상품으로제품 상태를 반드시 확인하신 후 구입하여주시기 바랍니다.
판매자 배송 정책
1. 토/일, 공휴일을 제외한 영업일 기준으로 배송이 진행됩니다.
2. 단순변심으로 인한 구매취소 및 환불에 대한 배송비는 구매자 부담입니다.
3. 제주 산간지역에는 추가배송비용이 부과됩니다.
4.우체국에서 발송해야하는 군부대및 사서함지역은 이용불가합니다. 이용시 우체국 실요금이 추가 발생될 수 있습니다.
프로그래밍의 기초 골격을 탄탄하게 해주는 다시 배우는 C 언어!
기존의 ‘프로그래밍’ 책들은 프로그래밍에 대한 기초 내용만, ‘C 언어’ 책들은 C 언어 문법 위주의 내용만 다루고 있어서 그 둘을 연관 짓기 어려워하는 독자가 많았습니다. 이 책은 그 둘을 함께 다루어 C 언어를 배우면서 프로그래밍의 기본기를 탄탄히 다지도록 집필되었습니다.
저자소개
저자 : 허경용 저자 허경용은 연세대학교 전자공학과 학사와 동(同)대학원 석사를 취득하였다. 이후 플로리다대학교(University of Florida)에서 컴퓨터공학 박사를 취득하였으며, 현재 동의대학교 전자공학과 교수로 재직 중이다. 저서로는 《ATmega128로 배우는 마이크로컨트롤러 프로그래밍》(2016), 《따라 하면서 배우는 아두이노》(2016), 《사물인터넷을 품은 아두이노》(2016), 《아트멜 스튜디오와 아두이노로 배우는 ATmega328 프로그래밍》(2015), 《핵심 예제로 배우는 아두이노 프로그래밍》(2015), 《아두이노 상상을 스케치하다》(2014) 등이 있다.
목차
PART I 프로그램, 프로그래밍 1 CHAPTER 1 프로그램이란 무엇일까? 5 1.1 시스템이란 무엇일까? 5 1.2 블랙박스 시스템과 화이트박스 시스템 7 1.3 하드웨어 및 소프트웨어로 만들어지는 프로그램 9 1.4 아날로그와 디지털의 차이는 무엇일까? 11 1.5 아날로그 신호를 디지털 신호로 변환하기 14 1.6 프로그램으로서 역할 22
CHAPTER 2 프로그램의 핵심: 알고리즘 26 2.1 프로그램 = 알고리즘 + 프로그래밍 언어 26 2.2 흐름도: 알고리즘을 표현하기 위한 도구 37 2.3 알고리즘의 종류 43 2.4 모로 가도 서울만 가면 된다? 48 2.5 좋은 알고리즘, 나쁜 알고리즘 50
CHAPTER 3 프로그램의 구현 도구: 프로그래밍 언어 55 3.1 프로그래밍 언어는 외계어가 아니다 55 3.2 기계어: 컴퓨터가 이해하는 유일한 언어 56 3.3 컴파일러와 인터프리터 64 3.4 컴퓨터를 위한 수학 69 3.5 진법 71 3.6 비트, 바이트, 워드 74
CHAPTER 4 명령어와 데이터의 표현 78 4.1 문자는 어떻게 표현될까? 79 4.2 숫자는 어떻게 표현될까? 85 4.3 명령어는 어떻게 표현되고 처리될까? 94
CHAPTER 5 알고리즘은 어떻게 만들어질까? 99 5.1 알고리즘은 어떻게 작성해야 할까? 99 5.2 C, 함수 중심의 언어 103 5.3 C ? C++ ? 108 5.4 프로그래밍은 어떻게 공부해야 할까? 111
PART II C 언어 113 CHAPTER 6 함수의 구조 117 6.1 함수의 구조 117 6.2 주석 126 6.3 정리 127
CHAPTER 7 데이터 유형 129 7.1 데이터 유형: 메모리 크기 결정과 값 해석의 기준 129 7.2 변수 값 읽기와 쓰기 133 7.3 문자 데이터 137 7.4 printf: 데이터 출력을 위한 함수 143 7.5 변수의 유효 범위 147 7.6 정리 150
CHAPTER 8 연산자 152 8.1 연산자: 데이터를 가공하는 방법 152 8.2 연산자와 함수 153 8.3 연산자 우선순위와 결합 순서 155 8.4 피연산자 개수 158 8.5 산술 연산자 163 8.6 비교 연산자 165 8.7 논리 연산자 166 8.8 비트 연산자 170 8.9 형 변환 172 8.10 정리 176
CHAPTER 9 조건문 178 9.1 알고리즘의 종류 178 9.2 if-else문 179 9.3 조건 연산자: 작은 if-else문 184 9.4 switch-case문 186 9.5 정리 191
CHAPTER 12 포인터 230 12.1 포인터란 무엇인가? 230 12.2 포인터 변수 232 12.3 배열과 포인터 236 12.4 함수에서 포인터의 전달 238 12.5 2차원 포인터 244 12.6 동적 할당 249 12.7 정리 256
CHAPTER 13 함수 257 13.1 함수 257 13.2 함수의 선언, 정의, 호출 262 13.3 함수의 입력과 출력 263 13.4 정리 265
PART III 카르노맵 267 CHAPTER 14 논리식의 간략화 271 CHAPTER 15 카르노맵 입출력 277 CHAPTER 16 1, 2셀 그룹 찾기 285 CHAPTER 17 4, 8, 16셀 그룹 찾기 294 CHAPTER 18 간략화된 그룹 집합 선택 305 CHAPTER 19 카르노맵 알고리즘의 개선 315
찾아보기 320
책 속으로
C 언어가 가장 널리 사용되는 프로그래밍 언어 중 하나인 것은 사실이지만, 프로그래밍 언어는 컴퓨터가 이해할 수 있는 적은 수의 단어들을 몇 개의 규칙으로 조합하여 문장으로 나타낼 수 있을 뿐입니다. 가장 대표적인 예로는 “Hello, World!”를...
C 언어가 가장 널리 사용되는 프로그래밍 언어 중 하나인 것은 사실이지만, 프로그래밍 언어는 컴퓨터가 이해할 수 있는 적은 수의 단어들을 몇 개의 규칙으로 조합하여 문장으로 나타낼 수 있을 뿐입니다. 가장 대표적인 예로는 “Hello, World!”를 출력하는 것을 들 수 있습니다. 프로그래밍 언어를 배우려는 목적은 “Hello, World!”를 출력하는 데 있지 않습니다. C 언어는 도구일 뿐입니다. C 언어를 배우는 목적은 인공위성을 움직이거나 프로 바둑 기사와의 대국에서 승리하기 위해서이지, C 언어 자체를 배우는 것이어서는 안 됩니다. 프로그램을 작성하는 것을 단순한 코딩이 아닌 그 이상의 것으로 생각하는 것에서부터 시작한다면, C 언어가 좀 더 흥미로울 수 있을 것입니다. _3쪽
프로그램은 알고리즘과 프로그래밍 언어로 이루어져 있습니다. 무엇을 먼저 배워야 할까요? 이상적인 학습 방법은 하향식으로 배우는 것입니다. 여기서 하향식이란, 큰 문제를 여러 개의 작은 문제로 나눈 후 작은 문제들을 해결함으로써 결국 큰 문제를 해결하는 방식을 말합니다. 프로그램을 작성하는 과정에서는 문장들을 조합하여 주어진 문제를 해결할 수 있는 알고리즘 작성 방법을 먼저 배우고, 개별 문장을 프로그래밍 언어를 사용하여 나타내는 방법을 나중에 배우는 것이 하향식에 해당합니다. 하지만 프로그래밍 언어를 처음 배우는 사람은 알고리즘을 전혀 알지 못합니다. 알고리즘을 먼저 배우면 될 것이라 생각할 수 있지만, 알고리즘은 컴퓨터가 이해하는 단어와 문장으로 나타내야만 합니다. _27쪽
알고리즘을 작성할 때 또 한 가지 주의해야 할 점은 좋은 알고리즘은 프로그래밍 언어와 무관하지 않다는 것입니다. 알고리즘은 문제를 푸는 과정을 기술한 것으로, 프로그래밍 언어와 무관하다고 여러 번 이야기했습니다. 하지만 알고리즘은 결국 프로그래밍 언어로 구현해야 합니다. 프로그래밍 언어에서 문제를 푸는 과정에 이용할 수 있는 편리한 기능을 제공한다면, 이를 이용하지 않을 이유가 없습니다. 예를 들어 사인 30°를 계산한다고 가정해 보겠습니다. 사인 값을 계산하는 데에는 여러 가지 방법이 있습니다. 그중 어떤 알고리즘을 사용해야 할지 고민이 되겠지만, 답은 간단합니다. C 언어에는 각도만 입력하면 해당 각도의 사인 값을 알려 주는 함수를 제공합니다. 사인 값을 계산하는 방법 자체를 궁금해하는 사람은 많지 않을 것이고, 대부분의 사람들은 사인 값을 계산하여 삼각형의 높이를 구하는 등 문제를 푸는 데 관심이 있습니다. 알고리즘은 프로그래밍 언어와 무관합니다. 하지만 좋은 프로그램을 만들기 위해서는 프로그래밍 언어가 기본적으로 제공해 주는 기능들을 알고, 이를 충분히 활용할 수 있어야 합니다. _53쪽
소스 파일을 컴파일하면 기계어 파일인 목적 파일(object file)이 만들어집니다. 만들어진 목적 파일에 자주 사용되는 함수의 집합인 라이브러리를 연결하면 독립적으로 실행할 수 있는 실행파일이 만들어집니다. 이처럼 컴파일 과정은 몇 개의 단계로 이루어지지만, 실제 프로그래밍 과정에서는 한 번의 클릭만으로도 실행 파일이 만들어집니다. 프로그래밍에서 일반적으로 컴파일러라는 이름으로 불리는 프로그램은 실제로는 통합 개발 환경(IDE, Integrated Development Environment)이라는 프로그램입니다. IDE에는 기본적으로 컴파일러와 링커가 포함되어 있습니다. 이 밖에도 코드를 입력하고 편집할 수 있는 편집기, 프로그램에 숨은 벌레를 찾아내는 일을 도와주는 디버거, 소스 코드를 프로젝트 단위로 관리하는 일을 도와주는 프로젝트 매니저 등을 직관적인 사용자 인터페이스(User Interface, UI)를 통해 제공하고 있으므로 프로그래머는 IDE의 뒷면에서 일어나는 일에 신경 쓰지 않고 알고리즘을 구현하는 데 집중할 수 있습니다. _69쪽
컴퓨터에서는 명령어와 데이터를 구별하기 위해 쉽고도 간단한 방법을 사용합니다. 명령어와 데이터는 메모리 내에서 저장되는 위치가 다릅니다. 즉, 명령어와 데이터는 표현 방법에서 차이가 나는 것이 아니라 메모리에 저장되는 위치에 의해 의미가 결정되며, 메모리에 저장되는 위치를 ‘세그먼트(segment)’라고 합니다. 명령어가 위치하는 곳은 코드 세그먼트(code segment), 데이터가 위치하는 곳은 데이터 세그먼트(data segment)라고 합니다. 컴퓨터는 코드 세그먼트에 있는 명령어들을 하나씩 CPU로 옮겨 실행하고, 필요한 경우 데이터 세그먼트에서 데이터를 가져와 사용합니다. 데이터 세그먼트에 저장되는 데이터는 프로그램이 종료될 때까지 메모리에 저장되는 반면, C 언어에서 변수 값은 잠깐 동안만 사용되다가 더 이상 사용되지 않는 경우에 자동으로 사라지며, 이러한 값들은 스택 세그먼트(stack segment)라는 또 다른 메모리 영역에 저장됩니다. _94쪽
기존의 ‘프로그래밍’ 책들은 프로그래밍에 대한 기초 내용만, ‘C 언어’ 책들은 C 언어 문법 위주의 내용만 다루고 있어서 그 둘을 연관 짓기 어려워하는 독자가 많았습니다. 이 책은 그 둘을 함께 다루어 C 언어를 배우면서 프로그래밍의 기본기를 탄탄히 다지도록 집필되었습니다.
이 책은 크게 세 부분으로 구성되어 있는데, 1부는 프로그램이 필요한 이유와 프로그램이 어떤 과정으로 만들어지는지를 다룹니다. 2부에서는 C 언어에 관해 설명합니다. 다른 C 언어 책들과 비슷하게 보일 수도 있지만, 1부에서 설명한 내용과 연관 지어 C 언어를 사용하여 컴퓨터에서 동작하는 프로그램을 만드는 내용을 다룹니다. 마지막 3부에서는 1부와 2부에서 설명한 방법과 도구를 사용하여 실제 주어진 문제를 풀어나가는 과정을 보여줍니다.
이 책의 대상 독자 ● 프로그래밍에 대한 개념을 재정립하고 싶은 분 ● 프로그래밍을 배우다가 한번쯤 포기했던 분 ● C 언어를 다시 배우려는 분 ● C 언어의 기본 문법은 알지만 프로그래밍이 어려운 분