목차
01 컴퓨터에 대한소개
1.1. 컴퓨터 시스템 = 2
컴퓨터 하드웨어 = 2
컴퓨터 소프트웨어 = 2
1.2. 컴퓨팅 환경 = 5
개인용 컴퓨팅 환경 = 5
시분할 환경 = 6
클라이언트/서버 환경 = 6
분산 컴퓨팅 환경 = 7
1.3. 컴퓨터 언어 = 7
기계어 = 8
기호 언어 = 9
고급 언어 = 10
1.4. 프로그램 작성과 실행 = 11
프로그램 작성과 편집 = 12
프로그램 번역 = 12
프로그램 연결 = 12
프로그램 실행 = 13
1.5. 시스템 개발 = 13
시스템 개발 생명주기 = 13
프로그램 개발 = 15
1.6. 소프트웨어 공학 = 23
1.7. 프로그램 작성 요령과 일반적인 프로그래밍 오류 = 25
1.8. 요약 = 25
1.9. 연습 = 26
복습문제 = 26
연습문제 = 28
문제 = 29
02 C언어에 대한 고개
2.1. 배경 = 32
2.2. C프로그램 = 33
C프로그램의 구조 = 33
첫 번째 C프로그램 = 35
주석 = 36
인사말 출력 프로그램 = 38
2.3. 식별자 = 38
2.4. 데이터형 = 40
void형 = 41
정수형 = 41
부동 소수점형 = 44
데이터형 요약 = 45
2.5. 변수 = 45
변수선언 = 45
변수 초기화 = 47
2.6. 상수 = 50
상수표현 = 50
상수 사용 = 54
2.7. 입출력 = 56
스트림 = 56
입출력 포맷 = 57
2.8. 프로그래밍 예제 = 71
2.9. 소프트웨어 공학 = 80
프로그램 문서화 = 80
데이터 명명법 = 81
데이터 은닉 = 83
2.10. 프로그램 작성 요령과 일반적인 프로그래밍 오류 = 84
2.11. 요약 = 85
2.12. 연습 = 86
복습문제 = 86
연습문제 = 88
문제 = 92
프로젝트 = 93
03 C프로그램의 구조
3.1. 수식 = 96
일차식 = 97
후위연산자 수식 = 97
전위연산자 수식 = 99
단항식 = 101
이항식 = 103
3.2. 우선순위와 결합성 = 108
우선순위 = 108
결합성 = 109
3.3. 부수효과 = 111
3.4. 수식계산 = 112
부수효과가 없는 수식 = 112
부수효과를 가진 수식 = 113
주의해야 할 점 = 115
3.5. 데이터 형 변환 = 116
묵시적 형 변환 = 116
명시적 형 변환(Cast) = 120
3.6. 문장 = 122
문장형 = 122
세미콜론의 역할 = 126
문장과 정의된 상수 = 126
3.7. 예제 프로그램 = 126
3.8. 소프트웨어 공학 = 136
KISS = 136
괄호 = 136
사용자에 대한 지시 = 137
3.9. 프로그램작성 요령과 일반적인 프로그래밍 오류 = 139
3.10. 요약 = 139
3.11. 연습 = 140
복습문제 = 140
연습문제 = 142
문제 = 145
프로젝트 = 147
04 함수
4.1. 구조적프로그램 설계 = 150
4.2. C에서의 함수 = 151
4.3. 사용자 정의함수 = 155
함수의 기본적인 구조 = 156
함수의 정의 = 161
함수의 선언 = 164
함수 호출 = 165
함수의 예제 = 166
4.4. 함수간 통신 = 174
기본적인 개념 = 174
C언어에서의 구현 = 175
4.5. 표준 함수 = 186
난수 = 190
4.6. 영역 = 197
전역적 영역(Global Scope) = 198
지역적 영역(Local Scope) = 198
4.7. 프로그래밍 예제 - 점진적 개발 = 199
첫 번째 점진적 단계: main 및 getData = 200
두 번째 점진적 단계: add = 201
마지막 점진적 단계: add = 203
4.8. 소프트웨어 공학 = 205
구조차트 규칙과 기호 = 206
기능적 응집력 = 208
하향식 개발 = 211
4.9. 프로그램 작성 요령과 일반적인 프로그래밍 오류 = 214
4.10. 요약 = 215
4.11. 연습 = 216
복습문제 = 216
연습문제 = 219
문제 = 223
프로젝트 = 225
05 선택-결정
5.1. 논리적 데이터와 연산자 = 230
C에서의 논리적 데이터 = 230
논리식 평가 = 232
관계 연산자 = 234
5.2. 이중선택 = 236
if…else = 236
Null else 문 = 239
중첩 if문 = 242
짝 없는 else 문제 = 243
단순화된 if문장 = 244
조건식 = 245
이중 선택 예제 = 246
5.3. 다중선택 = 252
switch문 = 253
else-if = 259
5.4. 추가적인 표준화된 함수 = 262
표준 문자 함수 = 262
분류 프로그램 = 265
주요 오류 처리 = 266
5.5. 점진적 개발 - 2부 = 267
계산기의 설계 = 267
계산기의 점진적 설계 = 267
5.6. 소프트웨어 공학 = 278
종속적인 문장 = 278
부정 논리식 = 279
선택문에 대한 규칙 = 280
구조차트에서의 선택 = 281
5.7. 프로그램 작성 요령과 일반적인 프로그래밍 오류 = 283
5.8. 요약 = 284
5.9. 연습 = 285
복습문제 = 285
연습문제 = 287
문제 = 292
프로젝트 = 294
06 반복문
6.1. 루프의 개념 = 302
6.2. 루프의 수행 전 검사와 수행 후 검사 = 302
6.3. 초기화와 갱신 = 304
루프 초기화 = 304
루프 갱신 = 305
6.4. 이벤트 제어 루프와 계수기 제어 루프 = 306
이벤트 제어 루프 = 306
계수기 제어 루프 = 307
루프 비교 = 307
6.5. C에서의 루프 = 308
while 루프 = 308
for 루프 = 313
do…while 루프 = 317
쉼표 식 = 321
6.6. 루프 예 = 323
for 루프 = 323
6.7. 푸르와 관계되는 다른명령문 = 335
6.8. 루프 응용 = 339
합산 = 339
거듭제곱 = 340
최대값과 최소값 = 341
질의 = 343
6.9. 재귀 = 347
반복적 정의 = 347
재귀적 정의 = 348
반복적 해법 = 348
재귀적 해법 = 349
재귀 함수 설계 = 350
피보나치 수열 = 352
재귀의 한계 = 354
하노이 탑 = 355
하노이 탑의 재귀적 해법 = 356
6.10. 프로그래밍 예제 - 계산기 프로그램 = 360
6.11. 소프트웨어 공학 = 363
구조도에서의 루프 = 363
알고리즘의 효율성 결정 = 364
선형 루프 = 364
대수형 루프 = 365
내포된 루프 = 366
의존적인 2차형 = 367
Big-O 표기법 = 368
표준 효율성 측정 = 369
6.12. 프로그램작성요령과 일반적인 포토그래밍 오류 = 371
6.12. 요약 = 372
6.13. 연습 = 373
복습문제 = 373
연습문제 = 375
문제 = 381
프로젝트 = 384
07 텍스트 입출력
7.1. 파일 = 392
파일 이름 = 392
파일 정보 테이블 = 393
7.2. 스트립 = 393
텍스트 스트림과 이진 스트림 = 393
스트림-파일 처리하기 = 394
시스템 생성 스트림 = 395
7.3. 표준라비브러리 입출력 합수들 = 396
파일 열기와 닫기 = 396
7.4. 형식화 입출력 함수들 = 401
스트림 포인터 = 402
형식 제어 문자열 = 403
입력 형식화(scanf와 fscanf) = 405
출력 형식화(print와 fprint) = 417
파일 예제 프로그램 = 424
7.5. 문자 입출력 함수들 = 432
터미널 문자 입출력 = 432
터미널과 파일 문자 입출력 = 433
문자 입출력 예 = 435
7.6. 소프트웨어 공학 = 441
파일 검사 = 441
데이터 전문용어 = 444
7.7. 프로그램 작성 요령과 일반적인 프로그래밍 오류 = 446
7.8. 요약 = 447
7.9. 연습 = 448
복습문제 = 448
연습문제 = 450
문제 = 452
프로젝트 = 455
08 배열
8.1. 개념 = 458
8.2. C에서 배열 사용 = 461
선언과 정의 = 462
배열 원소 접근 = 462
배열에 값 저장하기 = 463
배열 참조의 우선순위 = 468
색인 범위 검사 = 469
8.3. 함수 간 통신 = 472
개별 원소 전달 = 472
전체 배열 전달 = 474
8.4. 배열 응용 = 480
빈도 배열 = 480
히스토그램 = 481
난수 순열 = 486
8.5. 정렬(SORTING) = 488
선택 정렬(Selection Sort) = 489
버블 정렬(Bubble Sort) = 491
삽입 정렬(Insertion Sort) = 494
정렬 프로그램 검사 = 497
정렬 방법 비교 = 498
정렬에 대한 결론 = 499
8.6. 탐색(SEARCHING) = 499
순차 탐색 = 500
이진 탐색 = 503
8.7. 2차원 배열 = 508
선언 = 508
2차원 배열을 함수에 전달하기 = 514
8.8. 다차원 배열 = 518
다차원 배열의 선언과 정의 = 519
8.9. 프로그램예제 - 평균계산 = 521
첫 번째 프로그램 : main = 521
두 번째 프로그램 : Get Data = 523
세 번째 프로그램 : Calculate Row Average = 524
네 번째 프로그램 : Calculate Column Average = 526
다섯 번째 프로그램 : Print Tables = 526
8.10. 소프트웨어 공학 = 530
정렬 테스트 = 530
탐색 테스트 = 530
정렬 알고리즘 분석 = 531
탐색 알고리즘 분석 = 533
8.11. 프로그램 작성요령과 일반적인 프로그래밍 오류 = 536
8.12. 요약 = 537
8.13. 연습 = 538
복습문제 = 538
연습문제 = 541
문제 = 543
프로젝트 = 548
09 포인터
9.1. 소개 = 558
포인터 상수 = 558
포인터 값 = 560
포인터 변수 = 561
포인터를 통한 변수접근 = 563
포인터의 선언과 정의 = 564
선언 대 역 참조 = 566
포인터 변수의 초기화 = 566
9.2. 함수 간 통신을 위한 포인터 = 573
주소 전달(Passing Address) = 574
포인터를 반환하는 함수 = 576
9.3. 포인터에 대한 토인터 = 577
9.4. 호환성 = 580
포인터의 크기 호환성 = 580
역 참조 타입 호환성 = 581
역 참조 단계 호환성 = 584
9.5 Lvalue와 Rvalue = 584
포인터 응용 = 586
9.6. 소프트웨어 공학 = 595
품질의 정의 = 595
품질 요소 = 596
품질 순환(The Quality Circle) = 599
결론 = 601
9.7. 프로그램 작성요령과 일반적인 프로그래밍 오류 = 602
9.8. 요약 = 603
9.9. 연습 = 604
복습문제 = 604
연습문제 = 607
문제 = 611
프로젝트 = 612
10 포인터의 응용
10.1. 배열과 포인터 = 616
10.2. 포인터 계산과 배열 = 618
포인터와 1차원 배열 = 619
포인터와 다른 연산자들 = 621
포인터 계산의 사용 = 622
포인터와 2차원 배열 = 625
10.3. 함수로 배열 전달 = 627
10.4. 메모리 할당 함수 = 631
메모리 사용 = 631
정적 메모리 할당 = 632
동적 메모리 할당 = 632
메모리 할당 함수 = 633
메모리 재할당(realloc) = 636
메모리 해제(FREE) = 636
10.5. 포인터 배열 = 638
10.6. 프로그래밍 응용 방법 = 639
포인터를 사용한 선택 정렬 = 639
동적 배열 = 643
10.7. 소프트웨어 공학 = 650
포인터와 함수 호출 = 650
포인터와 배열 = 650
배열 인덱스와 교환 가능성 = 651
동적 메모리 : 이론 대 실전 = 651
10.8. 프로그램 작성요령과 일반적인 프로그래밍 오류 = 653
10.9. 요약 = 654
10.10. 연습 = 655
복습문제 = 655
연습문제 = 657
문제 = 664
프로젝트 = 666
11 문자열
11.1. 문자열이란? = 672
고정 길이 문자열 = 672
가변 길이 문자열 = 672
11.2. C문자열 = 673
문자열 저장 = 674
문자열 구분자 = 674
문자열 정수(String Literals) = 675
문자열과 문자 = 676
문자열 선언 = 677
문자열 초기화 = 678
문자열과 할당 연산자 = 679
문자열 읽기 및 쓰기 = 680
11.3. 문자열 입/출력 함수 = 680
서식 문자열 입/출력 = 680
문자열 입/출력 = 688
예제 = 691
11.4. 문자열의 배열 = 695
11.5. 문자열 조작 함수 = 697
문자열 길이 = 698
문자열 복사 = 699
문자열 비교 = 704
문자열 연결 = 706
문자열에 있는 문자 = 707
부분 문자열 검색 = 708
문자 세트 검색 = 709
문자열 스팬-포인터 = 710
문자열 예제 = 714
11.6. 문자열/데이터 변환 = 719
문자열에서 데이터 변환 = 719
문자열에서 데이터로 변환 = 721
11.7. 프로그래밍 예제 - 모스 부호 = 724
11.8. 소프트웨어 공학 = 735
프로그램 설계 개념 = 735
정보 은닉 = 735
결합 = 736
11.9. 프로그램 작성요령과 일반적인 프로그래밍 오류 = 740
11.10. 요약 = 741
11.11. 연습 = 742
복습문제 = 742
연습문제 = 744
문제 = 747
프로젝트 = 749
12 열거형, 구조체, 공동체
12.1. 형식정의(typedef) = 754
12.2. 열거형 = 755
열거형 선언 = 755
열거형 연산 = 756
열거형 변환 = 757
열거 상수의 초기화 = 758
무명 열거 : 상수 = 758
입력/출력 연산 = 760
12.3. 구조체 = 760
구조체 선언 = 762
초기화 = 763
구조체의 접근 = 764
구조체 연산자 = 767
복잡한 구조체 = 772
구조체와 함수 = 782
전체 구조체 전달 = 783
포인터를 사용한 구조체 전달 = 786
12.4. 공용체 = 789
공용체 참조 = 789
초기화 = 790
공용체와 구조체 = 791
인터넷 주소 = 794
12.5. 응용 프로그래밍 = 796
12.6. 소프트웨어 공학 = 807
결합 = 897
데이터 은닉 = 810
요약 = 811
12.7. 프로그램 작성 요령과 일반적인그로그래밍 오류 = 812
12.8. 요약 = 813
12.9. 연습 = 815
복습문제 = 815
연습문제 = 818
문제 = 821
프로젝트 = 823
13 이진 입출력
13.1. 텍스터 스트림과 이진스트림 = 830
텍스트 파일과 이진 파일 = 830
텍스트와 이진 파일의 차이점 = 831
파일의 상태 = 832
이진 파일 열기(Opening binary files) = 834
이진 파일 닫기(Closing binary files) = 835
13.2. 타일을 위한 표준라이브러리 함수들 = 835
블록 입ㆍ출력 함수(Block input/output functions) = 835
파일 상태 함수 = 841
위치 함수 = 842
시스템 파일 연산 = 849
13.3. 파일 형 변환 = 850
텍스트 파일에서 이진 파일을 생성하기 = 850
이진 파일에서 텍스트 파일 생성하기 = 854
13.4. 파일 프로그램 예제 = 859
병합 파일 = 83
13.5. 소프트웨어 공학 = 867
업데이트 파일 = 867
순차 파일 업데이트 = 867
업데이트 프로그램 설계 = 868
업데이트 오류 = 870
업데이트 구조도 = 871
업데이트 로직 = 871
요약 = 873
13.6. 프로그램 작성 요령과 일반적인 프로그래밍 오류 = 874
13.7. 요약 = 875
13.8. 연습 = 876
복습문제 = 876
연습문제 = 878
문제 = 884
프로젝트 = 885
14 비트 연산자
14.1. 고정 크리 정수형 타입들 = 890
14.2. 비트논리 연산자들 = 890
비트 and 연산자 = 890
비트 Inclusive or 연산자 = 892
비트 Exclusive or 연산자 = 893
14.3. 이동 연산자 = 897
순환(Rotation) = 902
14.4. 마스크(Masks) = 904
마스크 생성 = 904
마스크 사용 = 906
14.5. 소프트웨어 공학 = 915
급료 사례 연구 = 915
프로그램 설계 단계 = 916
구조차트 설계 = 916
14.6. 프로그램 작성요령과 일반적인 프로그래밍 오류 = 923
14.7. 요약 = 924
14.8. 연습 = 925
복습문제 = 925
연습문제 = 927
문제 = 930
프로젝트 = 931
15 리스트
15.1. 리스트 구현 = 938
배열 구현 = 938
연결 리스트 구현 = 938
15.2. 범용 선형 리스트 = 941
노드 삽입 = 941
노드 삭제 = 946
선형 리스트에서 데이터 위치 알아내기 = 948
선형 리스트 순회 = 952
선형 리스트 생성 = 954
노드 제거 = 956
선형 리스트 테스트 드라이버 = 957
15.3. 스택 = 960
스택 구조 = 960
스택 알고리즘 = 962
스택 증명 = 965
15.4. 큐 = 968
큐 연산 = 968
큐 연결 리스트 설계 = 970
큐 함수 = 971
큐 증명 = 974
15.5. 트리 = 977
기본적인 트리 개념 = 977
용어 = 978
이진 트리 = 980
이진 탐색 트리 = 985
이진 트리 예제 = 989
15.6. 그래프 = 991
그래프 순회 = 993
15.7. 소프트웨어 공학 = 998
원소 자료와 복합 자료 = 998
자료 구조 = 999
추상 자료 구조 = 999
추상 자료 타입을 위한 모델 = 1001
ADT 자료 구조 = 1002
15.8. 프로그램 작성 요령과 일반적인 프로그래밍 오류 = 1003
15.9. 요약 = 1004
15.10. 연습 = 1005
복습문제 = 1005
연습문제 = 1008
문제 = 1012
프로젝트 = 1014
Appendix A. 문자집합
A.1 유니코드(Unicode) = 1018
면(Plane) = 1018
A.2 ASCII = 1021
ASCII의 특징 = 1026
A.3 C에서의 유니버설 인코딩(Universal Encoding) = 1026
Appendix B. 키워드 = 1029
Appendix C. 플로우차트
C.1 보조기호 = 1032
흐름선 = 1033
연결자 = 1033
C.2 기본 기호 = 1034
순차(Sequence) = 1034
반복문 = 1039
Appendix D. 수의 체계
D.1 컴퓨터 수의 체계 = 1045
10진수 = 1046
2진수 = 1046
16진수 = 1048
256진수 = 1049
또 다른 변환들 = 1051
D.2 정수 저장하기 = 1052
부호 없는 정수 = 1052
부호 있는 정수 = 1053
오버플로우(Overflow) = 1059
D.3 실수의 저장 = 1060
정규화 = 1061
부호, 지수, 가수 = 1062
IEEE 표준 = 1062
저장과 읽기 알고리즘 = 1063
Appendix E. 정수와 실수 라이브러리
E.1 limits.h = 1065
E.2 float.h = 1066
Appendix F. 함수 라이브러리
F.1 FUNCTION INDEX = 1069
F.2 type 라이브러리 = 1072
F.3 math LIBRARY = 1073
F.4 표준 I/O LIBRARY = 1077
일반 I/O = 1077
형식화된 I/O = 1077
문자 I/O = 1078
파일 I/O = 1078
문자열 I/O = 1078
시스템 파일 컨트롤 = 1079
F.5 STANDARD LIBRARY = 1079
수학 함수 = 1079
메모리 함수 = 1080
프로그램 컨트롤 = 1080
시스템 통신 = 1080
변환 함수 = 1080
F.6 문자열 라이브러리 = 1081
메모리 함수 = 1081
문자열 함수 = 1081
F.7 타임 라이브러리 = 1082
Appendix G. 전처리기 명령어
G.1 파일 포함시키기 = 1086
G.2 매크로 정의 = 1087
상수 정의하기 = 1088
함수 대체 매크로 = 1088
중첩 매크로 = 1091
매크로 정의 해제 = 1092
미리 정의된 매크로 = 1092
매크로 관련 연산자 = 1093
G.3 조건부 컴파일 = 1094
이중 선택 명령어 = 1095
다중 선택 명령어 = 1099
조건부 명령어 모음 = 1100
G.4 다른 명령어들 = 1101
라인 명령어 = 1101
오류 명령어 = 102
플라그마(Pragma) 명령어 = 1103
널(Null) 명령어 = 1103
Appendix H. 명령행 인자
H.1 명령행 인자의 정의 = 1105
H.2 명령행 인자의 사용 = 1107
Appendix I. void 및 함수에 대한 포인터
I.1 void 포인터 = 1109
I.2 함수에 대한 포인터 = 1111
Appendix J. 기억클래스 및 형식 한정자
J.1 기억 클래스 = 1117
객체 기억 속성 = 1117
기억 클래스 지정자 = 1119
J.2 형식 한정자 = 1125
Appendix K. 프로그램 개발
K.1 과정 = 1131
경우 1 : 하나의 간단한 파일 = 1132
경우 2 : 두 개의 함수 = 1133
경우 3 : 두 개의 소스 파일 = 1134
K.2 코딩 = 1137
유닉스(Unix) = 1137
다른 플랫폼 = 1140
Appendix L. 복잡한 선언의 이해