책소개
혼자 해도 충분하다! 1:1 과외하듯 배우는 C 프로그래밍 자습서
『혼자 공부하는 C 언어』가 더욱 흥미 있고 알찬 내용으로 돌아왔습니다. 혼자 공부하더라도 막히는 부분이 없도록 부가 설명용 동영상 ‘QR 코드’를 추가했습니다. 또한 최신 프로그램에서도 무리 없이 실습을 진행할 수 있도록 비주얼 스튜디오 2022 버전을 반영했습니다.
물론, 프로그래밍이 정말 처음인 사람에게 ‘꼭 필요한 내용’과 뭘 모르는지조차 모르는 마음에 십분 공감해 과외 선생님이 알려주듯 핵심 내용만 콕콕 짚어 주는 ‘친절한 설명’, 누구나 쉽게 따라 할 수 있도록 구성된 ‘단계별 학습’ 그리고 입문자에게 맞는 난이도, 분량, 학습 요소 등을 ‘베타리더의 의견’에 따라 적극 반영한 건 여전합니다!
단순한 문법 암기와 코딩 따라하기에 지쳤다면 새롭게 돌아온 친절한 ‘혼공 씨’와 함께 C 언어라는, 프로그래밍 언어의 근본을 경험해 보세요. 책의 첫 페이지를 펼치고 마지막 페이지를 덮을 때까지, 혼자서도 충분히 C 언어를 배울 수 있다는 자신감과 확신이 계속 들 것입니다!
저자소개
컴퓨터공학을 전공하고 16년간 학교와 기업체에서 C 언어 전문 강사로 활동했으며, 현재는 유튜브 비디오 크리에이터로 활동 중이다. 평소에는 어린 두 아이와 눈높이를 맞추는 자상함이 있지만, 강의할 때 뿜어 나오는 카리스마는 수강생을 C 언어의 세계로 빠져들게 한다. 오프라인 강의에서 보여줬던 쉽고 깔끔한 강의, 전문적이고 기본기를 다져주는 강의, 집중력을 이끌어내는 명쾌한 강의를 이제는 유튜브를 통해 쉽게 수강할 수 있다.
목차
Chapter 01 프로그램 만들기
01-1 프로그램과 C 언어
__C 언어의 탄생
__C 언어의 장점
01-2 컴파일과 컴파일러 사용법
__비주얼 스튜디오 설치하기
__프로젝트 생성과 소스 파일 작성
__소스 파일 컴파일하기
__실행 파일 실행하기
[좀 더 알아보기] 프로젝트 템플릿 만들기
[6가지 키워드로 끝내는 핵심 포인트]
[그림으로 정리하는 컴파일 과정 3단계]
[확인 문제]
Chapter 02 상수와 데이터 출력
02-1 C 프로그램의 구조와 데이터 출력 방법
__프로그램과 main 함수 구조
__문자열 출력 : 출력 함수(printf)의 사용법
__제어 문자 출력
__정수와 실수 출력
[5가지 키워드로 끝내는 핵심 포인트]
[표로 정리하는 핵심 포인트]
[확인 문제]
02-2 상수와 데이터 표현 방법
__정수 상수 표현법
__실수 상수 표현법
__문자와 문자열 상수 표현법
__상수가 컴파일된 후의 비트 형태
__정수 상수가 컴파일된 후의 비트 형태
__실수 상수가 컴파일된 후의 비트 형태
[좀 더 알아보기] 실수 상수의 오차
[7가지 키워드로 끝내는 핵심 포인트]
[표로 정리하는 핵심 포인트]
[확인 문제]
Chapter 03 변수와 데이터 입력
03-1 변수
__변수 선언 방법
__정수 자료형
__unsigned 정수 자료형
__실수 자료형
__문자열 저장
__const를 사용한 변수
__예약어와 식별자
[6가지 키워드로 끝내는 핵심 포인트]
[표로 정리하는 핵심 포인트]
[확인 문제]
03-2 데이터 입력
__scanf 함수의 사용법
__문자와 문자열의 입력
[좀 더 알아보기] 비정상 종료되는 경우
[4가지 키워드로 끝내는 핵심 포인트]
[표로 정리하는 핵심 포인트]
[확인 문제]
Chapter 04 연산자
04-1 산술 연산자, 관계 연산자, 논리 연산자
__산술 연산자와 대입 연산자
__증감 연산자
__관계 연산자
__논리 연산자
__연산의 결괏값을 처리하는 방법
[좀 더 알아보기] 연산식은 컴퓨터 내부에서 어떻게 처리될까요?
[좀 더 알아보기] CPU의 메모리와 우리가 알고 있는 메모리(RAM)는 어떻게 다른가요?
[5가지 키워드로 끝내는 핵심 포인트]
[표로 정리하는 핵심 포인트]
[확인 문제]
04-2 그 외 유용한 연산자
__형 변환 연산자
__sizeof 연산자
__복합대입 연산자
__콤마 연산자
__조건 연산자
__비트 연산자
__연산자 우선순위와 연산 방향
[4가지 키워드로 끝내는 핵심 포인트]
[표로 정리하는 핵심 포인트]
[확인 문제]
[도전 실전 예제]
Chapter 05 선택문
05-1 if문
__if문의 기본 형식 151
__if ~ else문 153
__if ~ else if ~ else문 156
[4가지 키워드로 끝내는 핵심 포인트]
[표로 정리하는 핵심 포인트]
[확인 문제]
05-2 if문 활용과 switch ~ case문
__if문 중첩
__else 결합 문제
__switch ~ case문
[좀 더 알아보기] switch ~ case문을 if문으로 바꿔 보기
[4가지 키워드로 끝내는 핵심 포인트]
[표로 정리하는 핵심 포인트]
[확인 문제]
[도전 실전 예제]
Chapter 06 반복문
06-1 while문, for문, do ~ while문
__while문
__for문
__do ~ while문
[3가지 키워드로 끝내는 핵심 포인트]
[표로 정리하는 핵심 포인트]
[확인 문제]
06-2 반복문 활용
__중첩 반복문
__break와 continue 분기문
[3가지 키워드로 끝내는 핵심 포인트]
[표로 정리하는 핵심 포인트]
[확인 문제]
[도전 실전 예제]
Chapter 07 함수
07-1 함수의 작성과 사용
__함수 정의
__함수 호출과 반환
__함수 선언
[4가지 키워드로 끝내는 핵심 포인트]
[표로 정리하는 핵심 포인트]
[확인 문제]
07-2 여러 가지 함수 유형
__매개변수가 없는 함수
__반환값이 없는 함수
__매개변수와 반환값이 모두 없는 함수
__재귀호출 함수
__재귀호출과 반복문의 차이점
[5가지 키워드로 끝내는 핵심 포인트]
[표로 정리하는 핵심 포인트]
[확인 문제]
[도전 실전 예제]
Chapter 08 배열
08-1 배열의 선언과 사용
__배열의 선언
__배열 초기화
__배열과 반복문
__sizeof 연산자를 활용한 배열 처리
[4가지 키워드로 끝내는 핵심 포인트]
[표로 정리하는 핵심 포인트]
[확인 문제]
08-2 문자를 저장하는 배열
__char형 배열의 선언과 초기화
__문자열 대입
__문자열 전용 입출력 함수 : gets, puts
[좀 더 알아보기] 문자열의 끝에 널 문자가 없다면?
[4가지 키워드로 끝내는 핵심 포인트]
[표로 정리하는 핵심 포인트]
[확인 문제]
[도전 실전 예제]
Chapter 09 포인터
09-1 포인터의 기본 개념
__메모리의 주소
__주소 연산자
__포인터와 간접 참조 연산자
__여러 가지 포인터 사용해 보기
__const를 사용한 포인터
[3가지 키워드로 끝내는 핵심 포인트]
[표로 정리하는 핵심 포인트]
[확인 문제]
09-2 포인터 완전 정복을 위한 포인터 이해하기
__주소와 포인터의 차이
__주소와 포인터의 크기
__포인터의 대입 규칙
__포인터를 사용하는 이유
[4가지 키워드로 끝내는 핵심 포인트]
[표로 정리하는 핵심 포인트]
[확인 문제]
[도전 실전 예제]
Chapter 10 배열과 포인터
10-1 배열과 포인터의 관계
__배열명으로 배열 요소 사용하기
__배열명 역할을 하는 포인터
__배열명과 포인터의 차이
__포인터의 뺄셈과 관계 연산
[5가지 키워드로 끝내는 핵심 포인트]
[표로 정리하는 핵심 포인트]
[확인 문제]
10-2 배열을 처리하는 함수
__배열의 값을 출력하는 함수
__배열 요소의 개수가 다른 배열도 출력하는 함수
__배열에 값을 입력하는 함수
[좀 더 알아보기] 함수의 매개변수 자리에 배열을 선언하는 경우
[3가지 키워드로 끝내는 핵심 포인트]
[표로 정리하는 핵심 포인트]
[확인 문제]
[도전 실전 예제]
Chapter 11 문자
11-1 아스키 코드 값과 문자 입출력 함수
__아스키 코드
__scanf 함수를 사용한 문자 입력
__getchar, putchar 함수
[5가지 키워드로 끝내는 핵심 포인트]
[표로 정리하는 핵심 포인트]
[확인 문제]
11-2 버퍼를 사용하는 입력 함수
__scanf 함수가 문자를 입력하는 과정
__scanf 함수 반환값 활용
__getchar 함수를 사용한 문자열 입력
__입력 버퍼 지우기
[3가지 키워드로 끝내는 핵심 포인트]
[표로 정리하는 핵심 포인트]
[확인 문제]
[도전 실전 예제]
Chapter 12 문자열
12-1 문자열과 포인터
__문자열 상수 구현 방법
__char 포인터로 문자열 사용
__scanf 함수를 사용한 문자열 입력
__gets 함수를 사용한 문자열 입력
__fgets 함수를 사용한 문자열 입력
__표준 입력 함수의 버퍼 공유 문제
__문자열을 출력하는 puts, fputs 함수
[좀 더 알아보기] 직접 구현해 보는 gets 함수
[4가지 키워드로 끝내는 핵심 포인트]
[표로 정리하는 핵심 포인트]
[확인 문제]
12-2 문자열 연산 함수
__문자열을 대입하는 strcpy 함수
__원하는 개수의 문자만을 복사하는 strncpy 함수
__문자열을 붙이는 strcat, strncat 함수
__문자열 길이를 계산하는 strlen 함수
__문자열을 비교하는 strcmp, strncmp 함수
__연산 함수 직접 구현
[4가지 키워드로 끝내는 핵심 포인트]
[표로 정리하는 핵심 포인트]
[확인 문제]
[도전 실전 예제]
Chapter 13 변수의 영역과 데이터 공유
13-1 변수 사용 영역
__지역 변수
__블록 안에서 사용하는 지역 변수
__전역 변수
__정적 지역 변수
__레지스터 변수
[4가지 키워드로 끝내는 핵심 포인트]
[표로 정리하는 핵심 포인트]
[확인 문제]
13-2 함수의 데이터 공유 방법
__값을 복사해서 전달하는 방법
__주소를 전달하는 방법
__주소를 반환하는 함수
[3가지 키워드로 끝내는 핵심 포인트]
[표로 정리하는 핵심 포인트]
[확인 문제]
[도전 실전 예제]
Chapter 14 다차원 배열과 포인터 배열
14-1 다차원 배열
__2차원 배열 선언과 요소 사용
__2차원 배열 초기화
__2차원 char 배열
__2차원 char 배열 초기화
__3차원 배열
[4가지 키워드로 끝내는 핵심 포인트]
[표로 정리하는 핵심 포인트]
[확인 문제]
14-2 포인터 배열
__포인터 배열 선언과 사용
__2차원 배열처럼 활용하는 포인터 배열
[3가지 키워드로 끝내는 핵심 포인트]
[표로 정리하는 핵심 포인트]
[확인 문제]
[도전 실전 예제]
Chapter 15 응용 포인터
15-1 이중 포인터와 배열 포인터
__이중 포인터 개념
__이중 포인터 활용 1 : 포인터 값을 바꾸는 함수의 매개변수
__이중 포인터 활용 2 : 포인터 배열을 매개변수로 받는 함수
__배열 요소의 주소와 배열의 주소
__2차원 배열과 배열 포인터
__2차원 배열의 요소를 참조하는 원리
[5가지 키워드로 끝내는 핵심 포인트]
[표로 정리하는 핵심 포인트]
[확인 문제]
15-2 함수 포인터와 void 포인터
__함수 포인터의 개념
__함수 포인터의 활용
__void 포인터
[4가지 키워드로 끝내는 핵심 포인트]
[표로 정리하는 핵심 포인트]
[확인 문제]
[도전 실전 예제]
Chapter 16 메모리 동적 할당
16-1 동적 할당 함수
__malloc, free 함수
__동적 할당 영역을 배열처럼 쓰기
__기타 동적 할당 함수
[좀 더 알아보기] 프로그램이 사용하는 메모리 영역과 그 특징
[5가지 키워드로 끝내는 핵심 포인트]
[표로 정리하는 핵심 포인트]
[확인 문제]
16-2 동적 할당 저장 공간의 활용
__동적 할당을 사용한 문자열 처리
__동적 할당 영역에 저장한 문자열을 함수로 처리하는 예
__main 함수의 명령행 인수 사용
[3가지 키워드로 끝내는 핵심 포인트]
[표로 정리하는 핵심 포인트]
[확인 문제]
[도전 실전 예제]
Chapter 17 사용자 정의 자료형
17-1 구조체
__구조체 선언과 멤버 사용
__다양한 구조체 멤버
__구조체 변수의 초기화와 대입 연산
__구조체 변수를 함수 매개변수에 사용하기
[4가지 키워드로 끝내는 핵심 포인트]
[표로 정리하는 핵심 포인트]
[확인 문제]
17-2 구조체 활용, 공용체, 열거형
__구조체 포인터와 -> 연산자
__구조체 배열
__구조체 배열을 처리하는 함수
__자기 참조 구조체
__공용체
__열거형
__typedef를 사용한 형 재정의
[5가지 키워드로 끝내는 핵심 포인트]
[표로 정리하는 핵심 포인트]
[확인 문제]
[도전 실전 예제]
Chapter 18 파일 입출력
18-1 파일 개방과 입출력
__파일 개방과 폐쇄
__스트림 파일과 파일 포인터
__문자 입력 함수: fgetc
__문자 출력 함수: fputc
__기본적으로 개방되는 표준 입출력 스트림 파일
__텍스트 파일과 바이너리 파일
__+ 개방 모드, fseek, rewind, feof 함수
[4가지 키워드로 끝내는 핵심 포인트]
[표로 정리하는 핵심 포인트]
[확인 문제]
18-2 다양한 파일 입출력 함수
__한 줄씩 입출력하는 함수: fgets, fputs
__다양한 형태로 입출력하는 함수: fscanf, fprintf
__스트림 파일의 버퍼 공유 문제와 fflush 함수
__fread, fwrite 함수
[6가지 키워드로 끝내는 핵심 포인트]
[표로 정리하는 핵심 포인트]
[확인 문제]
[도전 실전 예제]
Chapter 19 전처리와 분할 컴파일
19-1 전처리 지시자
__파일을 포함하는 #include
__매크로명을 만드는 #define
__#define을 사용한 매크로 함수
__이미 정의된 매크로
__매크로 연산자 #과 ##
__조건부 컴파일 지시자
[좀 더 알아보기] #pragma 지시자
[4가지 키워드로 끝내는 핵심 포인트]
[표로 정리하는 핵심 포인트]
[확인 문제]
19-2 분할 컴파일
__분할 컴파일 방법
__분할 컴파일에서 extern과 static의 용도
__헤더 파일의 필요성과 중복 문제 해결 방법
[6가지 키워드로 끝내는 핵심 포인트]
[표로 정리하는 핵심 포인트]
[확인 문제]
[도전 실전 예제]
부록 A 아스키 코드표
부록 B 선택 정렬 알고리즘
부록 C 여기서 잠깐 모음
__확인 문제 정답
__찾아보기