Comming Soon

프포자를 위한 C 프로그래밍

  • 지은이남기덕
  • ISBN : 9791161757391
  • 48,000원
  • 2025년 12월 10일 펴냄
  • 페이퍼백 | 900쪽 | 188*250mm
  • 시리즈 : 프로그래밍 언어

책 소개

요약

기존 프로그래밍 교육은 완성된 예제 코드를 무작정 따라하게 하면서 단편적 지식만 전달하는 방식이며, 학습 난이도와 무관하게 항목별로 목차를 단순히 ‘나열’했기 때문에 프로그래밍 전체 흐름을 이해하기 전에 중반에 배치된 배열, 포인터 변수 등 어려운 이론이 등장할 때마다 난관에 직면하게 되는 구조적 결함이 있었다. 따라서 코드를 조금만 변경해도 이해하지 못하고, 빌드도 제대로 못하고, 새로운 기능을 구현하기 위한 코드를 직접 구현하는 능력을 기르기 전에 결국 프로그래밍을 포기하는 수많은 ‘프포자(프로그래밍을 포기한 자)’를 만들어냈다.
핵심 코드 한줄부터 프로그래밍을 시작해 살을 붙여가며, 수많은 에러를 해결해가면서 ‘코드가 완성되는 과정’을 이해할 때 프로그래밍을 몸으로 ‘체득’하게 되며, 실무에 투입될 수 있는 프로그래머로 성장할 수 있는 최소한의 기반이 마련된다. 진정한 프로그래머를 육성하기 위해서, 난이도에 따라 여러 챕터(장)로 분산 배치하는 ‘나선형 목차’를 통해 새로운 프로그래밍 교육 방식을 제안한다.

이 책에서 다루는 내용

◆ 프로그래밍의 개요와 C 프로그래밍의 개요
◆ C 프로그래밍의 전체 구조와 흐름
◆ 난이도에 따라 나선형으로 분산된 C 프로그래밍 이론(개념, 구조와 흐름, 기본, 응용)
◆ 완성된 코드를 분석하는 것이 아닌 직접 프로그래밍할 수 있는 힘을 기르는 방법

이 책의 대상 독자

◆ 다양한 프로그래밍 교재를 보고 학습했음에도 프로그래밍을 포기했던 ‘프포자’
◆ 인생 처음으로 프로그래밍 언어를 배우고자 하는 누구나
◆ 프로그래머 지망생, 프로그래밍 전공 또는 관련 학과/학부 학생
◆ 절차적 프로그래밍부터 기초를 잡고 객체 지향 프로그래밍으로 넘어가고자 하는 자

이 책의 구성

1장. C 프로그래밍의 개념에서는 전반적인 프로그래밍의 개요, C 프로그래밍의 개요를 살펴본다. 책을 펴자마자 무작정 코드를 작성하기보다 프로그래밍이란 무엇인지라는 기초적인 개념부터 살펴보는 것으로 스스로 왜 프로그래밍을 배우는지 충분히 납득한 상태에서 프로그래밍에 첫발을 디디게 될 것이다. 다음으로 프로그래밍 실습을 위한 환경을 구축하기 위해 컴파일러를 준비하는 과정을 다룬다.
2장. C 프로그래밍의 구조와 흐름에서는 C 프로그래밍의 전체적인 구조와 프로그래밍이 진행되는 흐름을 살펴본다. 프로그래밍의 구조와 흐름을 이해하기 위해 필요한 최소한의 이론만 가볍게 소개하면서 C 프로그래밍이라는 전체적인 한 장의 그림을 그리게 된다. 프로그래밍의 기본 단위와 시작점, 기초 개념, 기본 구조와 흐름을 배운 뒤 실무에서 사용되는 확장성을 고려한 프로그래밍 구조를 알아본다. 이 책에서는 기존 프로그래밍 교재들과 달리 첫 예제부터 실무에서도 활용되는 구조를 기반으로 예제 코드를 작성할 것이다. 마지막으로 프로그래밍은 현재 진행형의 의미를 갖고 있으므로 에러, 경고, 버그가 발생했을 때 스스로 수정할 수 있어야 한다는 것을 전제로 한다. 따라서 문제를 해결하기 위한 필수적 수단인 디버깅을 알아본다.
3장. C 프로그래밍의 기본에서는 C 프로그래밍 언어를 이해하기 위한 기본 이론을 논리적인 흐름에 따라 15개의 절로 나눠 배운다. 3장은 프로그래밍의 시작부터 끝까지 흐름 자체를 이해할 수 있게 세부적으로 다섯 부분으로 구성했다.
4장. C 프로그래밍의 응용에서는 3장을 학습하는 시점을 기준으로 난이도가 높아 3장에서 학습하는 것이 비효율적이라 뒤로 미뤄뒀던 응용 이론을 다룬다. 응용 이론은 2개 이상의 이론이 복합적으로 다뤄지므로 3장에서 기본 이론을 모두 이해한 후에 학습해야 비로소 쉽게 이해된다.

