저작권 안내- 책 또는 웹사이트의 내용을 복제하여 다른 곳에 게시하는 것을 금지합니다.
- 책 또는 웹사이트의 내용을 발췌, 요약하여 강의 자료, 발표 자료, 블로그 포스팅 등으로 만드는 것을 금지합니다.
책 구입
전자책 구입
목차
- Unit 1. 소프트웨어 교육과 C 언어
- 컴퓨터와 프로그램
- 문제 해결을 위한 과학적 사고
- 알고리즘과 코딩
- C 언어란?
- 코딩 도장을 학습하는 방법
- Unit 2. Visual Studio 설치하기
- Unit 3. Hello, world!로 시작하기
- 새 프로젝트 만들기
- 프로젝트에 C 언어 소스 파일 추가하기
- Hello, world! 출력하기
- 서식 지정자 사용하기
- 심사 사이트 사용하기
- 퀴즈
- 연습문제: 문자열 출력하기
- 연습문제: 서식 지정자 사용하기
- 심사문제: 문자열 출력하기
- 심사문제: 서식 지정자 사용하기
- Unit 4. 기본 문법 알아보기
- 세미콜론
- 주석
- 중괄호
- 들여쓰기
- 핵심 정리
- Q & A
- Unit 5. 변수 만들기
- 변수를 만들고 값 저장하기
- 변수 여러 개를 한 번에 선언하기
- 변수를 선언하면서 초기화하기
- 퀴즈
- 연습문제: 변수 여러 개를 선언하면서 값 초기화하기
- 심사문제: 변수를 선언하고 값 할당하기
- Unit 6. 디버거 사용하기
- 중단점 사용하기
- Unit 7. 정수 자료형 사용하기
- 정수형 변수 선언하기
- 오버플로우와 언더플로우 알아보기
- 자료형 크기 구하기
- 최솟값과 최댓값 표현하기
- 크기가 표시된 정수 자료형 사용하기
- 퀴즈
- 연습문제: 정수형 변수 선언과 오버플로우
- 연습문제: 자료형 크기 구하기
- 연습문제: 최댓값 표현하기
- 연습문제: 크기가 표시된 정수 자료형 사용하기
- 심사문제: 정수형 변수 선언과 오버플로우
- 심사문제: 자료형 크기 구하기
- 심사문제: 최솟값 표현하기
- 심사문제: 크기가 표시된 정수 자료형 사용하기
- Unit 8. 실수 자료형 사용하기
- 실수형 변수 선언하기
- 자료형 크기 구하기
- 최솟값과 최댓값 표현하기
- 오버플로우와 언더플로우 알아보기
- 퀴즈
- 연습문제: 실수형 변수 선언하기
- 연습문제: 자료형 크기 구하기
- 연습문제: 최솟값과 최댓값 표현하기
- 연습문제: 언더플로우
- 심사문제: 실수형 변수 선언과 자료형 크기 구하기
- 심사문제: 최솟값과 최댓값 표현하기
- 심사문제: 오버플로우
- 핵심 정리
- Q & A
- Unit 9. 문자 자료형 사용하기
- 문자 변수 선언하기
- 문자로 연산하기
- 제어 문자 사용하기
- 퀴즈
- 연습문제: 제어 문자 사용하기
- 연습문제: 정수 숫자를 문자로 변환하기
- 심사문제: 제어 문자 사용하기
- 심사문제: 알파벳 소문자를 대문자로 변환하기
- Unit 10. 상수 사용하기
- 리터럴 사용하기
- 상수 사용하기
- 정수 리터럴 접미사 사용하기
- 실수 리터럴 접미사 사용하기
- 퀴즈
- 연습문제: 리터럴 사용하기
- 연습문제: 상수 사용하기
- 심사문제: 리터럴 사용하기
- 심사문제: 상수 사용하기
- Unit 11. 입력 값을 변수에 저장하기
- 정수 입력받기
- 한 번에 정수 두 개 입력받기
- 실수 입력받기
- 문자 입력받기
- 퀴즈
- 연습문제: 한 번에 정수 세 개 입력받기
- 심사문제: 정수, 실수, 문자 입력받기
- 핵심 정리
- Q & A
- Unit 12. 덧셈, 뺄셈하기
- 덧셈, 뺄셈하기
- 변수 하나에서 값을 더하거나 빼기
- 퀴즈
- 연습문제: 덧셈, 뺄셈하기
- 심사문제: 덧셈, 뺄셈하기
- Unit 13. 증가, 감소 연산자 사용하기
- 변수의 값을 1 증가, 감소시키기
- 실수 자료형에 증감 연산자 사용하기
- 문자 자료형에 증감 연산자 사용하기
- 증감 연산자의 위치에 따른 차이점 알아보기
- 퀴즈
- 연습문제: 증가, 감소 연산자 사용하기
- 심사문제: 증가, 감소 연산자 사용하기
- Unit 14. 곱셈, 나눗셈하기
- 곱셈, 나눗셈하기
- 변수 하나에서 값을 곱하거나 나누기
- 퀴즈
- 연습문제: 삼각형의 넓이 구하기
- 심사문제: 원의 넓이 구하기
- Unit 15. 나머지 연산하기
- 나머지 연산하기
- 변수 하나에서 나머지 연산하기
- 퀴즈
- 연습문제: 3의 배수인지 확인하기
- 심사문제: 정수의 각 자릿수를 역순으로 출력하기
- Unit 16. 자료형의 확장과 축소 알아보기
- 자료형의 확장 알아보기
- 자료형의 축소 알아보기
- 퀴즈
- 연습문제: 문자 출력하기
- 심사문제: 실수를 정수로 변환하기
- 핵심 정리
- Q & A
- Unit 17. if 조건문으로 특정 조건일 때 코드 실행하기
- if 조건문 사용하기
- if 조건문과 세미콜론
- if 조건문에서 중괄호 생략하기
- if 조건문에서 실수와 문자 비교하기
- 사용자가 입력한 값에 if 조건문 사용하기
- 퀴즈
- 연습문제: if 조건문 사용하기
- 심사문제: 청소년 콘텐츠 관람 제한하기
- Unit 18. else를 사용하여 두 방향으로 분기하기
- else 사용하기
- else와 세미콜론
- else에서 중괄호 생략하기
- if 조건문의 동작 방식 알아보기
- 조건식을 여러 개 지정하기
- 퀴즈
- 연습문제: else 사용하기
- 연습문제: 합격 여부 판단하기
- 심사문제: else 사용하기
- 심사문제: 합격 여부 판단하기
- Unit 19. else if를 사용하여 여러 방향으로 분기하기
- else if 사용하기
- if, else if, else를 모두 사용하기
- 퀴즈
- 연습문제: if, else if, else를 모두 사용하기
- 심사문제: 교통카드 시스템 만들기
- 핵심 정리
- Q & A
- Unit 20. 비교 연산자와 삼항 연산자 사용하기
- 비교 연산자 사용하기
- 삼항 연산자 사용하기
- if 조건문과 비교 연산자 사용하기
- 함수 안에서 삼항 연산자 사용하기
- 퀴즈
- 연습문제: 비교 연산자 사용하기
- 연습문제: 삼항 연산자 사용하기
- 심사문제: 비교 연산자 사용하기
- 심사문제: 삼항 연산자 사용하기
- Unit 21. 논리 연산자 사용하기
- AND 연산자 사용하기
- OR 연산자 사용하기
- NOT 연산자 사용하기
- 조건식과 논리 연산자 사용하기
- if 조건문과 논리 연산자 사용하기
- 삼항 연산자에 논리 연산자 사용하기
- 퀴즈
- 연습문제: 논리 연산자 사용하기
- 심사문제: 논리 연산자 사용하기
- Unit 22. 불 자료형 사용하기
- stdbool.h 헤더 파일 사용하기
- 불 자료형 크기 알아보기
- 불 자료형과 논리 연산자 사용하기
- true, false를 문자열로 출력하기
- if 조건문에서 불 자료형 사용하기
- 퀴즈
- 연습문제: 불 자료형 사용하기
- 심사문제: 불 자료형 사용하기
- 핵심 정리
- Q & A
- Unit 23. 비트 연산자 사용하기
- 비트 AND, OR, XOR 연산자 사용하기
- 비트 NOT 연산자 사용하기
- 시프트 연산자 사용하기
- 비트 연산 후 할당하기
- 퀴즈
- 연습문제: 비트 논리 연산자 사용하기
- 연습문제: 시프트 연산자 사용하기
- 심사문제: 비트 논리 연산자 사용하기
- 심사문제: 시프트 연산자 사용하기
- Unit 24. 비트 연산자 응용하기
- 시프트 연산과 2의 거듭제곱 알아보기
- 시프트 연산으로 자릿수를 넘어서는 경우 알아보기
- 부호 있는 자료형의 비트 연산 알아보기
- 비트 연산자로 플래그 처리하기
- 퀴즈
- 연습문제: 시프트 연산과 플래그 활용하기
- 심사문제: 시프트 연산과 플래그 활용하기
- Unit 25. 연산자 우선순위 알아보기
- 괄호 사용하기
- 연산자의 결합 방향 알아보기
- 결합 방향이 다른 연산자와 괄호 사용하기
- 논리, 비교, 시프트 연산자에 괄호 사용하기
- 퀴즈
- 연습문제: 괄호 사용하기
- 심사문제: 괄호 사용하기
- 핵심 정리
- Q & A
- Unit 26. switch 분기문으로 다양한 조건 처리하기
- 사용자가 입력한 값에 따라 문자열 출력하기
- case에서 break를 사용하지 않을 때의 동작 알아보기
- case에서 break 생략 응용하기
- case 안에서 변수 선언하기
- switch에서 판별할 수 있는 자료형 알아보기
- 퀴즈
- 연습문제: switch 분기문 사용하기
- 심사문제: 음료수 자판기 만들기
- Unit 27. for 반복문으로 Hello, world! 100번 출력하기
- for 반복문 사용하기
- 초깃값의 변화 알아보기
- 초깃값을 1부터 시작하기
- 초깃값을 감소시키기
- for 반복문과 세미콜론
- for 반복문에서 중괄호 생략하기
- 입력한 횟수대로 반복하기
- for 반복문에서 변수 두 개 사용하기
- for 반복문으로 무한 루프 만들기
- 퀴즈
- 연습문제: for 반복문에서 변수 두 개 사용하기
- 심사문제: 알파벳 순서로 출력하기
- Unit 28. while 반복문으로 Hello, world! 100번 출력하기
- while 반복문 사용하기
- 초깃값을 1부터 시작하기
- 초깃값을 감소시키기
- while 반복문과 세미콜론
- 입력한 횟수대로 반복하기
- 반복 횟수가 정해지지 않은 경우
- while 반복문으로 무한 루프 만들기
- while 반복문에서 중괄호 생략하기
- 퀴즈
- 연습문제: while 반복문 사용하기
- 심사문제: 교통카드 잔액 출력하기
- Unit 29. do while 반복문으로 최소 한 번은 실행하기
- do while 반복문 사용하기
- 초깃값을 1부터 시작하기
- 초깃값을 감소시키기
- 입력한 횟수대로 반복하기
- 반복 횟수가 정해지지 않은 경우
- do while 반복문으로 무한 루프 만들기
- 코드를 한 번만 실행하기
- 퀴즈
- 연습문제: do while 반복문 사용하기
- 심사문제: 숫자의 합 구하기
- Unit 30. break, continue로 반복문 제어하기
- break로 반복문 끝내기
- continue로 코드 실행 건너뛰기
- 입력한 횟수대로 반복하기
- 입력한 숫자까지 짝수 출력하기
- 퀴즈
- 연습문제: 3으로 끝나는 숫자만 출력하기
- 심사문제: 두 수 사이의 숫자 중 7로 끝나지 않는 숫자 출력하기
- Unit 31. 계단식으로 별 출력하기
- 중첩 루프 사용하기
- 사각형으로 별 출력하기
- 계단식으로 별 출력하기
- 대각선으로 별 출력하기
- 퀴즈
- 연습문제: 역삼각형 모양으로 별 출력하기
- 심사문제: 산 모양으로 별 출력하기
- 핵심 정리
- Q & A
- Unit 32. goto로 프로그램의 흐름을 원하는대로 바꾸기
- goto와 레이블 사용하기
- 중첩 루프 빠져 나오기
- goto와 에러 처리 패턴
- 퀴즈
- 연습문제: switch에서 반복문 빠져나오기
- 심사문제: 중첩 루프 빠져나오기
- Unit 33. FizzBuzz
- 1부터 100까지 숫자 출력하기
- 3의 배수일 때와 5의 배수일 때 처리하기
- 3과 5의 공배수 처리하기
- 논리 연산자를 사용하지 않고 3과 5의 공배수 처리하기
- 코드 단축하기
- 퀴즈
- 연습문제: 2와 7의 배수, 공배수 처리하기
- 심사문제: 5와 11의 배수, 공배수 처리하기
- 핵심 정리
- Q & A
- Unit 34. 포인터 사용하기
- 포인터 변수 선언하기
- 역참조 연산자 사용하기
- 디버거에서 포인터 확인하기
- 다양한 자료형의 포인터 선언하기
- void 포인터 선언하기
- 이중 포인터 사용하기
- 잘못된 포인터 사용
- 퀴즈
- 연습문제: 포인터와 주소 연산자 사용하기
- 심사문제: 포인터와 주소 연산자 사용하기
- Unit 35. 메모리 사용하기
- 메모리 할당하기
- 메모리에 값 저장하기
- 메모리 내용을 한꺼번에 설정하기
- 널 포인터 사용하기
- 퀴즈
- 연습문제: 메모리 할당하기
- 심사문제: 두 정수의 합 구하기
- 핵심 정리
- Q & A
- Unit 36. 배열 사용하기
- 배열을 선언하고 요소에 접근하기
- 배열을 0으로 초기화하기
- 배열의 요소에 값 할당하기
- 배열의 크기 구하기
- 반복문으로 배열의 요소를 모두 출력하기
- 배열의 요소 합계 구하기
- 배열의 요소에 저장된 값을 두 배로 만들기
- 배열을 포인터에 넣기
- 배열을 활용하여 10진수를 2진수로 변환하기
- 퀴즈
- 연습문제: 점수 평균 구하기
- 연습문제: 2진수를 10진수로 변환하기
- 심사문제: 가장 작은 수 출력하기
- Unit 37. 2차원 배열 사용하기
- 2차원 배열을 선언하고 요소에 접근하기
- 2차원 배열을 초기화하기
- 2차원 배열의 요소에 값 할당하기
- 2차원 배열의 크기 구하기
- 반복문으로 2차원 배열의 요소를 모두 출력하기
- 2차원 배열을 포인터에 넣기
- 퀴즈
- 연습문제: 행렬의 주대각선 성분 구하기
- 심사문제: 전치행렬 구하기
- Unit 38. 포인터와 배열 응용하기
- 포인터에 할당된 메모리를 배열처럼 사용하기
- 입력한 크기만큼 메모리를 할당하여 배열처럼 사용하기
- 포인터에 할당된 메모리를 2차원 배열처럼 사용하기
- 입력한 크기만큼 메모리를 할당하여 포인터를 2차원 배열처럼 사용하기
- 퀴즈
- 연습문제: 포인터에 할당된 메모리를 3차원 배열처럼 사용하기
- 심사문제: 단위행렬 만들기
- 심사문제: 지뢰찾기
- 핵심 정리
- Q & A
- Unit 39. 문자열 사용하기
- 문자와 문자열 포인터 알아보기
- 문자열 포인터에서 인덱스로 문자에 접근하기
- 배열 형태로 문자열 선언하기
- 배열 형태의 문자열에서 인덱스로 문자에 접근하기
- 퀴즈
- 연습문제: 문자열 만들기
- 연습문제: 문자열 요소 출력
- 심사문제: 문자열 만들기
- Unit 40. 입력 값을 문자열에 저장하기
- 입력 값을 배열 형태의 문자열에 저장하기
- 입력 값을 문자열 포인터에 저장하기
- 문자열을 여러 개 입력받기
- 퀴즈
- 연습문제: 입력받은 문자열을 배열에 저장하기
- 연습문제: 입력받은 문자열을 동적 메모리에 저장하기
- 연습문제: 문자열 세 개 입력받기
- 심사문제: 문자열 네 개 입력받기
- 핵심 정리
- Q & A
- Unit 41. 문자열의 길이를 구하고 비교하기
- 문자열 길이 구하기
- 문자열 비교하기
- 퀴즈
- 연습문제: 문자열 길이 구하기
- 연습문제: 문자열 비교하기
- 심사문제: 문자열 길이 구하기
- 심사문제: 문자열 비교하기
- Unit 42. 문자열을 복사하고 붙이기
- 문자열 복사하기
- 문자열 붙이기
- 배열 형태의 문자열을 문자열 포인터에 복사하기
- 배열 형태의 문자열을 문자열 포인터에 붙이기
- 퀴즈
- 연습문제: 문자열 포인터를 배열에 복사하기
- 연습문제: 문자열 포인터를 동적 메모리에 복사하기
- 연습문제: 문자 배열을 붙이기
- 연습문제: 문자열 리터럴과 동적 메모리 붙이기
- 심사문제: 문자 배열 복사하기
- 심사문제: 두 문자열 붙이기
- Unit 43. 문자열 만들기
- 서식을 지정하여 배열 형태로 문자열 만들기
- 서식을 지정하여 문자열 포인터에 문자열 만들기
- 퀴즈
- 연습문제: 숫자와 문자열을 조합하여 문자열 만들기
- 연습문제: 서식에 맞게 문자열 만들기
- 심사문제: 서수 줄임말 문자열 만들기
- Unit 44. 문자열 검색하기
- 문자열 안에서 문자로 검색하기
- 문자열의 오른쪽 끝부터 문자로 검색하기
- 문자열 안에서 문자열로 검색하기
- 퀴즈
- 연습문제: 문자열 안에서 문자로 검색하기
- 연습문제: 문자열의 오른쪽 끝부터 문자로 검색하기
- 심사문제: 공백 개수 세기
- Unit 45. 문자열 자르기
- 문자를 기준으로 문자열 자르기
- 문자열 포인터 자르기
- 날짜와 시간값 자르기
- 자른 문자열 보관하기
- 퀴즈
- 연습문제: 문자열 자르기
- 심사문제: 문자열 자르기
- 심사문제: 특정 단어 개수 세기
- Unit 46. 문자열과 숫자를 서로 변환하기
- 문자열을 정수로 변환하기
- 특정 진법으로 표기된 문자열을 정수로 변환하기
- 문자열을 실수로 변환하기
- 정수를 문자열로 변환하기
- 실수를 문자열로 변환하기
- 퀴즈
- 연습문제: 문자열을 10진 정수로 변환하기
- 연습문제: 문자열을 16진 정수로 변환하기
- 연습문제: 문자열을 실수로 변환하기
- 연습문제: 여러 개의 실수로 된 문자열을 실수로 변환하기
- 연습문제: 숫자를 문자열로 변환하기
- 심사문제: 문자열을 정수와 실수로 변환하기
- 심사문제: 정수와 실수를 문자열로 변환하기
- Unit 47. 회문 판별과 N-gram 만들기
- 회문 판별
- N-gram 만들기
- 연습문제: 정수 회문 판별하기
- 연습문제: 4-gram 만들기
- 심사문제: 공백이 포함된 회문 판별
- 심사문제: N-gram 만들기
- 핵심 정리
- Q & A
- Unit 48. 구조체 사용하기
- 구조체를 만들고 사용하기
- typedef로 struct 키워드 없이 구조체 선언하기
- 익명 구조체 사용하기
- 퀴즈
- 연습문제: 좌표 구조체 정의하기
- 연습문제: typedef로 좌표 구조체 정의하기
- 연습문제: 익명 구조체로 좌표 구조체 정의하기
- 심사문제: 자동차 계기판 구조체 선언하기
- 심사문제: 자동차 계기판 구조체 정의하기
- Unit 49. 구조체 포인터 사용하기
- 구조체 포인터를 선언하고 메모리 할당하기
- 구조체 별칭으로 포인터를 선언하고 메모리 할당하기
- 구조체 포인터에 구조체 변수의 주소 할당하기
- 퀴즈
- 연습문제: 학생 구조체 포인터에 메모리 할당하기
- 연습문제: 3차원 좌표 구조체 포인터에 메모리 할당하기
- 연습문제: 구조체 포인터에 구조체 주소 할당하기
- 심사문제: 사람과 자동차 구조체 포인터에 메모리 할당하기
- 심사문제: 구조체 포인터에 구조체 변수의 주소 할당하기
- Unit 50. 두 점 사이의 거리 구하기
- 두 점 사이의 거리 구하기
- 연습문제: 사각형의 넓이 구하기
- 심사문제: 두 점 사이의 거리 구하기
- 핵심 정리
- Q & A
- Unit 51. 구조체 멤버 정렬 사용하기
- 구조체 크기 알아보기
- 구조체 정렬 크기 조절하기
- 퀴즈
- 연습문제: 압축 헤더 크기 구하기
- 연습문제: 패킷 크기 조절하기
- 심사문제: 암호화 헤더 크기 구하기
- 심사문제: 패킷 크기 조절하기
- Unit 52. 구조체와 메모리 활용하기
- 구조체와 메모리를 간단하게 0으로 설정하기
- 구조체와 메모리 복사하기
- 퀴즈
- 연습문제: 2차원 좌표 초기화하기
- 연습문제: 2차원 좌표 복제하기
- 심사문제: 인적 정보 삭제하기
- 심사문제: 인적 정보 복제하기
- Unit 53. 구조체 배열 사용하기
- 구조체 배열 선언하기
- 구조체 포인터 배열 선언하기
- 퀴즈
- 연습문제: 2차원 좌표 출력하기
- 연습문제: 인적 정보를 초기화하기
- 심사문제: 선의 길이 구하기
- 심사문제: 나이가 가장 많은 사람 찾기
- 핵심 정리
- Q & A
- Unit 54. 공용체 사용하기
- 공용체를 만들고 사용하기
- 공용체와 엔디언
- 공용체 포인터를 선언하고 메모리 할당하기
- 퀴즈
- 연습문제: 정수 데이터 공용체 정의하기
- 연습문제: 공용체 포인터 사용하기
- 심사문제: 정수 데이터 공용체 정의하기
- 심사문제: 공용체 포인터 사용하기
- Unit 55. 구조체와 공용체 활용하기
- 구조체 안에서 구조체 멤버 사용하기
- 구조체 안의 구조체 멤버에 메모리 할당하기
- 익명 구조체와 익명 공용체 활용하기
- 퀴즈
- 연습문제: 게임 캐릭터 구조체 만들기
- 연습문제: 게임 캐릭터 구조체 사용하기
- 연습문제: 장치 옵션 구조체 만들기
- 심사문제: 게임 캐릭터 구조체 사용하기
- 심사문제: 게임 캐릭터 구조체 포인터 사용하기
- 심사문제: 장치 옵션 구조체 만들기
- 핵심 정리
- Q & A
- Unit 56. 구조체 비트 필드 사용하기
- 구조체 비트 필드를 만들고 사용하기
- 비트 필드와 공용체를 함께 사용하기
- 퀴즈
- 연습문제: 구조체로 플래그 비트 필드 만들기
- 연습문제: 구조체와 공용체로 플래그 비트 필드 만들기
- 심사문제: 구조체로 플래그 비트 필드 만들기
- 심사문제: 구조체와 공용체로 플래그 비트 필드 만들기
- Unit 57. 열거형 사용하기
- 열거형 정의하기
- 열거형을 switch에 활용하기
- 열거형을 for에 활용하기
- 퀴즈
- 연습문제: 장치 종류 정의하기
- 연습문제: 게임 캐릭터 스킬 처리하기
- 연습문제: 월 출력하기
- 심사문제: 프로토콜 종류 정의하기
- 심사문제: 게임 캐릭터 스킬 처리하기
- 심사문제: 인터페이스 타입 출력하기
- 핵심 정리
- Q & A
- Unit 58. 자료형 변환하기
- 기본 자료형 변환하기
- 포인터 변환하기
- void 포인터 변환하기
- 구조체 포인터 변환하기
- 퀴즈
- 연습문제: 삼각형의 넓이 구하기
- 연습문제: 포인터 변환하기
- 연습문제: void 포인터 변환하기
- 연습문제: 구조체 포인터 변환하기
- 심사문제: 소수점 이하 버리기
- 심사문제: 포인터 변환하기
- 심사문제: void 포인터 변환하기
- 심사문제: 구조체 포인터 변환하기
- Unit 59. 포인터 연산 사용하기
- 포인터 연산으로 메모리 주소 조작하기
- 포인터 연산과 역참조 사용하기
- void 포인터로 포인터 연산하기
- 구조체 포인터로 포인터 연산하기
- 퀴즈
- 연습문제: 포인터 연산으로 메모리 주소 조작하기
- 연습문제: 포인터 연산과 역참조 사용하기
- 연습문제: 구조체 포인터와 포인터 연산
- 심사문제: 포인터 연산으로 메모리 주소 조작하기
- 심사문제: 포인터 연산과 역참조 사용하기
- 심사문제: 구조체 포인터로 포인터 연산하기
- 핵심 정리
- Q & A
- Unit 60. 함수 사용하기
- Hello, world! 출력 함수 만들기
- 함수 선언과 정의 분리하기
- 함수 디버깅하기
- 퀴즈
- 연습문제: 함수 호출하기
- 연습문제: 함수 정의하기
- 심사문제: 함수 정의하기
- 심사문제: 함수 선언하기
- Unit 61. 함수에서 반환값 사용하기
- 정수, 실수, 불 반환값 사용하기
- 포인터 반환하기
- void 포인터 반환하기
- 구조체와 구조체 포인터 반환하기
- 퀴즈
- 연습문제: 게임 캐릭터 능력치 함수 만들기
- 연습문제: 문자열 포인터 반환하기
- 연습문제: 메모리 할당 함수 만들기
- 연습문제: 인적 정보 함수 만들기
- 심사문제: 게임 캐릭터 능력치 함수 만들기
- 심사문제: 문자열 포인터 반환하기
- 심사문제: 메모리 할당 함수 만들기
- 심사문제: 2차원 정보 만들기
- Unit 62. 함수에서 매개변수 사용하기
- 매개변수 사용하기
- 덧셈 함수 만들기
- 디버거에서 매개변수와 반환값 확인하기
- 퀴즈
- 연습문제: 문자 매개변수 사용하기
- 연습문제: 뺄셈 함수 만들기
- 심사문제: 게임 캐릭터 능력치 설정 함수 만들기
- 심사문제: 덧셈 함수 만들기
- 심사문제: 3차원 정보 만들기
- 핵심 정리
- Q & A
- Unit 63. 함수에서 포인터 매개변수 사용하기
- 포인터 매개변수 사용하기
- void 포인터 매개변수 사용하기
- 이중 포인터 매개변수 사용하기
- 문자열 매개변수 사용하기
- 퀴즈
- 연습문제: 함수에서 반환값으로 값 한 개, 매개변수로 값 두 개 꺼내기
- 연습문제: 함수에서 행렬 만들기
- 연습문제: 문자열 매개변수 사용하기
- 심사문제: 몫과 나머지를 구하는 함수 만들기
- 심사문제: 함수에서 메모리를 할당하여 배열 만들기
- 심사문제: 문자열 매개변수 사용하기
- Unit 64. 함수에서 배열 매개변수 사용하기
- 배열 매개변수 사용하기
- 2차원 배열 매개변수 사용하기
- 퀴즈
- 연습문제: 배열 매개변수 사용하기
- 연습문제: 단위행렬 만들기
- 심사문제: 배열 매개변수 사용하기
- 심사문제: 전치행렬 만들기
- Unit 65. 함수에서 구조체 매개변수 사용하기
- 구조체 매개변수 사용하기
- 구조체 포인터 매개변수 사용하기
- 퀴즈
- 연습문제: 좌표 출력 함수 만들기
- 연습문제: 좌표 설정 함수 만들기
- 심사문제: 두 점 사이의 거리를 구하는 함수 만들기
- 심사문제: 좌표를 이동시키는 함수 만들기
- 핵심 정리
- Q & A
- Unit 66. 함수에서 가변 인자 사용하기
- 가변 인자 함수 만들기
- 자료형이 다른 가변 인자 함수 만들기
- 퀴즈
- 연습문제: 문자열을 출력하는 가변 인자 함수 만들기
- 연습문제: 자료형이 다른 가변 인자의 합 구하기
- 심사문제: 가변 인자의 합 구하기
- 심사문제: 가변 인자의 정수 합 구하기
- Unit 67. 함수에서 재귀호출 사용하기
- 재귀호출 사용하기
- 재귀호출로 팩토리얼 구하기
- 퀴즈
- 연습문제: 재귀호출 사용하기
- 연습문제: 재귀호출로 1부터 100까지의 합 구하기
- 심사문제: 재귀호출로 피보나치 수 구하기
- 심사문제: 재귀호출로 1부터 n까지 합 구하기
- Unit 68. 함수 포인터 사용하기
- 함수 포인터 만들기
- 반환값과 매개변수가 있는 함수 포인터 만들기
- 퀴즈
- 연습문제: 함수 포인터 만들기
- 심사문제: 반환값과 매개변수가 있는 함수 포인터 만들기
- Unit 69. 함수 포인터 활용하기
- 함수 포인터 배열 사용하기
- 함수 포인터를 구조체 멤버로 사용하기
- 함수 포인터를 함수의 매개변수로 사용하기
- 함수 포인터를 함수의 반환값으로 사용하기
- typedef로 함수 포인터 별칭 정의하기
- 퀴즈
- 연습문제: 계산 함수를 얻은 뒤 호출하기
- 심사문제: 인적 정보 출력하기
- 핵심 정리
- Q & A
- Unit 70. 파일에서 문자열을 읽고 쓰기
- 서식을 지정하여 파일에 문자열 쓰기
- 서식을 지정하여 파일에서 문자열 읽기
- 파일에 문자열 쓰기
- 파일에서 문자열 읽기
- 퀴즈
- 연습문제: 파일에 문자열 쓰기
- 연습문제: 서식을 지정하여 파일에서 문자열 읽기
- 심사문제: 서식을 지정하여 파일에 문자열 쓰기
- 심사문제: 파일에서 문자열 읽기
- Unit 71. 파일 포인터 활용하기
- 파일 크기 구하기
- 파일 크기만큼 파일 읽기
- 파일을 부분적으로 읽고 쓰기
- 제한된 버퍼로 파일 전체를 읽기
- 퀴즈
- 연습문제: 파일 크기만큼 파일 읽기
- 연습문제: 파일을 부분적으로 읽기
- 연습문제: 파일 복사 프로그램 만들기
- 심사문제: 파일 크기만큼 파일 읽기
- 심사문제: 파일을 부분적으로 읽기
- 심사문제: 파일을 읽은 뒤 거꾸로 저장하기
- Unit 72. 파일에서 구조체를 읽고 쓰기
- 파일에 구조체 쓰기
- 파일에서 구조체 읽기
- 퀴즈
- 연습문제: 파일에 구조체 쓰기
- 연습문제: 파일에서 구조체 읽기
- 심사문제: 파일에 구조체 쓰기
- 심사문제: 파일에서 구조체 읽기
- 핵심 정리
- Q & A
- Unit 73. 배열 정렬하기
- 거품 정렬 구현하기
- 퀵 정렬 함수 사용하기
- 퀴즈
- 연습문제: 거품 정렬 구현하기
- 연습문제: 퀵 정렬 함수 사용하기
- 심사문제: 거품 정렬 구현하기
- 심사문제: 퀵 정렬 함수 사용하기
- Unit 74. 연결 리스트 구현하기
- 연결 리스트 구조체 만들고 사용하기
- 노드 추가 함수 만들기
- 노드 삭제 함수 만들기
- 퀴즈
- 연습문제: 특정 노드 검색하기
- 심사문제: 특정 노드 삭제하기
- 핵심 정리
- Q & A
- Unit 75. 매크로 사용하기
- 매크로 정의하기
- 함수 모양의 매크로 정의하기
- 여러 줄을 묶어서 매크로로 정의하기
- 스왑 매크로 정의하기
- 매크로와 연산자 우선순위 알아보기
- 매크로 연결 사용하기
- 퀴즈
- 연습문제: MIN, MAX 매크로 정의하기
- 연습문제: 구조체를 선언하고 초기화하는 매크로 정의하기
- 심사문제: RGB 매크로 정의하기
- 심사문제: 배열의 크기를 구하는 매크로 정의하기
- Unit 76. 조건부 컴파일과 파일 포함 사용하기
- 조건부 컴파일 사용하기
- 값 또는 식으로 조건부 컴파일하기
- 파일 포함하기
- 퀴즈
- 연습문제: 조건부 컴파일 사용하기
- 연습문제: 파일 포함하기
- 심사문제: 조건부 컴파일 사용하기
- 심사문제: 파일 포함하기
- Unit 77. 여러 소스 파일 사용하기
- 프로그램 설계하기
- 계산 데이터 헤더 파일 작성하기
- 덧셈, 뺄셈 함수 작성하기
- 계산 결과 함수 작성하기
- main 함수 작성하기
- 퀴즈
- 연습문제: 헤더 파일 작성하기
- 심사문제: 헤더 파일 작성하기
- 핵심 정리
- Q & A
- Unit 78. 전역 변수 사용하기
- 변수의 범위 알아보기
- 전역 변수 선언하기
- extern으로 다른 소스 파일의 전역 변수 사용하기
- 퀴즈
- 연습 문제: 구조체로 전역 변수 선언하기
- 연습 문제: extern으로 다른 소스 파일의 전역 변수 사용하기
- 심사문제: 구조체로 전역 포인터 변수 선언하기
- 심사문제: extern으로 다른 소스 파일의 전역 변수 사용하기
- Unit 79. 기억 부류 지정자 사용하기
- 자동 변수 사용하기
- 정적 변수 선언하기
- 정적 함수 사용하기
- 레지스터 변수 사용하기
- 퀴즈
- 연습문제: 정적 변수 선언하기
- 연습문제: 정적 함수 사용하기
- 심사문제: 정적 변수 선언하기
- Unit 80. 실행 파일 옵션 사용하기
- main 함수에서 실행 파일 옵션 받기
- 퀴즈
- 연습문제: 덧셈 프로그램 만들기
- 핵심 정리
- Q & A
- Unit 81. 실전 예제: 비트맵 파일을 아스키 아트로 변환하기
- 비트맵 파일 포맷 알아보기
- 비트맵 구조체 작성하기
- 픽셀을 아스키 문자로 저장하기
- 실행 결과 확인하기
- 퀴즈
- 연습문제: 비트맵 파일을 아스키 아트로 변환하기
- 심사문제: 비트맵 파일을 아스키 아트로 변환하기
- Unit 82. 실전 예제: 파일 아카이브 구현하기
- 파일 포맷 설계하기
- 아카이브 파일 구조체 작성하기
- 프로젝트를 만들고 소스 파일 추가하기
- 아카이브 파일 생성 및 첫 파일 추가하기
- 파일 목록 출력하기
- 파일 추출하기
- 기능별로 파일 나누기
- 실행 파일에서 명령 처리하기
- 프로그램 사용해보기
- 심사문제: 아카이브 파일 읽기
- 핵심 정리
- Q & A
- Unit 83. 실전 예제: JSON 파일 읽고 쓰기
- JSON 구조체 작성하기
- JSON 파일 읽기
- JSON에서 문자열 파싱하기
- JSON에서 문자열 배열 파싱하기
- JSON에서 숫자 파싱하기
- 키로 값을 가져오는 함수 작성하기
- JSON 파일 쓰기
- 심사문제: JSON 문서 읽기
- Unit 84. 실전 예제: GitHub의 소스 코드 사용하기
- 프로젝트 생성
- JSON 파일 읽기
- JSON 파일 쓰기
- 핵심 정리
- Q & A
- Unit 85. 부록
- 리눅스, OS X에서 컴파일하기
- 서식 지정자
- 데이터 모델
- 실수 자료형의 오차
- 실수의 무한대와 숫자가 아닌 값 검사
- ASCII 코드표
- C 언어 이스케이프 시퀀스
- 문자 종류 판별하기
- 10진수 - 16진수 - 2진수 변환표
- 10진수를 16진수로 변환하기
- 16진수를 10진수로 변환하기
- 불 자료형
- 64비트 사용하기
- 인라인 함수 사용하기
- volatile 변수
- restrict 포인터
- 시퀀스 포인트
- conio.h 함수 사용하기
- 문자열 입출력 함수 사용하기
- 입출력 버퍼 활용하기
- assert 사용하기
- wchar_t 사용하기
- Secure 함수 사용하기
- 코드 실행을 늦추기
- C 언어 도움말 찾기
예제 소스
저작권 정보
- C 언어 코딩 도장(이하 '책')의 저작권은 이재홍에게 있습니다.
- 책의 출판권 및 배타적발행권과 전자책의 배타적전송권은 (주)도서출판 길벗에게 있습니다.
- 책의 내용을 복제하여 블로그, 웹사이트 등에 게시할 수 없습니다.
- 책의 내용을 변경할 수 없습니다.
- 책의 내용을 상업적으로 사용할 수 없습니다.
- 책의 내용을 어떠한 형태로든 재배포할 수 없습니다.
저자 서문
컴퓨터만큼 발전이 빠른 분야도 없습니다. 컴퓨터가 만들어지고 불과 50여 년 만에 상상을 초월하는 성능과 기능을 갖추게 되었습니다. 처음 접한 컴퓨터는 8비트 컴퓨터였는데 당시에는 그냥 글자가 화면에 나오는 타자기 수준이었습니다. 그 이전에는 집채만 한 군사용 계산기였죠. 하지만 지금은 현실과 구분되지 않을 정도의 화려한 그래픽으로 된 게임을 즐기고, 컴퓨터는 절대 사람에게 이길 수 없다고 여겨졌던 바둑마저도 사람을 이기는 수준에 이르렀습니다.
전기 전자 기술이 컴퓨터 하드웨어를 고성능으로 발전시켰지만, 사실 컴퓨터의 발전은 소프트웨어의 발전이라 할 수 있습니다. 게임도 알파고도 전부 소프트웨어입니다. 우리가 실제로 컴퓨터를 접하는 대상은 소프트웨어죠.
이렇게 발전한 소프트웨어에는 프로그래밍 언어가 큰 역할을 했습니다. 아주 초창기에는 사람이 직접 전선을 연결해서 원하는 계산을 하기도 했고, 한동안 기계어나 어셈블리를 입력하여 개발하기도 했습니다. 개발하기도 어렵고, 불편한 데다가 기간도 오래 걸렸습니다.
시간이 흘러 사람이 쉽게 알아볼 수 있는 프로그래밍 언어가 나오면서 발전 속도가 훨씬 빨라졌습니다. 대표적인 언어가 C 언어인데 윈도우, 리눅스, OS X 같은 운영체제와 다양한 소프트웨어가 C 언어로 개발되었습니다. 이후 수많은 프로그래밍 언어가 나오면서 소프트웨어 시대를 열었습니다.
현재 우리가 컴퓨터로 접하는 화려한 그래픽의 게임, 인터넷을 둘러보는 웹 브라우저, 스마트폰의 앱은 모두 소프트웨어입니다. 자판기, 지하철 전광판, 자동차 엔진, 엘리베이터, 신호등도 눈에 보이지 않지만, 모두 소프트웨어입니다. 일상생활이 소프트웨어로 시작해서 소프트웨어로 끝난다고 해도 과언이 아닙니다.
시대가 시대인 만큼 소프트웨어는 더욱 많이 사용될 것이고 직업으로서도 전망이 밝다고 생각합니다.
우리는 여기서 C 언어를 배우고자 합니다. C 언어는 프로그래밍의 기본이라 알려져 있지만, 배우기는 쉽지가 않습니다. 언어 자체는 간단하지만, 컴퓨터의 구조와 운영체제의 동작까지 익혀야 원활하게 사용할 수 있기 때문입니다.
제가 C 언어를 처음 배울 때를 생각해보면 여러 가지 어려움이 많았습니다. 포인터가 이해되지 않아서 쩔쩔매기도 했고, 자료형 변환이 이해되지 않아서 그냥 문법만 외워서 쓰기도 했습니다. 그래서 이 책을 쓰면서 어떻게 하면 좀 더 쉽게 C 언어를 배울 수 있을까 고민을 많이 했습니다.
C 언어의 문법과 사용 방법을 설명하면서 어려운 컴퓨터 구조나 운영체제 부분은 최소한으로 줄이고 필요한 부분에만 집중했습니다. 좀 더 깊고 자세한 설명은 참고와 Q&A를 통해서 익힐 수 있게 구성했습니다.
프로그래밍 언어는 단순히 공부만 해서 되는 것이 아니라 연습을 하면서 자연스럽게 원리를 익히는 것이 중요합니다. 이 책에서는 직접 타이핑하면서 연습할 수 있도록 코딩 도장 웹 사이트를 제공합니다. 코딩 도장의 심사 문제를 통해 스스로 생각하며 풀어보는 과정이 프로그래밍에 대한 이해를 깊게 해줄 것입니다.
베타테스트 기간 동안 책 내용에 대한 의견을 주신 분들과 심사 문제를 테스트해주신 모든 분께 감사의 말씀을 드립니다. 아무쪼록 C 언어 학습에 어려움을 겪고 있는 모든 분에 도움이 되었으면 좋겠습니다.
2016년 6월 남재윤(이재홍)