목차 일부
서문 ... xxii
1장 준비 ... 1
C의 근원은 어디인가? ... 1
왜 C 언어인가? ... 2
디자인 특징 ... 2
실용성 ... 3
이식 가능성 ... 3
힘과 유연성 ... 3
프로그래머 중심 ... 3
결점 ... 4
C 언어는 어디로 가는가? ... 4
...
더보기
목차 전체
서문 ... xxii
1장 준비 ... 1
C의 근원은 어디인가? ... 1
왜 C 언어인가? ... 2
디자인 특징 ... 2
실용성 ... 3
이식 가능성 ... 3
힘과 유연성 ... 3
프로그래머 중심 ... 3
결점 ... 4
C 언어는 어디로 가는가? ... 4
컴퓨터가 하는 일 ... 5
고급 컴퓨터 언어와 컴파일러 ... 6
C 사용하기 : 7단계 ... 7
1단계 : 프로그램 목적 정의 ... 7
2단계 : 프로그램 설계 ... 8
3단계 : 코드작성 ... 9
4단계 : 컴파일 ... 9
5단계 : 프로그램 실행 ... 10
6단계 : 프로그램 테스트와 디버그 ... 10
7단계 : 프로그램 유지와 수정 ... 10
주석 ... 11
프로그램 제작 과정 ... 11
오브젝트 코드 파일과 실행파일 및 라이브러리 ... 12
UNIX 시스템 ... 14
Linux 시스템 ... 16
윈도우용 통합 개발 환경 ... 16
IBM PC를 위한 DOS 컴파일러 ... 18
Macintosh상에서의 C 구현 ... 19
언어 표준 ... 19
초기 ANSI/ISO C 표준 ... 19
C99 표준 ... 20
이 책의 구성 ... 21
몇 가지 알아 두어야 할 규정 ... 21
글자체 ... 21
스크린 출력 ... 21
특수키 ... 22
요약 ... 23
복습 문제 ... 23
프로그래밍 연습 ... 23
2장 C의 간략한 소개 ... 25
간단한 C 예제 프로그램 ... 25
자세한 설명 ... 26
Pass 1 각 라인에 대한 간략한 설명 ... 26
Pass 2 세부 사항 ... 28
간단한 프로그램의 구조 ... 37
프로그램을 읽기 쉽게 작성하는 요령 ... 38
두 번째 예제 프로그램 ... 39
문서화 ... 40
다중 선언 ... 40
곱셈 연산 ... 40
다중 변수값 출력 ... 41
다중 함수 ... 41
디버깅 ... 43
신택스(syntax) 오류 ... 44
의미론적 오류 ... 45
프로그램 상태 ... 46
키워드와 예약 식별자 ... 47
주요 개념 ... 48
요약 ... 48
복습 문제 ... 49
프로그래밍 연습 ... 50
3장 데이터와 C ... 53
예제 프로그램 ... 53
이 프로그램에서 새로운 것은 무엇인가 ... 55
데이터 변수와 상수 ... 56
데이터형 키워드 ... 56
정수형과 부동 소수점형 ... 58
정수형 ... 58
부동 소수점형 ... 59
C 데이터형 ... 60
정수형(int) ... 60
다른 정수형 데이터 ... 64
문자 사용 : char형 ... 69
_Bool형 데이터 ... 75
이식성이 강한 데이터형 : inttypes.h ... 76
float, double, long double 데이터형 ... 78
복소수형과 허수형 데이터 ... 83
기타 데이터형 ... 83
데이터형의 크기 ... 85
데이터형의 사용 ... 87
인수의 함정 ... 88
또 하나의 예제 프로그램 ... 90
작동의 설명 ... 90
출력 비우기 ... 91
주요 개념 ... 92
요약 ... 92
복습 문제 ... 93
프로그래밍 연습 ... 95
4장 문자열과 포맷 정의된 입출력 ... 97
프로그램 소개 ... 97
문자열의 소개 ... 99
char형 배열과 널 문자 ... 99
문자열 사용 ... 100
strlen() 함수 ... 101
상수와 C 선행처리기 ... 103
const수정자 ... 106
상수 선언 ... 106
printf()함수와 scanf()함수 ... 110
printf()함수 ... 110
printf()사용 ... 111
printf()를 위한 변환 지시자의 수정자 ... 114
변환의 의미 ... 120
scanf()함수의 사용 ... 126
printf()와 scanf()에서의 *수정자 ... 131
실제 사용을 위한 팁 ... 133
주요 개념 ... 134
요약 ... 135
복습 문제 ... 136
프로그래밍 연습 ... 138
5장 연산자, 표현식 및 문장 ... 141
루프의 소개 ... 141
기본 연산자 ... 144
할당(대입 연산자) : = ... 144
덧셈 연산자 : + ... 146
뺄셈 연산자 : - ... 147
부호 연산자 : -와 + ... 147
곱셈 연산자 : * ... 148
나눗셈 연산자 : / ... 150
연산자 우선 순위 ... 151
우선 순위와 연산 순서 ... 153
기타 연산자 ... 155
sizeof 연산자와 size_t 데이터형 ... 155
잉여 연산자 : % ... 156
증감 연산자 : ++, -- ... 158
감소 연산자 : -- ... 162
우선 순위 ... 163
너무 복잡하게 해서 문제가 되는 경우 ... 163
표현식과 문장 ... 165
표현식 ... 165
문장 ... 166
복합문(블록) ... 169
형 변환 ... 171
캐스트 연산자 ... 173
인수를 가진 함수 ... 175
간단한 예제 프로그램 ... 177
주요 개념 ... 179
요약 ... 179
복습 문제 ... 180
프로그래밍 연습 ... 184
6장 C 제어문 : 루프 ... 187
간단한 예제 프로그램 ... 188
프로그램 설명 ... 189
C의 루프 형식 ... 190
while문 ... 191
while루프의 종료 ... 192
루프 종료 시기 ... 192
while : 진입 조건 루프 ... 193
신택스의 주요 사항 ... 194
관계 연산자와 표현식의 관계 ... 196
참이란 무엇인가? ... 197
참이 되는 다른 수 ... 198
참의 범위가 넓어서 일어나는 문제 ... 199
_Bool형 ... 202
관계 연산자의 우선운위 ... 203
무한 루프와 계수 루프 ... 206
for 루프 ... 207
for문의 신축성 ... 208
기타 할당 연산자 : +=, -=, *=, /=, %= ... 213
연산자 ... 214
for루프를 사용한 zeno값 계산 ... 217
탈출 조건 루프 : do while ... 219
루프의 선택 ... 222
중첩 루프 ... 223
프로그램 설명 ... 224
중첩 변환 ... 225
배열 ... 226
for 루프의 배열 사용 ... 227
함수 리턴값을 사용하는 루프의 예 ... 229
프로그램 설명 ... 232
리턴값을 갖는 함수의 사용 ... 233
주요 개념 ... 234
요약 ... 235
복습 문제 ... 236
프로그래밍 연습 ... 241
7장 C 제어문 : 분기와 점프 ... 245
if문 ... 246
if문에 else 추가 ... 248
또 다른 예제 프로그램 : getchar()와 putchar() 소개 ... 250
ctype.h 군의 문자 함수 ... 253
다중 선택을 위한 else if ... 255
else와 if의 쌍 ... 258
중첩된 if ... 260
논리 연산자 ... 264
사용 가능한 철자 : iso646.h 헤더 파일 ... 266
우선 순위 ... 267
평가 순서 ... 269
범위 ... 269
단어 계수 프로그램 ... 270
조건 연산자 : ? ... 274
루프를 위한 도구 : continue와 break ... 276
continue문 ... 277
break문 ... 280
다중 선택 : switch와 break ... 282
switch문 사용 ... 284
한 라인의 첫 번째 문자만 읽기 ... 285
다중 라벨 ... 286
switch와 if else ... 289
goto문 ... 289
goto의 사용을 줄이는 방법 ... 289
주요 개념 ... 293
요약 ... 294
복습 문제 ... 295
프로그래밍 연습 ... 298
8장 문자 입출력과 유효한 입력 확인 ... 301
단일 문자 입출력 : getchar()와 putchar() ... 302
버퍼 ... 303
키보드 입력의 종료 ... 305
파일, 스트림, 그리고 키보드 입력 ... 305
EOF ... 306
방향 재설정과 파일 ... 309
UNIX, Linux 및 DOS의 방향 재설정 ... 310
편리한 사용자 인터페이스 생성 ... 315
버퍼되는 입력의 작동 ... 315
수치 입력과 문자 입력의 혼용 ... 318
입력의 유효성 확인 ... 321
프로그램 분석 ... 326
입력 스트림과 숫자 ... 327
메뉴 제공 ... 328
작업 선택 ... 328
원활한 실행 ... 328
문자와 수치 입력의 혼용 ... 331
주요 개념 ... 334
요약 ... 335
복습 문제 335
프로그래밍 연습 ... 336
9장 함수 ... 339
함수에 대한 복습 ... 339
간단한 함수의 작성과 사용 ... 341
프로그램 분석 ... 342
함수의 인수 ... 344
인수를 가진 함수의 정의 : 가인수(파라미터) ... 346
인수를 가진 함수의 원형 선언 ... 347
인수를 가진 함수의 호출 : 실인수 ... 348
함수를 블랙 박스로 비유하는 관점 ... 349
return 명령으로 함수의 값을 반환하는 방법 ... 350
함수형 ... 353
ANSI C함수 원형 선언 ... 354
예전 형식의 문제 ... 355
ANSI의 해결책 ... 356
void를 사용한 경우와 사용하지 않은 경우 ... 358
함수 원형의 추가 ... 358
함수의 재귀 호출 ... 359
재귀 호출의 작동 ... 359
재귀 호출의 원칙 ... 360
꼬리 재귀 호출 ... 362
재귀 호출과 반전 ... 364
재귀 호출의 장단점 ... 366
모든 C 함수는 동등 ... 367
두 개 이상의 소스 코드 파일을 가진 프로그램의 컴파일 ... 367
UNIX ... 367
Linux ... 368
DOS용 명령 라인 컴파일러 ... 368
윈도우와 매킨토시 컴파일러 ... 368
헤더 파일의 사용 ... 369
주소 찾기 : & 연산자 ... 373
호출하는 함수의 변수 교체 ... 375
포인터 : 소개 ... 377
간접 주소 지정 연산자 : * ... 378
포인터 선언 ... 379
함수간의 의사 소통을 위한 포인터 사용 ... 380
주요 개념 ... 385
요약 ... 385
복습 문제 ... 385
프로그래밍 연습 ... 387
10장 배열과 포인터 ... 389
배열 ... 389
배열의 초기화 ... 390
지정 초기화자(C99) ... 395
배열 값 할당 ... 396
배열 범위 ... 397
배열 크기의 지정 ... 399
다차원 배열 ... 399
2차원 배열 초기화 ... 403
다차원 배열 ... 404
포인터와 배열 ... 404
함수, 배열 그리고 포인터 ... 408
포인터 인수 사용 ... 411
설명 : 포인터와 배열 ... 414
포인터 연산 ... 414
배열 내용 보호 ... 417
const에 가인수 사용 ... 418
const에 대한 추가 사항 ... 420
포인터와 다차원 배열 ... 423
다차운 배열을 가리키는 포인터 ... 425
포인터 이식성 ... 427
함수와 다차원 배열 ... 429
가변 길이 배열(VLA) ... 432
복합 리터럴 ... 437
주요 개념 ... 439
요약 ... 440
복습 문제 ... 441
프로그램이 연습 ... 444
11장 문자열과 문자열 함수 ... 447
프로그램 내에서 열 정의하기 ... 449
문자열 상수(String Literals) ... 449
문자열 배열 및 초기화 ... 450
배열 대 포인터 ... 452
문자열 배열 ... 455
포인터와 문자열 ... 457
문자열 입력 ... 459
공간 만들기 ... 459
gets() 함수 ... 460
fgets() 함수 ... 462
scanf() 함수 ... 463
문자열 출력 ... 465
puts() 함수 ... 465
fputs() 함수 ... 467
printf() 함수 ... 468
자신만의 옵션(Do-It-Yourself Option) ... 469
문자열 함수 ... 471
strlen() 함수 ... 472
strcat()와 strncat() 함수 ... 473
strcmp()와 strncmp() 함수 ... 475
strcpy()와 strncpy() 함수 ... 481
sprintf() 함수 ... 486
기타 문자열 함수 ... 487
문자열 예제 : 문자열 정력 ... 490
정렬하기 ... 492
ctype.h 문자 함수 및 문자열 ... 493
명령 라인 함수 ... 495
통합 환경 내 명령 라인 인수 ... 498
Macintosh 명령 라인 인수 ... 498
문자열의 수 변환 ... 499
주요 개념 ... 502
요약 ... 502
복습문제 ... 503
프로그래밍 연습 ... 507
12장 저장 클래스, 링키지 및 메모리 관리 ... 509
저장 클래스(Storage Classes) ... 509
범위 ... 510
링키지 ... 512
저장 기간 ... 512
자동 변수 ... 513
레지스터 변수 ... 517
블록 범위를 갖는 정적 변수 ... 518
외부 링키지를 갖는 정적 변수 ... 520
내부 링키지를 갖는 정적 변수 ... 525
다중 파일 ... 525
저장 클래스 지시자 ... 526
저장 클래스와 함수 ... 529
알맞은 저장 클래스 ... 529
임의 숫자 생성 함수와 정적 변수 ... 530
주사위 던지기 ... 534
메모리 할당 : malloc()와 free() ... 538
free()의 중요성 ... 542
calloc() 함수 ... 543
동적 메모리 할당과 가변 길이 배열 ... 544
저장 클래스와 동적 메모리 할당 ... 545
ANSI C 형 지시자 ... 546
const 형 지시자 ... 546
volatile 형 지시자 ... 549
restrict 형 지시자 ... 550
기존 키워드를 위한 새로운 위치 ... 551
주요 개념 ... 552
요약 ... 553
복습 문제 ... 554
프로그래밍 연습 ... 556
13장 파일 입출력 ... 561
파일과의 커뮤니케이션 ... 561
파일의 정의 ... 562
I/O의 수준 ... 563
표준 파일 ... 563
표준 I/O ... 564
명령 라인 인수 점검하기 ... 565
fopen() 함수 ... 566
getc()와 putc()함수 ... 567
EOF ... 568
felose() 함수 ... 569
표준파일 ... 570
간단한 파일 압축 프로그램 ... 570
파일 I/OL : fprint(), fscanf(), fgets() 그리고 fputs() ... 572
fprintf()와 fscanf() 함수 ... 574
fgets()와 fputs() 함수 ... 574
임의 접근으로의 모험 : fseek()와 ftell() ... 576
fseek()와 ftell()의 작동법 ... 578
2진 모드 대 텍스트 모드 ... 579
이식성 ... 580
fgetpos() 및 fsetpos() 함수 ... 581
표준 I/O의 보이지 않는 작업 ... 581
기타 표준 I/O 함수 ... 582
int ungetc(int c, FILE *fp) 함수 ... 583
int fflush(FILE*fp) 함수 ... 583
int setvbuf(FILE *fp. char*buf, int mode, size_t size) 함수 ... 583
2진 I/O : fread()와 fwrite() ... 584
size_t fwrite(void *ptr, size_t size, size_t nmemb, FILE *fp) 함수 ... 585
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *fp) 함수 ... 586
int feof(FULE *fp)와 int ferror(FILE *fp)함수 ... 587
예제 ... 587
2진 I/O를 갖는 임의 접근 ... 590
주요 개념 ... 592
요약 ... 592
복습 문제 ... 593
프로그래밍 연습 ... 595
14장 구조체와 다른 데이터 형태 ... 559
예제 문제 : 도서 일람표 만들기 ... 599
구조체 선언 설정하기 ... 601
구조체 변수 정의하기 ... 602
구조체 초기화하기 ... 604
구조체의 지정 초기화자 ... 604
구조체 멤버에 접근하기 ... 605
구조체의 배열 ... 606
구조체의 배열 선언하기 ... 608
구조체 배열의 멤버 식별하기 ... 608
프로그램 논의 ... 610
중첩된 구조체들 ... 611
구조체에 대한 포인터 ... 613
구조체 포인터 선언과 초기화하기 ... 614
포인터에 의한 멤버 접근 ... 615
구조체에 대한 함수 ... 616
구조체 멤버 보내기 ... 616
구조체 주소 사용하기 ... 617
구조체를 인수로 전달하기 ... 619
그 외의 구조체 특징 ... 620
구조체 아니면 구조체에 대한 포인터? ... 624
구조체에서의 문자 배열 또는 문자 포인터 ... 625
구조체, 포인터, 그리고 malloc() ... 626
복합 리터럴 및 구조체(C99) ... 629
탄력적인 배열 멤버(C99) ... 630
구조체 배열을 사용한 함수 ... 633
파일에 구조체 내용 저장하기 ... 635
프로그램 주요 사항 ... 638
구조체 : 새로운 데이터 형태 만들기 ... 639
공용체 : 개요 ... 640
열거형 ... 644
enum상수 ... 645
기본값 ... 645
할당값 ... 645
용도 ... 646
공유 이름 공간 ... 648
typedef : 개요 ... 648
정교한 선언 ... 651
함수와 포인터 ... 653
주요 개념 ... 661
요약 ... 662
복습 문제 ... 662
프로그래밍 연습 ... 666
15장 비트 조가하기 ... 671
2진수, 비트, 바이트 ... 671
2진 정수 ... 672
부호화 정수 ... 673
2진 부동 소수점 ... 673
그 외 다른 진법 ... 674
8진법(Octal) ... 674
16진법 ... 675
C의 비트단위 연산자 ... 676
비트단위 논리 연산자 ... 676
사용법 : 마스크 ... 678
사용법 : 비트 on하기 ... 679
사용법 : 비트 off하기 ... 680
사용법 : 비트 토글링 ... 680
사용법 : 비트값 점검 ... 681
비트단위 Shift 연산자 ... 681
프로그래밍 예제 ... 683
다른 예제 ... 685
비트 필드 ... 687
비트 필드 예제 ... 688
비트 필드와 비트 연산자 ... 692
주요 개념 ... 698
요약 ... 699
복습 문제 ... 699
프로그램 문제 ... 701
16장 C 선행처리기와 C 라이브러리 ... 703
첫 번째 단계 ... 703
명백한 상수 : define ... 704
토근 ... 708
상수 재정의 ... 709
define에서 인수 사용하기 ... 710
매크로 인수에서 문자열 생성하기 : 연산자 ... 713
선행처리기 결합 : 연산자 ... 714
Variadic 매크로 : ...과 _VA_ARGS_ ... 715
매크로인가 함수인가? ... 717
파일 포함 : FINCLUDE ... 718
헤더 파일 : 예제 ... 719
헤더 파일의 사용 ... 722
그 밖의 지시문 ... 723
undef 지시문 ... 723
정의하기-C 선행처리기 조망도(perspective) ... 724
조건부 컴파일 ... 724
사전 정의된 매크로 ... 730
line과 error ... 732
pragma ... 732
인라인 함수 ... 733
C 라이브러리 ... 736
C 라이브러리로 액세스하기 ... 736
라이브러리 설명 이용하기 ... 737
Math 라이브러리 ... 738
일반적 유틸리티 라이브러리 ... 742
exit()와 atexit() 함수 ... 742
qsort()함수 ... 744
Assert 라이브러리 ... 749
string.h 라이브러리의 memcpy()와 memmove() ... 751
가변 인수 : stdarg.h ... 753
주요 개념 ... 756
요약 ... 756
복습 문제 ... 757
프로그래밍 연습 ... 758
17장 고급 데이터 표현 ... 761
데이터 표현 검색 ... 762
연결 리스트로 배열 검색하기 ... 765
연결 리스트 사용하기 ... 768
재고(부분적 변경) ... 773
추상 데이터형 ... 773
추상화 만들기 ... 775
인터페이스 만들기 ... 776
인터페이스 이용하기 ... 779
인터페이스 구현 ... 781
추상 데이터형으로 대기열 갖기 ... 789
인터페이스 데이터 표현 구현 ... 791
대기열 테스트하기 ... 801
대기열 시뮬레이션 ... 803
연결 리스트와 배열 ... 810
2진 검색 트리 ... 814
2진 트리 추상 데이터형 ... 815
2진 검색 트리 인터페이스 ... 816
2진 트리 구현 ... 819
트리 가로지르기(횡단) ... 828
트리 사용하기 ... 835
그 밖의 다른 방향 ... 842
주요 개념 ... 843
요약 ... 843
복습문제 ... 843
프로그래밍 연습 ... 844
부록 A. 복습 문제 해답 ... 847
1장 ... 847
2장 ... 847
3장 ... 849
4장 ... 852
5장 ... 854
6장 ... 858
7장 ... 861
8장 ... 865
9장 ... 866
10장 ... 868
11장 ... 871
12장 ... 874
13장 ... 875
14장 ... 879
15장 ... 882
16장 ... 884
17장 ... 886
부록 B. REFERENCE ... 891
Ⅰ절 추가 리소스 ... 891
잡지 ... 891
온라인 리소스 ... 891
C 언어 책 ... 893
프로그래밍 ... 893
참조 ... 893
C++책 ... 894
Ⅱ절 C 연산자 ... 894
산술 연산자 ... 895
관계 연산자 ... 895
할당 연산자 ... 896
논리 연산자 ... 896
조건 연산자 ... 897
포인터와 관련 연산자 ... 898
부호 연산자 ... 898
비트단위 연산자 ... 899
다양한 연산자 ... 900
Ⅲ절 기본형과 저장 클래스 ... 900
요약 : 기본적인 데이터형 ... 900
요약 : 간단한 변수를 어떻게 선언하는가 ... 902
요약 : 한정사 ... 904
Ⅳ절 표현식, 문과 프로그램 흐름 ... 905
요약 : 표현식과 문 ... 905
요약 : while 문 ... 906
요약 : for 문 ... 907
요약 : do while 문 ... 907
요약 : 선택을 하기 위해 if 문 사용하기 ... 908
요약 : switch를 포함하는 다중선택 ... 909
요약 : 프로그램 점프 ... 910
Ⅴ절 C99 추가 사항을 포함한 표준 ANSI C 라이브러리 ... 912
진단법 : assert.h ... 912
복소수 : complex.h(C99) ... 913
문자 조적 : ctype.h ... 915
오류 보고 : errno.h ... 916
부동소수점 환경 : fenv.h(C99) ... 916
정수형의 포맷 변환 : inttypes.h(C99) ... 918
지역화 : locale.h ... 919
수학 라이브러리 : math. h ... 922
비로컬 점프 : setjmp.h ... 927
신호 처리 : signal.h ... 927
가변 인수 : stdarg.h ... 929
불 지원 : stdbool.h(C99) ... 930
일반적인 정의 : stddef.h ... 930
정수형 : stdint.h ... 930
표준 I/O 라이브러리 : stdio.h ... 934
일반적인 유틸리티 : stdlib.h ... 937
문자열 처리 : string.h ... 942
일반적인 수학 함수 : tgmath.h(C99) ... 945
날짜와 시간 : time.h ... 946
확장된 다중 바이트와 와이드 문자 유틸리티 : wchar.h(C99) ... 950
와일드 문자 분류와 유용성 배치하기 : wctype.h(C99) ... 956
Ⅵ절 확장된 정수형 ... 959
정확한 폭 형식 ... 960
최소 폭 형식 ... 960
가장 빠른 최소 폭 형식 ... 961
최대 폭 형식 ... 962
포인터값을 취할 수 있는 정수 ... 962
확장된 정수형 상수 ... 963
Ⅶ절 확장된 문자 지원 ... 963
3중음자 시퀀스 ... 963
이중음자 ... 964
대안적인 철자:iso646.h ... 965
다중 바이트 문자 ... 965
유니버설 문자명 ... 966
와일드 문자 ... 966
와일드 문자와 다중 바이트 문자 ... 968
Ⅷ절 C99 수 계산의 확장 ... 968
IEC 부동소수점 표준 ... 969
fenv.h 헤더 파일 ... 969
STDC FP_CONTRACT 프라그마 ... 970
math.h 라이브러리에 추가 ... 970
복소수에 대한 지원 ... 971
Ⅸ절 C와 C++의 차이점 ... 973
함수 원형 ... 973
char 상수 ... 974
const 수정자 ... 975
구조체와 공용체 ... 976
열거 ... 977
void형 포인터 ... 977
불(Boolean)형 ... 977
대안적인 철자 ... 978
와이드 문자 지원 ... 978
복소수형 ... 978
인라인 함수 ... 978
C++가 가지고 있지 않는 것 ... 979
부록 C. REFERENCE ... 981
찾아보기 ... 985
더보기 닫기