저자/역자 소개

지은이의 말

영어, 일본어, 프랑스어와 같은 언어를 현지인과 자연스럽게 의사소통할 만큼 배우려면 몇 년 정도 필요할까? 누구나가 매일같이 열심히 공부해도 최소 수년 이상, 길게는 10년 이상 걸린다고 이야기할 것이다. 해당 국가에서 생활을 하면서 24시간 해당 언어에 노출되는 환경이라면 기간이 조금 짧아지겠지만, 모국에서 생활하면서 다른 언어를 자연스러운 수준까지 도달하는 건 매우 드문 경우다.
언어에는 문법만 존재하는 것이 아니라 해당 언어를 사용해온 사람들의 문화, 사고 방식, 철학, 역사 등이 담겨 있기 때문이다. 단순히 문법만을 배워서는 절대 어느 수준 이상 도달할 수 없다. 문법과 더불어 그들의 문화, 사고방식, 철학, 역사 등을 이해하려는 과정을 거치지 않으면 읽고 듣는 것까지는 가능하게 되더라도 말하고 쓰는 것에 도달하지 못한다. 즉, 이미 완성된 문장은 이해할 수 있으나 스스로 새로운 문장을 만들어낼 수는 없다.
그렇다면 C 프로그래밍 언어와 같은 프로그래밍 언어를 스스로 원하는 기능을 자유자재로 구현할 수 있을 만큼 배우려면 몇 년 정도 필요할까? 이 질문에 대해 놀랍게도 상당수의 사람이 생각보다 굉장히 짧은 시간으로 대답한다. 대부분 2~ 3년 정해진 수업시간에만 열심히 한다면 프로그래머로 취직해서 자신이 원하는 코드를 자유롭게 짤 수 있을 것이라고 기대한다.
그러나 현실은 그렇지 않다. 머릿속에서 생각하는 대부분의 기능을 구현할 수 있을 만큼 하나의 프로그래밍 언어를 체득하기까지는 마치 영어를 체득하는 시간만큼 상당한 기간이 소요된다. 그것도 매일같이 영어 단어를 외우고, 영어로 누군가와 대화하려고 노력하는 것과 동일한 수준으로 24시간을 해당 프로그래밍 언어를 사용하려고 노력했을 때 최소 5년 정도 소요된다고 본다.
인간이 사용하는 언어와 다르게 오히려 프로그래밍 언어가 배우기 어려운 것은 해당 언어를 사용하는 국가가 존재하지 않기 때문이다. 인간이 사용하는 언어를 배우려면 해당 언어를 사용하는 국가에 가서 생활하면서 24시간 해당 언어에 노출되는 것으로 체득까지 걸리는 시간을 단축할 수 있다.
프로그래밍 언어를 사용하는 국가는 없으나 업계에 취직해서 프로그래밍 팀에 들어가면 해당 언어를 사용하는 국가에서 생활하는 것과 그나마 비슷한 환경에 노출된다. 즉, 24시간 해당 언어가 머릿속에 맴돌며 화장실을 가도, 자려고 누워도 해결하지 못한 코드가 보이게 된다. 그렇기 때문에 프로그래머로 취업하면 프로그래밍 실력이 급격하게 느는 경우가 많은 것이다.
반대로 학생들은 취업을 하기 전 이러한 환경에 노출되기 어렵기 때문에 일반 언어와 비교한다면 읽고 듣는 것은 가능하지만 말하고 쓰는 단계까지 도달하지 못하는 경우가 많은 것이다. 문제는 회사 입장에서는 신입이라고 할지라도 프로그래밍 언어를 마치 말하고 쓸 수 있는 수준까지 도달한 사람을 뽑고자 한다는 점이다. 이는 지극히 당연한 것이다.
대학과 학원에서 수많은 프포자(프로그래밍을포기한자)가 양산되는 이유는 먼저 프로그래밍언어를 배우는 것을 굉장히 쉽게 생각하고 있기 때문이다. 영어와 달리 배우기 위해 필요한 기간을 짧게 기대하고 있었던 만큼, 1 ~ 2년 동안 많은 노력을 기울여도 뚜렷한 성장이 눈으로 보이지 않기에 스스로 재능이 없다고 판단하고 쉽게 포기하게 된다.
우리는 왜 ‘프로그래밍 언어’라고 부를까? 프로그래밍 언어도 하나의 언어라는 것을 절대 잊어서는 안 된다. 프로그래밍 언어가 갖는 각각의 철학이 있고, 요구되는 사고방식이 별도로 존재한다. 단순히 문법과 제공된 코드만 열심히 외워봐야 기존에 완성돼 있는 코드를 분석하는 것만 가능해진다. 결국 국내에서 이뤄지는 영어 학습의 단점을 답습해 읽고 듣는 것만 가능하게 된다는 의미다. 프로그래밍 언어를 배워 마치 영어를 자유롭게 말하고 쓰는 단계까지 도달하려면 우리가 영어를 체득하려고 노력하는 것처럼 24시간 해당 프로그래밍 언어를 수년간 생각하고 버릇이 될 정도로 코딩을 하는 습관을 가져야 한다.
그리고 무엇보다 해당 프로그래밍 언어가 갖고 있는 철학과 사고방식을 이해하고자 하나의 영혼을 더 가지려고 노력해야 한다. C 프로그래밍 언어를 이해하려면 모든 사물을 바라볼 때 ‘기능별’로 분리하고, 논리적인 사고를 통해 진행되는 ‘절차’를 시각적으로 표현하려고 노력해야 한다.
C++나 C# 프로그래밍 언어가 갖는 철학과 요구되는 사고방식은 C 프로그래밍 언어와 전혀 다르기 때문에 추가로 또 하나의 영혼을 가져야 객체지향 프로그래밍 언어를 이해할 수 있다는 의미가 된다. 영어를 잘하면 알파벳을 사용하는 다른 언어를 배우기 수월하겠지만 해당 언어의 고유한 것은 처음부터 다시 배워야 하는 것과 같다.
필자가 대학에서 학생들에게 프로그래밍 언어나 게임 엔진을 가르치기 시작하면서 놀란 건 프로그래밍 언어를 배웠던 학생들이 생각보다 빠른 시점에, 그리고 상상을 초월할 정도로 많은 숫자가 프로그래밍을 포기했고 지금도 포기하고 있다는 사실이었다.
많은 학생과 상담해보면 기존 대부분의 프로그래밍 수업은 완성된 코드를 마치 암호처럼 눈으로 외우게 하고, 시험도 마치 역사 시험처럼 완벽한 코드의 빠진 공란을 채우는 필기시험 형태로 진행됐기 때문에 코드가 조금이라도 변경돼야 하는 상황이 발생하면 어쩔 줄 모르겠다고 하소연한다. 영어를 외우게 하는 한국의 잘못된 교육 방법이 프로그래밍 언어의 교육 방법에까지 이어진 것이다. 이러한 교육 환경에서 스스로 새로운 코드를 작성하지 못하는 건 지극히 당연하다. 따라서 1 ~ 2년이나 프로그래밍 언어를 배웠다는 학생들이 간단한 에러가 발생한 순간, 에러 메시지가 명확하게 표시되고 있는데도 에러를 해결하는 방법을 배우지 못해 빌드조차 해보지 못하고 포기하는 모습을 자주 보게 된다. 빌드가 되지 않으면 에러 코드를 찾아보거나, 빌드는 성공했으나 원하는 대로 동작하지 않으면 디버깅을 하는 것이 아니라 교재의 본래 코드를 뚫어지게 쳐다보면서 오타를 찾는 것이 현재 대학에서 이뤄지는 프로그래밍 수업이 처한 현실이다.
근본적으로 “지금까지 이뤄진 프로그래밍 수업의 방향성이 과연 맞는가?”라는 고민을 자주하게 된다. 이 책은 수많은 ‘프포자’가 자신감을 갖고 다시 프로그래밍에 도전해볼 수 있게 실무에서 이뤄지고 있는 프로그래밍의 전체적인 흐름을 먼저 알려주는 것이 목적이다. 우리는 스스로 생각해서 코드를 작성할 수 있는 프로그래머를 키우는 것이지, 완성된 코드를 보고 분석하는 분석가를 키우는 것이 아니다. 간단한 영어 문장을 스스로 말하고 쓸 수 있는 것부터 시작하는 것이 진정한 언어 교육의 첫걸음인 것과 같이, 중급 이상의 이론을 학습하기보다 기초적인 이론만을 활용해서 직접 코드를 한 줄씩 작성할 수 있게끔 하는 것이 프로그래밍 언어 교육의 첫걸음이다.

