사실 저는 주력이 C언어이다보니 꽤나 많은 C언어 책을 읽었는데 이 책은 추천할 맘이 생기는 책이네요.
자세한 리뷰는 아래에서 하겠습니다.
책 표지
[출처 : 알라딘 제공]
기본 정보
도서명 : 이것이 C언어다.
정가 : 25,000 원
저자 : 서현우
출판사 : 한빛미디어
출판사 서평
흥미로운 이야기와 상세한 그림으로 명쾌하게 C 언어를 시작하자!
『이것이 C 언어다, 서현우의 C 프로그래밍 정복』은 C언어 입문자들을 위한 맞춤형 입문서이다. 10년 넘게 기업과 대학에서 현업자들과 학생들을 대상으로 강의했던 저자가 그동안의 경험과 노하우를 정제해 책으로 엮었다. 이 책은 입문자들을 주 대상으로 하기 때문에 각 장에 학습목표를 제시하고 목표달성을 위한 예제와 초보자들의 눈높이에 맞춘 설명으로 이루어진다. 또한, C 내면의 동작 원리를 그림과 함께 수록해 알기 쉽도록 담았다.
C 언어를 어려워하는 많은 입문자들은 ‘포인터’ 때문에 포기한다고 한다. 그래서 저자는 9장에서 포인터의 개념을 명확히 확인 할 수 있도록 15개의 그림으로 설명하고 있다. 더불어, C언어 표준 라이브러리 10여 가지와 표준함수 140여 가지 등 목록을 수록해 함수를 효과적으로 활용할 수 있도록 하였다. 이 책은 저자가 3년 간 집필하고 3명의 감수자에게 기술 검토를 의뢰했으며, 베타 리더 7명의 의견과 품질 검토로 이루어졌다고 한다.
책 내부를 보게되면은 굉장히 깔끔하다는 느낌이 제일 먼저 날 정도로 정리가 잘 되어있습니다.
개인적으로 처음 공부할 때는 그래도 답안이 있으면 좋겠다고 생각했는데, 이 책은 답안까지 잘 정리되어있어서 맘에 드네요.
사실 C언어책을 고르는 가장 중요한 기준이 포인터 설명입니다.
많은 사람이 포인터에서 포기할 정도로 난이도가 높다고 알려져있죠.
지극히 개인적인 생각으로 포인터가 그정도로 어려운게 아닌데 많은 책들에서 쓸데없이 비유를 많이 함으로써 어려워진다고 생각합니다.
이 책은 쓸데없는 비유보단 그림으로 정확하게 포인터가 어디를 보여주고있는 설명하는 것에서 맘에 들었습니다.
배열하고 포인터의 관계도 명확하게 보여줘서 더 맘에 들었구요.
C언어 입문 책으로는 손색없을 정도로 정리가 잘 되어있고, 문제도 깔끔합니다.
다만, 난이도가 있는 부분이 없어서 C언어가 머리속에 다 정리되어있으신 분들은 굳이 안보셔도 될거같습니다.
입문자라면 적극 추천합니다.
저자도 난이도가 입문 난이도라는걸 알기 때문에 서두에 도전과제라는 부분을 따로 사이트에 게재해놨습니다.
이런 부분에서는 배려가 참 많은 도서입니다.
개인적으로 아쉬운 부분은 분할 컴파일이 앞에 수록되어있으면 더 좋았을 껄 생각해봅니다.
그 외에는 입문자분들에게 적극 추천하는 좋은 도서라고 생각합니다.
C언어 마스터를 시작하실 분들에게 꼭 추천합니다.
책 상세 정보
목차
PART 1C 언어 기본
1장 프로그램 만들기 _1.1 프로그램과 C 언어 _1.2 컴파일러 사용법 __1.2.1 소스 파일(source file) 작성 __1.2.2 컴파일 __1.2.3 실행 __연습문제 / 정답 및 해설
2장 상수와 데이터 출력 _2.1 C 프로그램의 기본 형태와 데이터 출력 방법 __2.1.1 main 함수 구조 __2.1.2 출력 함수(printf)의 사용법 __2.1.3 printf 함수로 제어 문자 출력 __2.1.4 printf 함수로 정수와 실수 출력 __연습문제 / 정답 및 해설 _2.2 상수와 데이터 표현 방법 __2.2.1 정수 상수 표현법 __2.2.2 실수 상수 표현법 __2.2.3 문자와 문자열 상수 표현법 __2.2.4 상수가 컴파일된 후의 비트 형태 __2.2.5 정수형 상수가 컴파일된 후의 비트 형태 __2.2.6 실수형 상수가 컴파일된 후의 비트 형태 __연습문제 / 정답 및 해설
3장 변수와 데이터 입력 _3.1 변수 __3.1.1 변수 선언 방법 __3.1.2 쓰레기값과 초기화 __3.1.3 정수를 저장하는 자료형 __3.1.4 unsigned 정수 자료형 __3.1.5 실수 자료형 __3.1.6 문자열 저장 __3.1.7 const를 사용한 변수 __3.1.8 예약어와 식별자 __연습문제 / 정답 및 해설 _3.2 데이터 입력 __3.2.1 scanf 함수의 사용법 __3.2.2 scanf 함수의 응용 __3.2.3 문자와 문자열의 입력 __연습문제 / 정답 및 해설
4장 연산자 _4.1 산술, 관계, 논리 연산자 __4.1.1 연산자와 피연산자 __4.1.2 산술 연산자와 대입 연산자 __4.1.3 나눗셈 연산자와 나머지 연산자 __4.1.4 증감 연산자 __4.1.5 관계 연산자 __4.1.6 논리 연산자 __4.1.7 연산의 결과값은 어떻게 되나요? __연습문제 / 정답 및 해설 _4.2 비트 연산자와 그 외의 멋진 연산자 __4.2.1 형변환 연산자 __4.2.2 sizeof 연산자 __4.2.3 복합대입 연산자 __4.2.4 콤마 연산자 __4.2.5 조건 연산자 __4.2.6 비트 연산자 __4.2.7 연산자 우선순위와 연산 방향 __연습문제 / 정답 및 해설 _도전 실전 예제
5장 선택문(if, switch~case) _5.1 if문 __5.1.1 if문의 기본 형식 __5.1.2 if ~ else문 __5.1.3 if ~ else if ~ else문 __연습문제 / 정답 및 해설 _5.2 if문의 활용과 switch~case문 __5.2.1 if문 중첩 __5.2.2 if문을 중첩해서 쓰는 이유 __5.2.3 else 결합 문제 __5.2.4 switch ~ case문 __연습문제 / 정답 및 해설 _도전 실전 예제
6장 반복문 _6.1 while, for, do~while __6.1.1 while문 __6.1.2 for문 __6.1.3 do ~ while문 __연습문제 / 정답 및 해설 _6.2 반복문 활용 __6.2.1 중첩 반복문 __6.2.2 break와 continue 분기문 __연습문제 / 정답 및 해설 _도전 실전 예제
7장 함수 _7.1 함수의 작성과 사용 __7.1.1 함수 정의 __7.1.2 함수 호출과 반환 __7.1.3 함수 선언 __연습문제 / 정답 및 해설 _7.2 여러 가지 함수 유형 __7.2.1 매개변수가 없는 함수 __7.2.2 반환값이 없는 함수 __7.2.3 반환값과 매개변수가 모두 없는 함수 __7.2.4 재귀호출 함수 __7.2.5 재귀호출이 반복문과 다른 점은 무엇인가? __연습문제 / 정답 및 해설 _도전 실전 예제
8장 배열 _8.1 배열의 선언과 사용 __8.1.1 배열 선언과 배열 요소 사용 __8.1.2 배열 초기화 __8.1.3 배열과 반복문 __8.1.4 sizeof 연산자를 활용한 배열 처리 __연습문제 / 정답 및 해설 _8.2 문자를 저장하는 배열 __8.2.1 char형 배열의 선언과 초기화 __8.2.2 문자열 대입 __8.2.3 문자열 전용 입출력 함수(gets, puts) __연습문제 / 정답 및 해설 _도전 실전 예제
9장 포인터 __9.1 포인터의 기본 개념 __9.1.1 주소 연산자(&) __9.1.2 포인터와 간접참조 연산자(*) __9.1.3 여러 가지 포인터 __9.1.4 const를 사용한 포인터 __연습문제 / 정답 및 해설 _9.2 포인터에 관한 궁금한 이야기 __9.2.1 주소와 포인터의 차이 __9.2.2 주소와 포인터의 크기 __9.2.3 포인터의 대입 규칙 __9.2.4 포인터가 필요한 이유 __연습문제 / 정답 및 해설 _도전 실전 예제
PART 11C 언어 고급
10장 배열과 포인터 _10.1 배열과 포인터의 관계 __10.1.1 배열명의 정체 __10.1.2 배열명으로 배열 요소 사용하기 __10.1.3 배열명 역할을 하는 포인터 __10.1.4 배열명과 포인터의 차이 __10.1.5 포인터의 뺄셈과 관계 연산 __연습문제 / 정답 및 해설 _10.2 배열을 처리하는 함수 __10.2.1 배열의 값을 출력하는 함수 __10.2.2 배열 요소의 개수가 다른 배열도 출력하는 함수 __10.2.3 배열에 값을 입력하는 함수 __연습문제 / 정답 및 해설 _도전 실전 예제
11장 문자 _11.1 아스키 코드값과 문자 입출력 함수 __11.1.1 문자 상수 구현 방법 __11.1.2 아스키 코드 __11.1.3 scanf 함수를 사용한 문자 입력 __11.1.4 getchar 함수와 putchar 함수 __연습문제 / 정답 및 해설 _11.2 버퍼를 사용하는 입력 함수 __11.2.1 scanf 함수가 문자를 입력하는 과정 __11.2.2 scanf 함수 반환값 활용 __11.2.3 getchar 함수를 사용한 문자열 입력 __11.2.4 fflush 함수 __연습문제 / 정답 및 해설 _도전 실전 예제
12장 문자열 _12.1 문자열과 포인터 __12.1.1 문자열 상수 구현 방법 __12.1.2 char 포인터로 문자열 사용 __12.1.3 scanf 함수를 사용한 문자열 입력 __12.1.4 gets 함수를 사용한 문자열 입력 __12.1.5 fgets 함수를 사용한 문자열 입력 __12.1.6 표준 입력 함수의 버퍼 공유 문제 __12.1.7 문자열을 출력하는 puts, fputs 함수 __연습문제 / 정답 및 해설 _12.2 문자열 연산 함수 __12.2.1 문자열을 대입하는 strcpy 함수 __12.2.2 strcpy 함수 구현 방법 __12.2.3 원하는 개수의 문자만을 복사하는 strncpy 함수 __12.2.4 문자열 길이를 계산하는 strlen 함수 __12.2.5 문자열을 붙이는 strcat, strncat 함수 __12.2.6 문자열을 비교하는 strcmp, strncmp 함수 __연습문제 / 정답 및 해설 _도전 실전 예제
13장 변수의 영역과 데이터 공유 _13.1 변수 사용 영역 __13.1.1 지역 변수 __13.1.2 블록 안에서 사용하는 지역 변수 __13.1.3 전역 변수 __13.1.4 정적 지역 변수 __13.1.5 레지스터 변수 __연습문제 / 정답 및 해설 _13.2 함수의 데이터 공유 방법 __13.2.1 값을 복사해서 전달하는 방법 __13.2.2 주소를 전달하는 방법 __13.2.3 주소를 반환하는 함수 __연습문제 / 정답 및 해설 _도전 실전 예제
14장 다차원 배열과 포인터 배열 _14.1 2차원 배열 __14.1.1 2차원 배열 선언과 요소 사용 __14.1.2 2차원 배열 초기화 __14.1.3 2차원 char 배열 __14.1.4 2차원 char 배열 초기화 __14.1.5 3차원 배열 __연습문제 / 정답 및 해설 _14.2 포인터 배열 __14.2.1 포인터 배열 선언과 사용 __14.2.2 2차원 배열처럼 활용하는 포인터 배열 __연습문제 / 정답 및 해설 _도전 실전 예제
15장 응용 포인터 _15.1 2중 포인터와 배열 포인터 __15.1.1 2중 포인터 개념 __15.1.2 2중 포인터 활용 예 1 __15.1.3 2중 포인터 활용 예 2 __15.1.4 배열 요소의 주소와 배열의 주소 __15.1.5 2차원 배열과 배열 포인터 __15.1.6 2차원 배열의 요소를 참조하는 원리 __연습문제 / 정답 및 해설 _15.2 함수 포인터와 void 포인터 __15.2.1 함수 포인터의 개념 __15.2.2 함수 포인터의 활용 __15.2.3 void 포인터 __연습문제 / 정답 및 해설 _도전 실전 예제
16장 메모리 동적 할당 _16.1 동적 할당 함수 __16.1.1 malloc, free 함수 __16.1.2 동적 할당 영역을 배열처럼 쓰기 __16.1.3 기타 동적 할당 함수 __연습문제 / 정답 및 해설 _16.2 동적 할당 저장 공간의 활용 __16.2.1 동적 할당을 사용한 문자열 처리 __16.2.2 동적 할당 영역에 저장한 문자열을 함수로 처리하는 예 __16.2.3 main 함수의 명령행 인수 사용 __16.2.4 명령행 인수를 사용한 문자열 입력 예 __연습문제 / 정답 및 해설 _도전 실전 예제
17장 사용자 정의 자료형 _17.1 구조체 __17.1.1 구조체 선언과 멤버 사용 __17.1.2 다양한 구조체 멤버 __17.1.3 구조체 변수의 초기화와 대입 연산 __17.1.4 구조체 변수를 함수 매개변수에 사용하기 __17.1.5 비트 필드 구조체 __연습문제 / 정답 및 해설 _17.2 구조체 활용, 공용체, 열거형 __17.2.1 구조체 포인터와 -] 연산자 __17.2.2 구조체 배열 __17.2.3 구조체 배열을 처리하는 함수 __17.2.4 자기 참조 구조체 __17.2.5 공용체 __17.2.6 열거형 __17.2.7 typedef를 사용한 형 재정의 __17.2.8 구조체, 공용체, 열거형을 사용한 프로그램 __연습문제 / 정답 및 해설 _도전 실전 예제
18장 파일 입출력 _18.1 파일 개방과 입출력 __18.1.1 파일 개방과 폐쇄 __18.1.2 스트림 파일과 파일 포인터 __18.1.3 문자 입력 함수 fgetc __18.1.4 문자 출력 함수 fputc __18.1.5 기본적으로 개방되는 표준 입출력 스트림 파일 __18.1.6 텍스트 파일과 바이너리 파일 __18.1.7 + 개방 모드, fseek, rewind, feof 함수 __연습문제 / 정답 및 해설 _18.2 다양한 파일 입출력 함수 __18.2.1 한 줄씩 입출력하는 fgets와 fputs __18.2.2 다양한 형태로 입출력 하는 fscanf, fprintf __18.2.3 스트림 파일의 버퍼 공유 문제와 fflush 함수 __18.2.4 fread와 fwrite 함수 __연습문제 / 정답 및 해설 _도전 실전 예제
19장 전처리와 분할 컴파일 _19.1 전처리 지시자 __19.1.1 파일을 포함하는 #include __19.1.2 매크로명을 만드는 #define __19.1.3 #define을 사용한 매크로 함수 __19.1.4 이미 정의된 매크로 __19.1.5 매크로 연산자 #과 ## __19.1.6 조건부 컴파일 지시자 __19.1.7 #pragma 지시자 __연습문제 / 정답 및 해설 _19.2 분할 컴파일 __19.2.1 분할 컴파일 방법 __19.2.2 분할 컴파일에서 extern과 static의 용도 __19.2.3 헤더 파일의 필요성과 중복 문제 해결 방법 __연습문제 / 정답 및 해설 _도전 실전 예제
부록 _ A. 아스키 코드표 _ B. 선택정렬 알고리즘 _ C. 날짜와 시간 함수, 난수 함수, 가변 인수 함수 _ D. C 표준 라이브러리 함수와 매크로. 678 _ E. 실전 프로젝트. 702
[출처 : 예스24 제공]
저자 소개
저자 서현우는 컴퓨터공학을 전공하고 12년째 학교와 기업체에서 C 전문강사로 활동 중이다. 아직도 태권브이를 꿈꾸는 어린아이 같은 면이 있지만, 강의할 때 뿜어 나오는 카리스마는 수강생을 매력적인 C 세계로 이끈다. 쉽고 깔끔한 강의, 전문적이고 기본기를 다져주는 강의, 열정적이면서 명쾌한 강의, 집중력을 이끌어내는 수강자 중심의 강의로 대학과 기업체에서 인기를 끌고 있다.