책소개
C 프로그래밍 시작을 위한 최고의 입문서!
파이썬 / 아두이노 / 라즈베리 파이까지 레벨업!
프로그래머 대부분이 프로그래밍을 처음 시작할 때 먼저 접하게 되는 것이 C 언어다. 프로그래머가 되기 위해서 반드시 C 언어가 필요한가에 대한 질문에 그렇지 않다고 말하는 사람도 있을 수 있지만, C 언어를 모르면서 프로그래밍 고수가 되고 IoT를 해 나간다는 것은 그리 쉽지 않다. 또한, 요즘 각광받고 있는 인공지능은 파이썬을 통해 접근할 수 있다. 이 책에서는 기본적인 파이썬 프로그래밍도 학습하고 C 언어와는 조금 다른 객체지향적 개념의 클래스도 학습하도록 구성하였다. 파이썬은 인공지능뿐 아니라 3D 애니메이션, 오픈소스, 라즈베리 파이 분야와 구글, 페이스북, 다음카카오 등 현업에서도 폭넓게 이용되고 있는 언어다.
목차
Part 1. 입문 오늘부터 나는 C 프로그래머!
001 C 프로그램 시작하기
002 변수형 개념 배우기
003 상수형 개념 배우기
004 연산자 개념 배우기
005 조건문 개념 배우기(if~else)
006 순환문 개념 배우기(for)
007 문자열 개념 배우기
008 함수 개념 배우기
009 주석 개념 배우기
010 컴파일 개념 배우기
Part 2. 초급 C 프로그래밍 기초 다지기
011 문자형 변수 이해하기(char)
012 정수형 변수 이해하기(int)
013 실수형 변수 이해하기(double)
014 논리형 변수 이해하기(bool)
015 문자열형 변수 이해하기(char*)
016 문자형 상수 이해하기(char)
017 정수형 상수 이해하기(int)
018 실수형 상수 이해하기(double)
019 논리형 상수 이해하기(bool)
020 문자열형 상수 이해하기(char)
021 대입 연산자 이해하기(=)
022 부호 연산자 이해하기(+, -)
023 사칙 연산자 이해하기(+, -, *, /)
024 증감 연산자 이해하기(++, --)
025 관계 연산자 이해하기
026 논리 연산자 이해하기(||, &&, !)
027 조건 연산자 이해하기(?:)
028 쉼표 연산자 이해하기(,)
029 비트 연산자 이해하기
030 캐스트 연산자 이해하기
031 sizeof 연산자 이해하기
032 중첩 조건문 이해하기(if~else)
033 중첩 순환문 이해하기(for~continue~break)
034 조건 선택문 이해하기(switch~case~default)
035 조건 순환문 이해하기 1(while~continue~break)
036 조건 순환문 이해하기 2(do~while~continue~break)
037 무조건 분기문 이해하기
038 문자열 이해하기
039 배열 이해하기
040 메모리 이해하기
041 포인터 이해하기
042 널(NULL) 문자 이해하기
043 구조체 이해하기
044 공용체 이해하기
045 열거형 이해하기
046 데이터형 정의하기
047 함수와 인수 이해하기
048 변수의 범위 이해하기
049 #include 문 이해하기
050 매크로 이해하기
Part 3. 중급 C 프로그래밍 레디 고!
051 문자 입력받기(getch)
052 문자 출력하기(putch)
053 정수값 입력받기(scanf)
054 정수값 출력하기(printf)
055 문자열 입력받기(gets)
056 문자열 출력하기(puts)
057 문자열 복사하기(strcpy)
058 문자열을 복사하는 함수 만들기
059 문자열을 대/소문자로 구분하여 비교하기(strcmp)
060 문자열을 비교하는 함수 만들기
061 문자열을 일정 크기만큼 비교하기(strncmp)
062 문자열 연결하기(strcat)
063 문자열의 길이 구하기(strlen)
064 문자열 검색하기(strstr)
065 문자열 중에서 문자 검색하기(strchr)
066 문자열 중에서 일치되는 첫 문자의 위치 구하기(strcspn)
067 문자열 중에서 일치되지 않는 첫 문자의 위치 구하기(strspn)
068 문자열을 구분자로 분리하기 1(strtok)
069 문자열을 구분자로 분리하기 2(strpbrk)
070 문자열을 특정 문자로 채우기(strset)
071 부분 문자열을 특정 문자로 채우기(strnset)
072 문자열을 대문자로 변환하기(strupr)
073 문자열을 소문자로 변환하기(strlwr)
074 문자열을 거꾸로 뒤집기(strrev)
075 문자열을 중복 생성하기(strdup)
076 문자열을 형식화하기(sprintf)
077 문자열을 정수로 변환하기 1(atoi)
078 문자열을 정수로 변환하기 2(atol)
079 문자열을 정수로 변환하기 3(strtol)
080 문자열을 정수로 변환하기 4(strtoul)
081 문자열을 실수로 변환하기 1(atof)
082 문자열을 실수로 변환하기 2(strtod)
083 정수를 문자열로 변환하기 1(itoa)
084 정수를 문자열로 변환하기 2(ltoa)
085 정수를 문자열로 변환하기 3(_ultoa)
086 실수를 문자열로 변환하기 1(fcvt)
087 실수를 문자열로 변환하기 2(ecvt)
088 실수를 문자열로 변환하기 3(gcvt)
089 문자가 알파벳인지 검사하기(isalpha)
090 문자가 숫자인지 검사하기(isdigit)
091 문자가 알파벳 또는 숫자인지 검사하기(isalnum)
092 문자가 대문자인지 검사하기(isupper)
093 문자가 소문자인지 검사하기(islower)
094 문자가 공백, 탭문자 또는 개행문자인지 검사하기(isspace)
095 문자열에서 앞·뒤 2바이트씩 교환하기(swab)
096 메모리 할당하기(malloc)
097 메모리를 블록 단위로 할당하기(calloc)
098 메모리 해제하기(free)
099 메모리 재할당하기(realloc)
100 메모리 복사하기(memcpy)
101 메모리 비교하기(memcmp)
102 메모리 이동하기(memmove)
103 메모리 채우기(memset)
104 메모리를 복사하는 함수 만들기
105 메모리를 이동하는 함수 만들기
106 포인터 사용하기
107 포인터를 함수에서 사용하기
108 포인터 배열 사용하기
109 포인터 배열을 함수에서 사용하기
110 1차원 배열 사용하기
111 1차원 배열의 포인터 사용하기
112 1차원 배열을 함수에서 사용하기
113 2차원 배열 사용하기
114 2차원 배열의 포인터 사용하기
115 2차원 배열을 함수에서 사용하기
116 3차원 배열 사용하기
117 3차원 배열의 포인터 사용하기
118 3차원 배열을 함수에서 사용하기
119 구조체 사용하기
120 구조체 포인터 사용하기
121 구조체를 함수에서 사용하기
122 구조체 배열 사용하기
123 구조체 배열 포인터 사용하기
124 구조체 배열을 함수에서 사용하기
125 구조체의 길이를 구하고 초기화하기
126 공용체 사용하기
127 공용체를 함수에서 사용하기
128 void형 포인터 사용하기
129 void형 포인터를 함수에서 사용하기
130 포인터의 포인터 사용하기
131 포인터의 포인터를 함수에서 사용하기
132 함수 포인터 사용하기
133 함수 포인터를 배열에서 사용하기
134 함수 포인터를 함수에서 사용하기
135 main() 함수 원형 사용하기
136 파일 생성하기(fopen)
137 파일에 한 문자 쓰기(fputc)
138 파일에서 한 문자 읽기(fgetc)
139 파일에 문자열 쓰기(fputs)
140 파일에서 문자열 읽기(fgets)
141 파일에 형식화된 문자열 쓰기(fprintf)
142 파일에서 형식화된 문자열 읽기(fscanf)
143 파일의 버퍼 비우기(fflush)
144 파일 포인터의 현재 위치 구하기 1(ftell)
145 파일 포인터를 처음으로 이동하기 1(fseek)
146 파일 포인터를 처음으로 이동하기 2(rewind)
147 파일 포인터를 끝으로 이동하기(fseek)
148 파일 포인터를 임의의 위치로 이동하기(fseek)
149 파일의 길이 구하기(fseek)
150 파일 포인터의 현재 위치 구하기 2(fgetpos)
151 파일 포인터의 현재 위치 설정하기(fsetpos)
152 파일 닫기(fclose)
153 파일의 끝에 도달했는지 검사하기(feof)
154 파일 읽기/쓰기 시 에러 검사하기(ferror)
155 파일 처리 시 발생된 에러 표시하기(perror)
156 임시 파일 이름 만들기(tmpnam)
157 파일이 존재하는지 확인하기(_access)
158 파일 이름 변경하기(rename)
159 파일 속성 변경하기(_chmod)
160 파일 삭제하기(remove)
161 디렉터리 생성하기(_mkdir)
162 디렉터리 삭제하기(_rmdir)
163 현재 작업중인 디렉터리 구하기(_getcwd)
164 현재 작업중인 디렉터리 변경하기(_chdir)
165 현재 작업중인 드라이브 구하기(_getdrive)
166 현재 작업중인 드라이브 변경하기(_chdrive)
167 표준 입·출력 스트림 사용하기(stdin, stdout)
168 현재까지 경과된 초의 수 구하기(time)
169 날짜 및 시간 구하기 1(localtime)
170 날짜 및 시간 구하기 2(_ftime)
171 세계 표준 시 구하기(gmtime)
172 날짜 및 시간을 문자열로 변환하기(ctime)
173 날짜 및 시간을 더하거나 빼기(mktime)
174 날짜 및 시간의 차이 구하기(difftime)
175 날짜 및 시간을 미국식으로 변환하기(asctime)
176 날짜 및 시간을 형식화하기(strftime)
177 삼각 함수 싸인 값 구하기(sin)
178 삼각 함수 아크 싸인 값 구하기(asin)
179 삼각 함수 x/y에 대한 아크 탄젠트 값 구하기(atan2)
180 지수 함수 지수값 구하기(exp)
181 로그 함수 자연 로그값 구하기(log)
182 로그 함수 밑수를 10으로 하는 로그값 구하기(log10)
183 제곱근 구하기(sqrt)
184 절대값 구하기(abs)
185 주어진 값보다 작지 않은 최소 정수값 구하기(ceil)
186 주어진 값보다 크지 않은 최대의 정수값 구하기(floor)
187 주어진 값을 정수와 소수로 분리하기(modf)
188 x의 y승 구하기(pow)
189 난수 구하기(srand, rand)
190 숫자 정렬하기(qsort)
191 이진 검색 사용하기(bsearch)
192 매크로 상수 정의하기
193 매크로 함수 정의하기 1
194 매크로 함수 정의하기 2
195 매크로 상수가 선언되었는지 검사하기
196 매크로 컴파일 에러 출력하기
197 매크로 상수의 값을 검사하기
198 매크로 상수의 선언을 취소하기
199 경고 에러를 발생시키지 않기
200 내장된 매크로 사용하기
Part 4. 활용 C를 말하다
201 scanf() 함수 100% 활용하기(scanf)
202 printf() 함수 100% 활용하기(printf)
203 삼각형 출력하기(for)
204 값을 입력받아 홀수/짝수 구분하기(%)
205 1~100까지 홀수의 합 구하기
206 21~50 범위의 난수 발생시키기
207 변수의 번지 출력하기(& 연산자)
208 정수값을 16진수 문자열로 변환하기(itoa)
209 2진수/16진수 문자열을 정수값으로 변환하기(strtol)
210 2진수 문자열을 16진수 문자열로 변환하기(strtol, itoa)
211 소문자를 대문자로 변환하기
212 비트 연산을 사용하여 변수값을 0으로 만들기
213 비트 쉬프트 연산을 사용하여 곱셈 구현하기
214 비트 쉬프트 연산을 사용하여 나눗셈 구현하기
215 문자열에서 특정 문자열의 인덱스 구하기(strstr)
216 문자열을 콤마와 공백으로 분리하기(strtok)
217 문자열을 공백으로 분리하여 여러 개의 문자열로 만들기(strtok)
218 문자열에서 숫자만 추출해내기(isdigit)
219 문자열에서 알파벳만 추출해내기(isalpha)
220 문자열에서 한글만 추출해내기
221 알파벳이 아닌 첫 문자의 위치 검출하기(strspn)
222 문자열에서 숫자가 시작되는 위치 추출하기(strcspn)
223 문자열을 특정 문자 위치에서 잘라내기(strchr)
224 문자열의 좌우 공백 제거하기(isspace)
225 문자열의 좌우 특정 문자들 제거하기(strspn, strcspn)
226 문자열을 NULL로 채우기(strset)
227 문자열의 첫 글자를 대문자로 변환하기
228 문자열에서 특정 위치의 문자 교체하기(strnset)
229 문자열에 대한 임시 저장소 만들기(strdup)
230 메모리를 1MB 할당하고 해제하기(malloc, free)
231 메모리를 100MB 할당하고 해제하기
232 void형 포인터를 사용한 다양한 배열 복사하기
233 텍스트 파일을 한 줄씩 쓰기(fopen, fputs, fclose)
234 텍스트 파일을 한 줄씩 읽기(fgets)
235 텍스트 파일 쓰기(fwrite)
236 텍스트 파일 읽기(fread)
237 이진 파일 쓰기(fwrite)
238 이진 파일 읽기(fread)
239 파일을 다른 디렉터리로 이동하기(rename)
240 파일 복사하기(fread, fwrite)
241 두 개의 파일 합치기
242 파일에서 특정 문자열 검색하기(strstr)
243 파일에서 특정 문자열 교체하기
244 연/월/일 시:분:초 출력하기(time, localtime)
245 출생일로부터 오늘까지의 경과일 수 구하기(mktime)
246 각 달의 마지막 날짜 구하기(mktime)
247 D-Day 구하기(mktime)
248 오늘 날짜로부터 크리스마스까지의 남은 시간 구하기
249 오늘 날짜에 임의의 날짜 더하고 빼기
250 크리스마스의 요일 구하기
251 세계 표준 시와 국내 표준 시의 시간 차 구하기(localtime)
252 5초간 지연하는 함수 구현하기(clock)
253 두 시간 간의 차이 구하기(mktime)
254 두 날짜 간의 차이 구하기(mktime)
255 올해의 경과된 날짜 수 구하기(localtime)
256 올해의 경과된 주의 수 구하기(strftime)
257 오늘의 요일 구하기
258 오전/오후 표시하기
259 AM/PM 표시하기
260 문자열로 된 날짜를 time_t 형식으로 변환하기(atoi, mktime)
261 문자열로 된 날짜를 struct tm 형식으로 변환하기
262 날짜 및 시간을 다양한 방법으로 출력하기(_ftime)
263 야구 게임 만들기
264 스택 구현하기
265 큐 구현하기
266 단일 링크드 리스트 구현하기
267 이중 링크드 리스트 구현하기
268 주소록 구현하기
269 TCP/IP 이해하기
270 TCP/IP 서버/클라이언트 프로그램 만들기
Part 5. 실무 파이썬 프로그래밍
271 프로그램 시작하기
272 변수형 사용하기
273 연산자 사용하기
274 값을 입력받고 출력하기
275 조건문 사용하기(if~else)
276 순환문 사용하기(for, while)
277 파이썬 문자열 사용하기
278 리스트(배열) 사용하기
279 튜플 사용하기
280 딕셔너리 사용하기
281 날짜 및 시간 구하기
282 함수 사용하기
283 함수 고급기법 사용하기
284 텍스트 파일 쓰기
285 텍스트 파일 읽기
286 바이너리 파일 쓰기
287 바이너리 파일 읽기
288 클래스 이해하기
289 클래스 정적함수 이해하기
290 클래스 상속과 오버라이딩 이해하기
291 다중 파일 사용하기
292 역삼각형 출력하기
293 1에서 100까지의 합계 구하기
294 30에서 50 사이의 난수 만들기
295 2진수와 16진수 연산하기
296 TCP/IP 소켓 서버/클라이언트
297 HTTP 사용하기
298 FTP 클라이언트 만들기
299 SMTP 메일 클라이언트 만들기
300 MySQL 데이터베이스 사용하기
Appendix. 부록
A. 아두이노 A.1 아두이노 환경 설정하기
A.2 아두이노 프로그래밍
A.3 아두이노-LED 깜빡이기
A.4 아두이노-LED 순차 점멸
A.5 아두이노-LED 피아노 건반처럼 깜빡이기
B. 라즈베리 파이
B.1 라즈베리 파이-리눅스 운영체제 설치하기
B.2 라즈베리 파이-설정하기
B.3 라즈베리 파이-웹서버 Apache와 PHP 설치하기
B.4 라즈베리 파이-데이터베이스 MySQL 설치하기
B.5 라즈베리 파이-테스트 DB 생성하기
B.6 라즈베리 파이-PHP와 MySQL 연동하기
B.7 라즈베리 파이-TOMCAT 설치와 JSP 연동하기
B.8 라즈베리 파이-LED 구동하기
B.9 라즈베리 파이-카메라 제어하기
B.10 라즈베리 파이-동영상 녹화하기