지은이 소개

남기덕

세계 게임 시장이 질적으로 한 단계 더 발전하는 데 조금이나마 공헌하고자 대학에서 게임학, 게임 프로그래밍, 게임 디자인을 연구하고 가르치고 있다. 좀 더 많은 사람들에게 게임에 대한 지식과 경험을 나눠 줄 수 있는 방법을 찾기 위해 비영리 단체인 글로벌 게임 연구회를 창립해 활동 중이다. 국내외 정부기관, 국회, 공공기관, 단체, 기업, 개발자 지망생, 게임 관련 콘텐츠 제작자에게 도움이 되고자 강연, 자문, 심사, 평가, 상담, 조언 등 다양한 활동을 전개하고 있다. 일본인을 대상으로 20년 이상 무료로 한국어를 가르치고, 한국문화를 소개하고 있다. 한국과 일본을 넘나들며 일본 친구나 블로그 독자들과 오프라인 모임도 가지고 있으며, 게임을 포함한 다양한 분야의 일본인들과 활발하게 교류하고 있다.

목차

목차
  • 1장. C 프로그래밍의 개념
  • 1-1 프로그래밍 개요
  • 1-1-1 프로그래밍을 배운다는 의미
  • 1-1-1-1 프로그래밍은 영어를 체득하는 과정과 동일하다
  • 1-1-1-2 이론과 실습보다 개념이 우선돼야 한다
  • 1-1-2 프로그래밍 언어, 프로그래밍, 코딩
  • 1-1-3 프로그래밍 = 데이터 + 알고리듬
  • 1-1-4 절차적 프로그래밍 vs 객체지향 프로그래밍
  • 1-1-4-1 철학부터 다른 별개의 언어
  • 1-1-4-2 절차적 프로그래밍
  • 1-1-4-3 객체지향 프로그래밍
  • 1-1-4-4 C를 먼저 배워야 하는 이유
  • 1-1-5 표준 라이브러리와 사용자 정의
  • 1-2 C 프로그래밍 개요
  • 1-2-1 C 프로그래밍 언어 소개
  • 1-2-1-1 C 프로그래밍 언어의 탄생
  • 1-2-1-2 C 프로그래밍 언어의 표준
  • 1-2-2 C 프로그래밍 언어의 특징
  • 1-2-2-1 프로그래머(인간) 지향성
  • 1-2-2-2 메모리와 하드웨어를 직접 제어 가능
  • 1-2-2-3 높은 이식성
  • 1-2-3 C 프로그래밍의 꽃은 포인터 변수가 아닌 ‘함수’여야 한다
  • 1-2-4 C 프로그래밍을 수행하는 7단계
  • 1-2-4-1 프로그래밍의 시작은 논리적 사고부터
  • 1-2-4-2 C 프로그래밍의 7가지 수행 단계
  • 1-3 실습을 위한 컴파일러 준비
  • 1-3-1 비주얼 스튜디오 다운로드 및 설치
  • 1-3-2 솔루션 및 프로젝트 생성
  • 1-3-2-1 비주얼 스튜디오의 구조
  • 1-3-2-2 프로젝트 생성
  • 1-3-3 소스 파일 생성
  • 1-3-4 코드 작성
  • 1-3-5 컴파일과 솔루션 빌드
  • 1-3-6 실행 파일 실행
  • 1-3-7 C 프로그래밍의 시작점: main 함수
  • 1-3-8 비주얼 스튜디오 추천 단축키

  • 2장 C 프로그래밍의 구조와 흐름
  • 2-1 프로그래밍을 하는 기본 단위와 시작점
  • 2-1-1 프로그램, 함수, 명령문
  • 2-1-2 키워드와 식별자
  • 2-1-3 main 함수의 C99 표준 작성법
  • 2-1-4 컴파일러가 인식하는 명령문의 종료
  • 2-1-4-1 에러 코드: C2143
  • 2-2 프로그래밍에 필요한 기초 개념
  • 2-2-1 표준 라이브러리 함수
  • 2-2-2 전처리기 지시자: #include
  • 2-2-2-1 윈도우 API 활용
  • 2-2-3 데이터형의 기본 분류
  • 2-3 프로그래밍의 기본 구조와 흐름
  • 2-3-1 표준 출력 함수
  • 2-3-1-1 원하는 표준 라이브러리를 찾아가는 과정
  • 2-3-1-2 표준 출력 함수: printf( )
  • 2-3-1-3 에러 코드: LNK2019, LNK1120
  • 2-3-1-4 데이터형 기본 분류 출력
  • 2-3-2 변수의 선언 명령문
  • 2-3-2-1 변수의 선언 명령문은 어디에 작성해야 하는가?
  • 2-3-2-2 왜 변수를 선언하는가?
  • 2-3-3 대입 명령문
  • 2-3-3-1 =은 수학에서 사용하는 등호의 개념이 아니다!
  • 2-3-3-2 대입 명령문
  • 2-3-3-3 하드 코딩은 최대한 피해야 한다
  • 2-3-4 표준 입력 함수
  • 2-3-4-1 사용자를 고려한 프로그램
  • 2-3-4-2 표준 입력 함수: scanf( )
  • 2-3-4-3 함수 scanf의 위험성
  • 2-4 실무를 대비한 프로그래밍 구조
  • 2-4-1 사용자 정의 함수
  • 2-4-1-1 에러 코드: C2371
  • 2-4-2 사용자 정의 헤더 파일 생성
  • 2-4-3 기능별 파일 분리
  • 2-4-3-1 소스 파일 분리
  • 2-4-3-2 대형 프로그램 작성을 위한 파일 구조 예시
  • 2-4-4 주석문
  • 2-4-5 소스코드의 영역 구분
  • 2-4-6 템플릿 제작
  • 2-5 디버깅
  • 2-5-1 에러(오류), 버그, 경고
  • 2-5-2 디버깅의 개념
  • 2-5-2-1 디버깅은 고급이 아닌 기초 기술이다
  • 2-5-2-2 상황에 맞는 디버깅 방법 선택
  • 2-5-3 중단점을 활용한 디버깅 실습

  • 3장. C 프로그래밍의 기본
  • 3-1 리터럴
  • 3-1-1 문자 리터럴
  • 3-1-1-1 문자 리터럴 표현법
  • 3-1-2 문자열 리터럴
  • 3-1-2-1 문자열 리터럴 표현법
  • 3-1-1 정수 리터럴
  • 3-1-3-1 정수 리터럴 표현법
  • 3-1-3-2 정수 리터럴 접미사
  • 3-1-4 실수 리터럴
  • 3-1-4-1 실수 리터럴 표현법
  • 3-1-4-2 실수 리터럴 접미사
  • 3-2 데이터형
  • 3-2-1 문자 데이터형
  • 3-2-1-1 문자 데이터형
  • 3-2-1-2 데이터형의 크기
  • 3-2-1-3 범위: 최솟값과 최댓값
  • 3-2-1-4 언더플로와 오버플로
  • 3-2-1-5 문자열 저장
  • 3-2-2 정수 데이터형
  • 3-2-2-1 정수 데이터형
  • 3-2-2-2 데이터형의 크기
  • 3-2-2-3 범위: 최솟값과 최댓값
  • 3-2-2-4 언더플로와 오버플로
  • 3-2-3 실수 데이터형
  • 3-2-3-1 실수 데이터형
  • 3-2-3-2 데이터형의 크기
  • 3-2-3-3 범위: 최솟값과 최댓값
  • 3-2-3-4 언더플로와 오버플로
  • 3-2-4 불리언 데이터형
  • 3-2-4-1 불리언 데이터형
  • 3-2-4-2 데이터형의 크기
  • 3-2-5 기타 데이터형
  • 3-2-5-1 특정 데이터형 없음: void
  • 3-2-5-2 고정 크기 정수 데이터형
  • 3-2-5-3 복소수 데이터형
  • 3-3 변수와 상수
  • 3-3-1 변수의 선언
  • 3-3-1-1 변수의 선언 명령문
  • 세이브 포인트
  • 3-3-1-2 변수명 네이밍 규칙
  • 3-3-1-3 한 명령문에 여러 개 변수 선언
  • 3-3-2 변수 초기화
  • 3-3-2-1 대입 명령문을 활용한 초기화
  • 3-3-2-2 선언 명령문과 동시에 초기화
  • 3-3-3 상수
  • 3-3-3-1 상수의 선언 명령문
  • 3-3-3-2 상수의 정의 확인
  • 3-3-4 변수의 종류
  • 3-3-4-1 지역 변수
  • 3-3-4-2 레지스터 변수
  • 3-3-4-3 전역 변수
  • 3-3-4-4 정적 지역 변수
  • 3-3-4-5 변수 종류 비교
  • 3-4 표준 입출력
  • 3-4-1 제어 문자
  • 3-4-2 문자 전용 입출력 함수
  • 3-4-2-1 putchar()
  • 3-4-2-2 getchar()
  • 3-4-2-3 표준 입력 함수와 버퍼
  • 3-4-2-4 fputc()
  • 3-4-2-5 fgetc()
  • 3-4-3 문자열 전용 입출력 함수
  • 3-4-3-1 puts()
  • 3-4-3-2 gets()와 gets_s()
  • 3-4-3-3 fputs()
  • 3-4-3-4 fgets()
  • 3-4-4 범용 입출력 함수
  • 3-4-4-1 printf()
  • 3-4-4-2 scanf()
  • 3-4-4-3 파일 입출력 전용 함수 fprintf()와 fscanf()
  • 3-5 기본 연산자
  • 3-5-1 연산자 분류 및 우선순위표
  • 3-5-2 산술 연산자
  • 3-5-2-1 덧셈과 뺄셈 산술 연산자
  • 3-5-2-2 곱셈과 나눗셈 산술 연산자
  • 3-5-2-3 나머지 산술 연산자
  • 3-5-2-4 형 확장
  • 3-5-2-5 형 축소
  • 3-5-3 증감 연산자
  • 3-5-3-1 단항 산술 연산자
  • 3-5-3-2 전위와 후위의 차이
  • 3-5-4 관계 및 동등 연산자
  • 3-5-4-1 관계 연산자
  • 3-5-4-2 동등 연산자
  • 3-5-5 논리 연산자
  • 3-5-5-1 AND 논리 연산자
  • 3-5-5-2 OR 논리 연산자
  • 3-5-5-3 NOT 논리 연산자
  • 3-5-6 대입 및 복합 대입 연산자
  • 3-5-6-1 대입 연산자
  • 3-5-6-2 산술 복합 대입 연산자
  • 3-5-6-3 복잡한 코드의 분리
  • 3-5-7 형 변환 연산자
  • 3-5-8 sizeof 연산자
  • 3-5-9 조건 연산자
  • 3-6 사용자 정의 함수
  • 3-6-1 함수의 원형
  • 3-6-2 함수의 구조(선언부, 구현부, 호출부)
  • 3-6-2-1 구현부
  • 3-6-2-2 선언부
  • 3-6-2-3 호출부
  • 3-6-2-4 이벤트 → 조건 → 핵심 코드(액션)
  • 3-6-3 함수의 4가지 유형
  • 3-6-3-1 함수의 4가지 유형 분류 기준
  • 3-6-3-2 매개변수X & 반환값X 함수
  • 3-6-3-3 매개변수O & 반환값X 함수
  • 3-6-3-4 매개변수X & 반환값O 함수
  • 3-6-3-5 매개변수O & 반환값O 함수
  • 3-7 제어 명령문
  • 3-7-1 조건문
  • 3-7-1-1 if 조건문
  • 3-7-1-2 if ~ else 조건문
  • 3-7-1-3 if ~ else if ~ else 조건문
  • 3-7-1-4 중첩 if 조건문
  • 3-7-1-5 switch ~ case 조건문
  • 3-7-1-6 중첩 조건문
  • 3-7-2 반복문
  • 3-7-2-1 for 반복문
  • 3-7-2-2 while 반복문
  • 3-7-2-3 do ~ while 반복문
  • 3-7-2-4 중첩 반복문
  • 3-7-3 분기문
  • 3-7-3-1 리턴 명령문(return)
  • 3-7-3-2 continue 명령문
  • 3-7-3-3 break 명령문
  • 3-7-3-4 goto 명령문과 레이블
  • 3-8 사용자 정의 데이터형
  • 3-8-1 구조체
  • 3-8-1-1 구조체의 필요성
  • 3-8-1-2 구조체 정의와 선언
  • 3-8-1-3 구조체 정의와 선언 01: 별도 구분
  • 3-8-1-4 구조체 정의와 선언 02: 정의에서 동시에
  • 3-8-1-5 구조체 정의와 선언 03: typedef를 활용
  • 3-8-1-6 구조체 정의와 선언 04: 익명 구조체
  • 3-8-1-7 구조체 초기화
  • 3-8-1-8 구조체 대입 연산
  • 3-8-1-9 구조체를 멤버로 가진 구조체
  • 3-8-1-10 구조체의 크기 및 정렬
  • 3-8-2 공용체
  • 3-8-2-1 공용체 정의와 선언
  • 3-8-2-2 공용체 초기화
  • 3-8-2-3 공용체의 크기
  • 3-8-3 열거형
  • 3-8-3-1 열거형의 필요성
  • 3-8-3-2 열거형 정의와 선언
  • 3-8-3-3 열거형 지정 초기화
  • 3-8-3-4 찰떡궁합, 열거형과 switch ~ case 조건문
  • 3-9 전처리기
  • 3-9-1 파일 포함: #include
  • 3-9-1-1 표준 라이브러리 헤더 파일 포함
  • 3-9-1-2 사용자 정의 헤더 파일 포함
  • 3-9-1-3 지정된 경로의 헤더 파일 포함
  • 3-9-2 컴파일 제어: #pragma
  • 3-9-2-1 #pragma once
  • 3-9-2-2 #pragma warning
  • 3-9-2-3 #pragma message
  • 3-9-2-4 #pragma pack
  • 3-9-3 매크로 정의: #define과 #undef
  • 3-9-3-1 #define 매크로의 구조
  • 3-9-3-2 매크로 정의
  • 3-9-3-3 상수 같은 매크로
  • 3-9-3-4 함수 같은 매크로
  • 3-9-3-5 #연산자: 토큰을 문자열로 변환
  • 3-9-3-6 ##연산자: 토큰 결합
  • 3-9-3-7 #undef: 매크로 해제
  • 3-9-4 조건부 컴파일
  • 3-9-4-1 #ifdef ~ #else ~ #endif
  • 3-9-4-2 #ifndef ~ #else ~ #endif
  • 3-9-4-3 #if ~ #elif ~ #else ~ #endif
  • 3-9-4-4 #if defined ~ #elif defined ~ #else ~ #endif
  • 3-9-5 정의된 매크로
  • 3-9-6 기타, #line과 #error
  • 3-9-6-1 #line
  • 3-9-6-2 #error
  • 3-10 1차원 배열
  • 3-10-1 배열의 필요성
  • 3-10-2 배열의 선언, 배열 요소, 치명적 단점
  • 3-10-2-1 배열의 선언과 배열 요소별 접근
  • 3-10-2-2 배열의 치명적 단점
  • 3-10-3 배열 초기화
  • 3-10-3-1 배열 선언 명령문에서 초기화
  • 3-10-3-2 배열 선언 명령문에서 자동 초기화
  • 3-10-3-3 배열 선언 명령문에서 일부 초기화 생략
  • 3-10-4 배열 대입
  • 3-10-5 배열의 크기
  • 3-10-6 배열과 반복문
  • 3-10-7 배열에 문자열 저장
  • 3-10-7-1 문자열 데이터형이 없어서 발생하는 문제
  • 3-10-7-2 문자 데이터형 배열의 선언과 동시에 초기화
  • 3-10-7-3 문자 데이터형 배열의 선언과 대입 연산자로 초기화
  • 3-10-7-4 배열의 크기를 +1로 표기하지 않을 때
  • 3-10-8 배열에 문자열 대입
  • 3-11 포인터 변수
  • 3-11-1 주소 연산자(&)와 간접 참조 연산자(*)
  • 3-11-1-1 메모리 주소의 개념
  • 3-11-1-2 주소 연산자
  • 3-11-1-3 간접 참조 연산자
  • 3-11-2 포인터 변수 선언
  • 3-11-3 포인터 변수의 필요성
  • 3-11-3-1 지역 변수의 사용 범위에 따른 한계
  • 3-11-3-2 함수의 인자에 변수로 값 공유
  • 3-11-3-3 함수의 인자에 포인터 변수로 주소 공유
  • 3-11-4 주소와 포인터 변수의 크기
  • 3-11-5 억지로 만든 포인터 변수 예시
  • 3-11-6 포인터 변수 대입
  • 3-11-7 포인터 변수와 const
  • 3-12 동적 메모리
  • 3-12-1 동적 메모리 할당과 해제: malloc( )과 free( )
  • 3-12-2 동적 메모리를 배열처럼 활용
  • 3-12-3 널 포인터
  • 3-12-4 포인터 변수의 활용법 4가지 정리
  • 3-12-5 memset( )
  • 3-12-6 calloc( )
  • 3-12-7 realloc( )
  • 3-13 문자열
  • 3-13-1 배열과 문자열
  • 3-13-1-1 char 배열 선언 명령문
  • 3-13-1-2 인덱스로 문자 접근
  • 3-13-1-3 문자열 대입
  • 3-13-1-4 입력 함수로 문자열 받기
  • 3-13-2 포인터 변수와 문자열
  • 3-13-2-1 char 포인터 변수 선언 명령문
  • 3-13-2-2 인덱스로 문자 접근
  • 3-13-2-3 문자열 대입
  • 3-13-2-4 입력 함수로 문자열 받기
  • 3-13-3 문자열 연산
  • 3-13-3-1 문자열 길이: strlen( )
  • 3-13-3-2 문자열 비교: strcmp( )과 strncmp( )
  • 3-13-3-3 문자열 검색: strchr( )과 strrchr( )과 strstr( )
  • 3-13-3-4 문자열 복사: strcpy( )과 strncpy( )
  • 3-13-3-5 문자열 연결: strcat( )과 strncat( )
  • 3-13-3-6 문자열 자르기: strtok( )
  • 3-13-4 문자열과 정수 및 실수 변환
  • 3-13-4-1 문자열을 정수로: atoi( ) atol( ) atoll( )
  • 3-13-4-2 문자열을 실수로: atof( )
  • 3-13-4-3 정수를 문자열로: sprintf( )
  • 3-13-4-4 실수를 문자열로: sprintf( )
  • 3-14 파일 입출력
  • 3-14-1 파일의 개방과 폐쇄
  • 3-14-1-1 파일 개방과 폐쇄
  • 3-14-1-2 절대 경로와 상대 경로
  • 3-14-2 파일 개방 모드
  • 3-14-2-1 파일 개방 모드 정리
  • 3-14-2-2 파일 개방 모드: write
  • 3-14-2-3 파일 개방 모드: append
  • 3-14-2-4 파일 개방 모드: read
  • 3-14-2-5 파일 개방 모드: +
  • 3-14-3 문자 전용 입출력 함수
  • 3-14-3-1 fputc( )
  • 3-14-3-2 fgetc( )
  • 3-14-4 문자열 전용 입출력 함수
  • 3-14-4-1 fputs( )
  • 3-14-4-2 fwrite( )
  • 3-14-4-3 fgets( )
  • 3-14-4-4 fread( )
  • 3-14-5 범용 입출력 함수
  • 3-14-5-1 fprintf( )
  • 3-14-5-2 fscanf( )
  • 3-14-6 파일 포인터 위치 변경과 찾기: fseek( )와 ftell( )
  • 3-14-6-1 fseek( )와 ftell( )
  • 3-14-6-2 파일 크기 계산에 활용
  • 3-14-7 파일의 처음으로 복귀: rewind( )
  • 3-14-8 파일의 끝인지 검사: feof( )
  • 3-15 프로그래밍 8가지 지침
  • 3-15-1 프로그래밍 스킬보다 논리적 사고 능력이 중요하다
  • 3-15-2 핵심 코드부터 시작해 점차 구현해야 한다
  • 3-15-3 처음부터 실수를 줄일 수 있는 버릇을 들여라
  • 3-15-4 팀 프로그래밍은 네이밍 규정부터 시작된다
  • 3-15-5 가독성 있는 코딩은 기본 중 기본이다
  • 3-15-6 에러 & 버그와 친해질수록 경험이 쌓인다
  • 3-15-7 디버깅을 할 수 있어야 비로소 프로그래밍을 시작한 것이다
  • 3-15-8 기능 구현만이 아닌 예외 처리와 디버깅용 코드를 작성하라

  • 4장. C 프로그래밍의 응용
  • 4-1 리터럴 응용
  • 4-1-1 비트 표현을 위한 준비
  • 4-1-2 정수 리터럴의 비트 표현
  • 4-1-3 문자 리터럴의 비트 표현
  • 4-1-4 실수 리터럴의 비트 표현
  • 4-2 연산자 응용
  • 4-2-1 비트 논리 연산자
  • 4-2-1-1 논리곱(AND) 비트 논리 연산자
  • 4-2-1-2 배타적 논리합(XOR) 비트 논리 연산자
  • 4-2-1-3 논리합(OR) 비트 논리 연산자
  • 4-2-1-4 부정(NOT) 비트 논리 연산자
  • 4-2-2 비트 이동 연산자
  • 4-2-2-1 왼쪽 비트 이동 연산자
  • 4-2-2-2 오른쪽 비트 이동 연산자
  • 4-2-3 비트 복합 대입 연산자
  • 4-2-4 콤마 연산자
  • 4-3 사용자 정의 함수 응용
  • 4-3-1 구조체 매개변수
  • 4-3-2 배열 매개변수
  • 4-3-3 포인터 변수 매개변수
  • 4-3-4 가변 인자 매개변수
  • 4-3-5 구조체 반환
  • 4-3-6 배열 반환
  • 4-3-7 포인터 변수 반환
  • 4-3-8 void 포인터 반환
  • 4-3-9 재귀 호출 함수
  • 4-4 배열 응용
  • 4-4-1 구조체 배열
  • 4-4-2 포인터 배열
  • 4-4-3 2차원 배열의 선언, 배열 요소 접근
  • 4-4-4 2차원 배열 초기화
  • 4-4-5 2차원 배열 대입
  • 4-4-6 2차원 배열의 크기
  • 4-5 포인터 변수 응용
  • 4-5-1 배열명을 포인터 변수에 저장
  • 4-5-2 구조체 포인터
  • 4-5-3 배열 포인터
  • 4-5-4 이중 포인터 변수 선언
  • 4-5-5 이중 포인터 변수의 필요성
  • 4-5-5-1 함수의 매개변수로 포인터 변수의 주소 교환
  • 4-5-5-2 함수의 인자에 포인터 배열로 주소 공유
  • 4-5-6 함수 포인터
  • 4-5-7 void 포인터

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안