1부. C언어의 기본
1장. 프로그램과 C언어의 이해
01. 프로그램이란?
프로그램은 합리적인 일의 순서다
프로그램을 구성하는 기본 요소
프로그램의 입력과 출력
C 언어란?
02. C 언어로 프로그램 만들어 보기
첫번째 해야 할 일 : 프로그램 작성
두 번째 해야 할 일 : 프로그램 번역
컴파일러 사용법
<비타민퀴즈> 자동차의 스위치
링크(link)
마지막 단계 : 프로그램 실행
컴파일러를 활용한 프로그램 작성과 실행
<비타민퀴즈> 달팽이 우물 탈출 프로그램 실습
달팽이 우물 탈출 프로그램
이것만은 알고 갑시다
2장. C 프로그램의 형태
01. 프로그램의 구성과 실행과정
02. 메인함수
함수에는 머리(head)가 있다
모든 일은 몸통에서 처리한다
03. 출력함수
화면에 문자열 출력하기
화면에 정수값 출력하기
[연스문제 2-1] 문자열과 숫자의 화면 출력
화면에 문자열과 정수값을 한번에 출력하기
화면에 줄 바꾸어 출력하기
줄바꿈 출력
04. 저장
변수를 선언하는 방법
변수에 값을 저장하자
변수 선언과 동시에 값을 저장해보자(초기화)
[연습문제 2-2] 정수형 변수의 출력
05. 입력함수
정수값 하나를 입력하자
여러 개의 정수값을 입력하자
scanf 함수 사용시 주의할 점
[연습문제 2-4] 정수값 출력
06. 프로그램을 작성할 때 꼭 필요한 내용들
프로그램을 작성할 때는 순서가 있다
자유로움은 자율을 필요로 한다
주석은 선택이 아니라 필수다
프로그램 3일만 하면 작명소를 차린다
이것만은 알고 갑시다.
3장. 데이터의 표현과 연산(1)
01. 숫자 데이터의 처리
숫자상수에는 정수와 실수가 있다
숫자상수를 저장할 변수를 선언하자
숫자 데이터는 어떻게 연산되는가?
<비타민퀴즈> 자동 형변환
실수형 데이터의 입출력
[연습문제 3-1] 프로그램 만들기 ① 전기요금 계산
02. 문자 데이터의 처리
문자상수를 표현해 보자
문자상수를 저장하자
문자를 입출력하자
[연습문제 3-2] 프로그램 만들기 ② Vitamin-C 야구단 1
03. 문자열은 특별하다
문자들이 모이면 문자열이 된다
문자열을 저장하는 자료형은 없다
문자열을 입출력하자
[연습문제 3-3] 프로그램 만들기 ③ Vitamin-C 야구단 2
04. 형변환과 여러 가지 연산자
형변환 규칙
[연습문제 3-4] 프로그램 만들기 ④ 평균값 구하기
몫 연산자와 나머지 연산자
형변환 연산자
[연습문제 3-5] 프로그램 만들기 ⑤ 시간계산 1
[연습문제 3-6] 프로그램 만들기 ⑥ 시간계산 2
이것만은 알고 갑시다
4장. 데이터의 표현과 연산(II)
01. 진법 변환
각 진법의 수를 10진수로 바꾸자
<비타민퀴즈> 4비트의 진법 변환
[연습문제 4-1] 진법 변환
10진수를 다른 진법으로 바꾸자
02. 다양한 정수의 표현법과 자료형
정수형 상수를 다른 진법으로 표현하자
정수를 다른 진법으로 입출력하자
[연습문제 4-2] 진법 변환 프로그램
<비타민퀴즈> 접두어를 사용한 입력
여러 가지 정수형 자료형
03. 정수값이 저장되는 방법
정수값의 비트 표현과 저장 값의 범위
정수형 변수를 양수값 전용으로 사용하자
[연습문제 4-3] 시간 단위 환산 프로그램
04. 음수까지 포함한 정수형
음수값은 2의 보수로 저장한다
음수값을 포함한 저장 범위
[연습문제 4-4] 거리와 속력
05. 실수값의 표현과 자료형
실수형 상수를 지수표현법으로 사용하자
지수 형태로 입출력하자
여러 가지 실수형 자료형
[연습문제 4-5] 실수형 자료형의 계산
실수값의 비트표현과 저장범위
06. 문자 데이터의 저장
[연습문제 4-6] 아스키코드값을 10진수로 출력하는 프로그램
07. 자료형의 크기를 확인하자
이것만은 알고 갑시다
5장. 입출력 함수
01. printf 함수 제대로 사용하기
전달인자가 문자열 하나인 경우
[연습문제 5-1] “/*”와 “*/”를 출력하기
문자열 외에 출력할 데이터가 있는 경우
02. 변환문자열의 정확한 사용법
정수형 변환문자열의 선택
<비타민퀴즈> 특별한 기능을 수행하는 아스키 문자들
정수형과 문자형 변환문자열의 선택
[연습문제 5-2]정수값과 문자열 출력하기
03. 세련된 출력을 지원하는 변환문자열의 옵션
출력될 공간을 확보하는 필드옵션
플래그옵션
[연습문제 5-3] 문자와 숫자의 정렬
04. scanf 함수 제대로 사용하기
scanf 함수의 기본적인 사용법
scanf 함수는 변환문자열을 정확히 사용해야 한다
[연습문제 5-4] BMI를 구하는 프로그램 만들기
[연습문제 5-5] 다양한 자료형의 입출력
이것만은 알고 갑시다.
6장. 선택문
01. 조건식에 사용되는 연산자
관계연산자
<비타민퀴즈> 10 연산식 만들기
02. if문을 사용한 선택문
가장 간단한 if문
[연습문제 6-1] 절대값 출력하기
if~else 구문을 사용한 선택문
[연습문제 6-2] 유료입장과 무료입장
if~else if~else 구문을 사용한 선택문
[연습문제 6-3] if~else if~else 구문을 사용하여 프로그램 만들기
else의 결합 문제(dangling else문제)
03. switch~case문을 사용한 선택문
다중선택에 사용된다.
[연습문제 6-4] switch~case의 활용
이것만은 알고 갑시다
7장. 반복문
01. 반복문
02. do~while문
03. while문
while문은 조건을 먼저 검사한다
조건식이 반복되는 중간에 있다면?
몇 번을 반복할 것인가?
[연습문제 7-1] 입력값을 반복하여 누락
[연습문제 7-2] 제한된 조건에서 반복되는 프로그램 만들기
[비타민퀴즈] 반복 횟수 계산
04. 증감연산자
[연습문제 7-3] while문과 증감연산자를 사용한 프로그램
05. for문
[연습문제 7-4] for문을 사용한 프로그램
06. 다중 반복문
[연습문제 7-5] 다중 for문을 사용한 프로그램
07. 무한 반복문
08. 반복문 제어
break로 반복문을 빠져 나가자
<비타민퀴즈> break문이 포함된 다중 반복문
continue문은 반복문의 일부를 건너뛴다
[연습문제 7-6] 반복문과 반복문 제어
이것만은 알고 갑시다
8장. 함수
01. 함수를 만들고 사용하자
함수 만들기(정의)
함수 사용하기(호출)
[연습문제 8-1] 세금을 계산하는 함수
[연습문제 8-1] 함수를 사용하는 계산 프로그램
함수의 선언
[연습문제 8-3] 함수를 사용한 프로그램 작성
02. 다양한 형태의 함수
매개변수가 없는 함수
리턴값이 없는 함수
<비타민퀴즈>입출력 함수의 리턴값
리턴값과 매개변수가 모두 없는 함수
[연습문제 8-4] 다양한 형태의 함수 만들기
03. 함수의 필요성
[연습문제 8-5] 함수를 사용한 사칙연산 프로그램
이것만은 알고 갑시다
2부. C언어의 응용
9장. 배열
01. 배열의 선언과 사용
배열의 선언
<비타민퀴즈>평균 나이 구하기
배열의 사용
배열과 반복문
[연습문제 9-1] 가장 큰 배열요소 값 찾기
배열의 초기화
<비타민퀴즈>배열을 사용한 프로그램의 수정
유연성 있게 배열 다루기
[연습문제 9-2] 배열의 데이터를 처리하는 프로그램
02. 문자열을 저장하는 문자배열
문자배열의 선언과 사용
문자열은 널문자가 완성한다!
scanf 함수를 사용한 문자열의 입력
[연습문제 9-3] 문자열의 출력
문자배열의 초기화
[연습문제 9-4] 문자열의 복사와 출력
이것만은 알고 갑시다
10장. 포인터
01. 포인터의 정의와 사용
포인터란 무엇인가?
포인터를 구하자 - 주소연산자
포인터를 사용하자 - 참조연산자
포인터를 저장하자 - 포인터변수
<비타민퀴즈>포인터와 포인터변수
[연습문제 10-1] 포인터를 사용하여 두 변수의 값을 바꾸는 프로그램
02. 포인터는 왜 필요한가?
함수들은 독립된 기억공간을 가진다
포인터로 다른 함수의 기억공간을 사용한다
함수의 한계를 극복한다
<비타민퀴즈> exchange 함수의 매개변수가 int형 변수라면?
[연습문제 10-2] 함수를 호출하여 세 변수의 값을 정렬하는 프로그램
03. 포인터에 관한 중요한 질문
포인터와 포인터변수의 크기는 몇 바이트인가?
포인터와 포인터변수는 자동 형변환이 가능한가?
이것만은 알고 갑시다
11장. 배열과 포인터
01. 포인터로 배열 다루기
포인터로 배열요소를 참조하자
배열명은 포인터!
[연습문제 11-1] 배열의 평균값 구하기
포인터변수로 배열요소를 참조하자
<비타민퀴즈> 배열의 중간에서 배열요소를 참조하기
배열명은 포인터변수가 아니다
<비타민퀴즈> 할당되지 않은 기억공간을 가리키는 포인터변수
[연습문제 11-2] 배열값들을 거꾸로 출력하는 프로그램
02. 배열을 처리하는 함수
배열의 값을 출력하는 함수
배열에 값을 입력하는 함수
배열의 평균을 구하는 함수
[연습문제 11-3] 배열에서 최소값 구하기
이것만은 알고 갑시다
12장. 문자열의 처리
01. 문자열의 정체
문자열상수는 포인터다!
포인터변수로 문자열 처리하기
<비타민퀴즈> 문자열을 중간부터 출력하기
[연습문제 12-1] 문자열에서 원하는 문자만 골라서 출력하기
문자열상수의 두 얼굴
문자배열에 문자열상수를 저장하려면?
02. 중요한 문자열 처리 함수
문자열 복사함수(strcpy)
문자열의 길이를 계산하는 함수
[연습문제 12-2]문자열을 교환하는 프로그램
문자열을 비교하는 함수
[연습문제 12-3] strlen 함수를 사용한 프로그램
두 개의 문자열을 붙이는 함수
[연습문제 12-4] strcmp 함수를 사용한 프로그램
[연습문제 12-5] stracat 함수를 사용한 프로그램
03. 문자열의 입출력
한 줄을 모두 입력하는 함수(gets)
문자열을 출력하는 함수(puts)
[연습문제 12-6] 여러 가지 문자열 처리 함수를 사용한 프로그램
04. 문자 입출력 함수
하나의 문자를 입출력 하자
한 줄을 입출력 하자
여러 줄을 입출력 하자
[연습문제 12-7] 한 줄씩 입출력하는 프로그램
이것만은 알고 갑시다
13장. 변수의 영역과 데이터의 전달
01. 자동변수(auto variable)
자동변수의 생존기간
기억공간의 할당과 회수
자동변수에 메모리가 할당되는 방법
<비타민퀴즈> 메모리의 스택 영역에 생기는 변화
02. 함수들 간의 데이터 전달 방법
값을 복사해서 넘겨준다
포인터를 사용한다
[연습문제 13-1] 포인터를 주고 함수를 호출하는 프로그램
포인터를 리턴하는 함수
03. 정적 변수(static variable)
[연습문제 13-2] 정적 변수를 사용한 프로그램
04. 외부 변수(extern variable)
[연습문제 13-3] 외부 변수를 사용한 프로그램
이것만은 알고 갑시다
3부. C언어의 확장
14장. 2차원 배열과 포인터배열
01. 2차원 배열의 선언과 초기화
2차원 배열은 배열의 배열이다
배열요소를 참조하자
<비타민퀴즈> 2차원 배열이 메모리에 할당되는 방식
2차원 배열은 2중 for문으로 처리한다
2차원 배열의 초기화
[연습문제 14-1] 2차원 배열의 논리적 구조
[연습문제 14-2] 2차원 배열의 초기화와 행과 열의 합 계산
02. 2차원 문자배열
각 행이 하나의 문자열을 저장한다
2차원 문자배열의 초기화
[연습문제 14-3] 낭비되는 기억공간
03. 포인터배열
포인터배열을 선언하고 참조하자
포인터배열의 초기화
포인터배열은 2차원 배열인가?
<비타민퀴즈> 2차원 배열과 포인터배열의 차이점
[연습문제 14-4] 2차원 배열과 포인터배열을 연결하기
이것만은 알고 갑시다
15장. 응용포인터
01. 포인터의 응용
02. 다중 포인터
이중포인터를 사용하여 변수를 참조해 보자
이중포인터변수
<비타민퀴즈> 삼중포인터변수 선언
두 포인터변수를 교환하는 함수를 만들자
[연습문제 15-1] 포인터배열의 배열명을 전달인자로 받는 함수
03. 배열 포인터
배열명의 정체
배열포인터가 가리키는 것은?
2차원 배열의 배열명은 배열포인터이다
배열포인터변수
<비타민퀴즈> 2차원 배열을 가리키는 포인터
[연습문제 15-2] 2차원 문자배열에 입출력하는 함수 만들기
2차원 배열에서 배열명으로 기억공간을 참조하는 원리
04. 함수 포인터
함수명은 포인터다
함수포인터변수
함수포인터는 어디에 사용하는가?
[연습문제 15-3] exchange 함수와 func 함수
05. void 포인터
void 포인터변수
void 포인터변수를 사용한 프로그램
이것만은 알고 갑시다
16장. 메모리 동적 할당
01. 동적 할당 함수(malloc, free)
malloc 함수를 사용하여 메모리를 할당 받자
동적 할당 되는 메모리는 반납해야 한다
동적 할당 되는 메모리는 확인해야 한다
[연습문제 16-1] 일교차 출력 프로그램- 메모리의 동적 할당
02. 동적 할당 기억공간의 활용
동적 할당 된 기억공간을 배열로 사용해 보자
동적 할당을 사용하여 문자열을 처리하자
[연습문제 16-2] 행렬의 합 - 메모리 동적 할당
가변배열을 함수로 출력하자
03. 메인함수의 전달인자
메인함수는 전달인자를 어떻게 받는가?
메인함수의 전달인자를 사용하는 방법
명령행 전달인자와 동적 할당을 사용한 문자열 입력 예제
[연습문제 16-3] 반복 출력되는 문자열
04. 기타 동적 할당 함수
calloc 함수는 배열을 할당 받고 초기화한다
realloc 함수로 기억공간의 크기를 조절한다
이것만은 알고 갑시다
17장. 구조체
01. 구조체의 형 선언과 멤버 참조
struct 예약어를 사용하여 구조체의 형태를 만든다
구조체 변수는 멤버를 참조하여 사용한다
구조체에는 다양한 멤버를 사용할 수 있다
[연습문제 17-1] 구조체의 형 선언과 멤버 참조
구조체변수를 초기화하자
[연습문제 17-2] 구조체의 멤버 참조
구조체변수를 함수의 전달인자로 사용하자
구조체변수를 전달인자로 받고 리턴하는 함수
02. 구조체배열
구조체배열의 선언하고 배열요소를 참조하자
구조체배열의 초기화
03. 구조체 포인터
구조체 포인터로 멤버를 참조하자
간접멤버참조연산자
[연습문제 17-4] 구조체배열을 처리하는 함수
04. 공용체
05. 열거형(enumeration type)
06. typedef를 사용한 형 재정의
이것만은 알고 갑시다
18장. 파일 입출력
01. 파일 입출력의 개념
스트림 파일은 무엇인가?
스트림 파일을 사용하는 이유
02. 파일 개방
파일을 개방하기 위해서 fopen함수를 사용한다
fopen 함수의 리턴값은 무엇인가?
개방한 파일은 fclose 함수로 닫는다
03. 파일 입출력 과정
하나의 문자를 파일로부터 입력하자(fgetc)
파일로부터 데이터가 입력되는 과정
하나의 문자를 파일에 출력하자(fputc)
기본적으로 개방되는 표준 입출력 스트림 파일
[연습문제 18-1] 텍스트 뷰어 만들기
04. 다양한 입출력 함수
문자열을 한번에 입출력을 하자(fgets, fputs)
gets와 puts 대신 fgets와 fputs 함수를 사용하자
다양한 자료형에 맞게 입출력하자(fscanf, fprintf)
스트림 파일의 버퍼는 비워줘야 할 때가 있다
[연습문제 18-2] 데이터파일 만들기
이것만은 알고 갑시다
19장. 전처리와 분할 컴파일
01. 전처리 명령어
include 명령으로 파일을 포함한다
define 명령어로 매크로상수를 만들자
define 명령어로 매크로함수를 만들자
조건부 컴파일 전처리 명령어
02. const를 사용한 기호상수
const 변수를 상수로 만든다
포인터변수를 상수화 시키는 것은 특별하다
03. 분할 컴파일
분할 컴파일을 해보자
외부 변수의 선언과 정의
[연습문제 19-1] 분할 컴파일 연습
외부 정적변수는 하나의 모듈에서만 사용한다
이것만은 알고 갑시다
20장. 연산저 정리
01. 비트 연산자
비트별 논리곱 연산자
비트별 배타적 논리합
비트별 논리합 연산자
비트부정 연산자
비트이동 연산자
[연습문제 20-1] 비트열 출력하기
02. 조건 연산자
03. 연산자 우선순위와 결합 방향591
이것만은 알고 갑시다
부록. 아스키코드표
부록. 정답과 해설
연습문제 정답과 해설
비타민 퀴즈 정답과 해설
이것만은 알고 갑시다 정답
찾아보기