PART 01 프로그램을 시작하기 전에 01장 컴퓨터와 프로그램 1.1 프로그램이 필요한 이유는? ... 24 1.2 프로그램은 무엇으로 만드는가? ... 25 1.3 프로그램은 어떻게 시작되었나? ... 27 1.4 프로그래밍은 요리를 만들어가는 과정과 같다 ... 28 1.5 컴퓨터는 프로그램을 이해하는가? ... 30 1.6 실행 가능한 프로그램이 만들어지기까지의 과정 ... 31 1.7 프로그램을 어디에서 어떻게 작성하는가? ... 33 단원정리 ... 35 연습문제 ... 36 PART 02 프로그램의 작성과 실행 02장 프로그램 작성에 필요한 기초 지식들 2.1 프로그램은 문제 해결을 위한 계산 과정의 연속 ... 40 2.1.1 상수와 연산자 그리고 명령 ... 40 2.1.2 데이터를 보관하는 장소, 변수 ... 41 2.2 인질을 담보로 하여 돈과 교환? ... 43 2.3 C 언어 맛보기 ... 45 단원정리 ... 48 연습문제 ... 50 03장 처음으로 작성하는 C 프로그램 3.1 변수를 이용한 프로그램의 작성과 실행 ... 52 3.1.1 Visual C++의 실행 ... 53 3.1.2 새 프로그램의 작성 ... 54 3.1.3 프로그램 저장과 컴파일 ... 57 3.1.4 컴파일 과정에서 나타나는 오류와 해결 방법 ... 59 3.1.5 실행 프로그램의 생성과 실행 ... 62 3.1.6 프로그램 작업 종료 ... 64 3.1.7 프로그램 불러오기, 수정과 재실행 ... 65 단원정리 ... 72 연습문제 ... 73 PART 03 데이터와 연산 04장 데이터의 표현과 종류 4.1 숫자 데이터의 차이 ... 76 4.2 숫자 데이터 형의 구분 ... 78 4.3 문자 데이터와 사용방법 ... 81 4.4 모든 데이터 형 ... 83 단원정리 ... 84 연습문제 ... 85 05장 계산을 위해 필요한 연산자와 연산식 5.1 산술 연산자(+, -, *, /, %) ... 88 5.2 증가, 감소 연산자(++, --) ... 91 5.3 대입 연산(=, +=, *=, …) ... 92 5.4 수식을 연산식으로 표현하는 방법 ... 94 5.5 연산 순서 ... 96 5.6 그 밖의 연산자 ... 102 5.6.1 관계 연산자(〈, 〉, ==, !=, …) ... 102 5.6.2 조건 연산자(?:) ... 103 5.6.3 논리 연산자(&&, ∥, !) ... 104 5.6.4 비트 연산자(《, 》, ^, …) ... 105 5.6.5 콤마 연산자(,) ... 106 5.6.7 형 변환과 캐스트 연산자 ... 107 5.6.8 sizeof 연산자 ... 108 5.6.9 연산자 우선순위 ... 109 단원정리 ... 110 연습문제 ... 112 PART 04 기본적인 출력과 입력 06장 printf( )와 scanf( ) 6.1 printf()의 사용방법 ... 116 6.2 출력할 데이터의 자릿수 맞추기 ... 119 6.3 여러 데이터를 한 줄에 출력하는 방법 ... 121 6.4 scanf()의 사용방법 ... 122 6.5 여러 데이터를 한 줄로 입력하는 방법 ... 125 6.6 여러 가지 확장 문자들 ... 128 6.7 형식 지정자의 종류 ... 129 6.8 출력할 데이터의 자릿수 맞추기 ... 130 6.9 입력할 데이터의 자릿수 맞추기 ... 132 6.10 여러 데이터를 한 줄로 입력하는 방법 ... 133 단원정리 ... 135 연습문제 ... 136 PART 05 제어문 07장 조건에 대한 판단과 선택 7.1 조건에 대해 참인 경우만 처리, if 문 ... 141 7.2 조건에 대해 참 또는 거짓을 구분하여 선택, if else 문 ... 143 7.3 2개 이상의 조건에 대해 참 또는 거짓을 구분하여 선택, if ∼ else if 문 ... 146 7.4 특정한 사례를 선택, switch case 문 ... 148 7.5 한번에 여러 조건을 판단 ... 151 7.6 범위(구간)로 표시되는 조건의 판단 ... 153 7.7 switch case 문의 응용 ... 154 단원정리 ... 156 연습문제 ... 157 08장 반복문 8.1 횟수가 정해진 반복, for 문 ... 161 8.2 횟수가 정해지지 않은 반복, while 문 ... 167 8.2.1 먼저 조건식을 판단하여 반복여부를 결정, while 문 ... 168 8.2.2 먼저 반복한 후에 조건식을 판단하여 반복, do while 문 ... 169 8.3 for 문의 응용 ... 171 8.3.1 1부터 n까지의 정수 합을 계산 ... 171 8.3.2 n!의 계산 ... 174 8.3.3 중첩된 반복문과 구구단 ... 175 8.3.4 for 문의 축소와 확장 ... 182 단원정리 ... 184 연습문제 ... 185 09장 처리의 흐름을 조절 9.1 처리 순서의 흐름을 중단하는 break 문 ... 189 9.2 처리 순서의 흐름을 계속 이어주는 continue 문 ... 190 9.3 처리 순서를 이동시키는 goto 문 ... 191 단원정리 ... 193 연습문제 ... 194 PART 06 함수 10장 특별한 기능을 처리하도록 만들어진 프로그램 단위, 함수 10.1 사용자가 정의하는 함수(user defined function) ... 200 10.2 함수를 사용하는 프로그램의 구성과 형식 ... 201 10.3 결과 값(반환 값)이 있는 함수 ... 203 10.4 함수 main()과 여러 개의 사용자 정의 함수 ... 205 10.5 void main()과 int main(void) ... 206 10.6 인자가 3개 이상인 함수 ... 207 10.7 함수 원형과 사용자 정의 함수의 위치 ... 209 10.8 매크로 상수와 함수 ... 211 10.9 재귀 함수와 호출 ... 212 단원정리 ... 218 연습문제 ... 219 11장 변수에 대한 또 다른 속성, 기억 클래스 11.1 지역(local) 변수와 전역(global) 변수 ... 223 11.2 자동(auto) 변수 ... 226 11.3 정적(static) 변수 ... 226 11.4 외부(extern) 변수 ... 230 11.5 레지스터(register) 변수 ... 231 단원정리 ... 233 연습문제 ... 234 12장 라이브러리 함수와 응용 12.1 출력 함수 printf() ... 237 12.2 입력 함수 scanf() ... 239 12.3 문자와 문자열 관련 함수 ... 244 12.3.1 문자 분류 함수 (헤더 파일 〈ctype.h〉) ... 244 12.3.2 변환 함수(헤더파일 〈stdlib.h〉) ... 245 12.3.3 문자열 처리와 검색 함수(헤더 파일 〈string.h〉) ... 249 12.4 수학 계산 함수 (헤더 파일 〈math.h〉) ... 256 12.5 화면과 커서의 제어 ... 264 12.5.1 화면 지우기 ... 265 12.5.2 커서의 위치 제어 ... 267 12.6 날짜와 시간 관련 함수(헤더 파일 〈time.h〉) ... 270 12.6.1 현재의 날짜와 시간을 출력 ... 271 12.6.2 시간 차이의 계산 ... 273 12.6.3 시간을 지연시키는 함수 ... 275 12.7 임의의 숫자 난수(헤더 파일 〈stdlib.h〉) ... 278 12.7.1 난수 생성 ... 278 12.7.2 매 실행마다 다른 난수를 생성하는 방법(난수 초기화) ... 280 12.7.3 중복되지 않는 난수의 생성 ... 282 단원정리 ... 284 연습문제 ... 285 PART 07 배열(array)과 포인터(pointer) 13장 번호가 붙은 변수, 배열 13.1 여러 개의 변수가 필요한 경우 ... 291 13.2 배열과 변수의 차이 ... 291 13.3 배열의 출력과 입력 ... 293 13.4 1차원 배열의 선언과 사용 ... 294 13.5 배열과 문자열 ... 296 13.5.1 문자열을 배열에 저장하는 방법 ... 296 13.5.2 문자열의 입력과 출력 ... 297 13.6 2차원 배열의 초기화와 출력 ... 299 13.7 함수와 배열 ... 301 13.7.1 함수의 인자로 배열을 사용하는 방법 ... 302 13.7.2 함수의 결과로 배열을 반환하는 방법 ... 304 단원정리 ... 306 연습문제 ... 307 14장 포인터 14.1 데이터와 메모리 주소 ... 311 14.2 메모리 주소를 저장하는 포인터 변수 ... 313 14.3 포인터와 배열 ... 318 14.4 포인터와 문자열 ... 319 14.5 포인터에 대한 연산 ... 322 14.6 포인터를 인자로 사용하는 함수 호출 ... 326 14.7 포인터 배열 ... 327 14.8 포인터와 함수 ... 330 14.8.1 함수 포인터 ... 330 14.8.2 함수의 결과 값으로 포인터를 반환하는 함수 ... 331 14.9 키워드 const ... 333 14.10 main()함수의 인자로 사용하는 포인터 ... 334 단원정리 ... 339 연습문제 ... 340 PART 08 사용자가 정의하는 데이터 형 15장 여러 데이터를 하나로 묶는 구조체 15.1 구조체가 필요한 경우 ... 345 15.2 구조체 만들기 ... 346 15.3 구조체와 데이터 ... 348 15.3.1 구조체 변수의 초기화와 멤버별 데이터 출력 ... 348 15.3.2 구조체 변수에 데이터 저장 ... 350 15.3.3 입력 데이터를 구조체 변수에 저장 ... 351 15.4 구조체 변수, 구조체 멤버 간의 데이터 저장 ... 352 15.5 구조체 배열 ... 354 15.6 구조체 포인터 ... 355 15.7 구조체 멤버가 배열 또는 포인터인 경우의 데이터 처리 ... 356 15.8 구조체 형의 크기와 멤버의 위치 ... 358 15.9 구조체와 함수 ... 360 15.9.1 함수의 인자로 구조체 변수를 사용 ... 360 15.9.2 함수의 인자로 구조체 포인터를 사용 ... 361 15.9.3 함수의 인자로 구조체 배열을 사용 ... 362 15.9.4 함수의 결과값으로 구조체를 반환하는 함수 ... 363 15.10 구조체를 헤더파일로 저장하여 사용하는 방법 ... 364 15.11 구조체 속의 구조체(중첩된 구조체) ... 366 15.12 자기 참조 구조체 ... 370 단원정리 ... 375 연습문제 ... 376 16장 그 외의 사용자 정의 데이터 형 16.1 구조체와 비슷하지만 차이가 있는 공용체, union ... 381 16.2 상수들의 집합을 정수로 대신하는 열거형, enum ... 383 16.3 비트 필드(bit field) ... 384 단원정리 ... 386 연습문제 ... 387 PART 09 파일을 이용한 데이터의 입력과 출력 17장 파일 출력과 파일 입력 17.1 파일처리를 위한 기초 지식 ... 391 17.1.1 파일 열기와 파일 닫기 ... 391 17.1.2 파일 저장 방식 ... 393 17.1.3 파일 데이터와 파일 포인터 ... 394 17.2 텍스트 방식의 파일 다루기 ... 395 17.2.1 텍스트 방식의 파일 입출력 함수 ... 399 17.2.2 문자 단위의 파일처리 ... 400 17.2.3 문자열 단위의 파일처리 ... 406 17.2.4 입출력 형식을 지정하는 파일 처리 ... 410 17.2.5 키보드(콘솔)입력과 파일 출력 ... 414 17.3 이진 방식의 파일 다루기 ... 417 17.3.1 이진 방식의 파일 출력 ... 418 17.3.2 이진 방식의 파일 입력 ... 422 17.4 원하는 블록의 위치에서 파일 읽기와 쓰기가 가능한 랜덤 처리 방식 ... 424 17.4.1 파일 포인터의 위치를 이동하는 파일 입력 ... 427 단원정리 ... 430 연습문제 ... 432 PART 10 고급 프로그래밍 기술 18장 응용 프로그램 개발을 위해 필요한 방법과 문법들 18.1 프로젝트와 분할 컴파일 ... 437 18.1.1 프로젝트 만들기 ... 437 18.1.2 분할 컴파일 ... 443 18.1.3 프로젝트 불러오기 ... 446 18.1.4 Turbo C++에서의 분할 컴파일 ... 448 18.2 프로그램 실행 중에 기억공간을 확보하는 동적 할당 ... 454 18.2.1 동적 기억장소 할당과 해제 ... 454 18.2.2 구조체와 동적 할당 ... 456 18.3 전처리기 ... 457 18.3.1 include와 헤더 파일 ... 458 18.3.2 define과 매크로 ... 461 18.3.3 미리 정의된 매크로 ... 465 18.3.4 조건 컴파일 ... 466 18.4 컴파일과 실행에서 발생되는 오류와 해결 ... 469 18.5 배포 프로그램 ... 472 단원정리 ... 478 연습문제 ... 479 PART 11 응용 프로그래밍 19장 응용 프로그래밍 part Ⅰ 19.1 진법 변환 ... 484 19.1.1 10진수를 2진수로 변환 ... 484 19.1.2 10진수를 8진수로 변환 ... 493 19.2 반복문과 수열 ... 495 19.2.1 등차수열 ... 495 19.2.2 등비수열 ... 497 19.2.3 계차수열 ... 499 19.3 비트 연산과 응용 ... 500 19.3.1 비트 와이즈 연산 ... 501 19.3.2 비트 시프트 연산 ... 504 19.4 난수를 이용한 게임 ... 505 19.4.1 컴퓨터가 생성한 정수 난수 맞추기 ... 506 19.4.2 컴퓨터와 하는 가위바위보 게임 ... 508 19.4.3 구구단 문제풀기 ... 510 19.5 날짜수의 응용 ... 516 19.6 기초 통계 계산 ... 519 19.6.1 대표값 ... 519 19.6.2 산포도 ... 523 19.6.3 통계 그래프 ... 526 19.7 메뉴 선택으로 진행하는 프로그램 ... 532 19.7.1 메뉴로 진행하는 구구단 프로그램 ... 534 19.7.2 서브(sub)메뉴가 있는 프로그램 ... 538 19.8 텍스트 파일처리 응용 프로그램 ... 540 19.8.1 한 줄씩 데이터를 구분하여 파일 출력 ... 540 19.8.2 파일 입력 데이터에 대한 기초 통계 계산 ... 541 19.9 이진 파일처리 응용 프로그램 ... 542 19.9.1 block 단위 데이터의 파일 출력 ... 542 19.9.2 block 단위 데이터의 파일 입력 ... 546 19.9.3 전체 block을 한 번에 파일 입력 ... 549 19.9.4 파일 입력 데이터에 대한 검색 ... 551 19.9.5 block 데이터의 삭제 ... 555 19.9.6 block 데이터의 수정 ... 558 20장 응용 프로그래밍 part Ⅱ 20.1 자료 구조 ... 562 20.1.1 단순 연결 리스트 ... 562 20.1.2 이중 연결 리스트와 트리 ... 571 20.1.3 트리의 운행 ... 573 20.2 데이터 검색(Search) ... 578 20.2.1 이진(binary) 검색 ... 579 20.2.2 피보나치(Fibonacci)검색 ... 582 20.3 데이터 정렬(sort) ... 585 20.3.1 삽입(insertion) 정렬 ... 586 20.3.2 bubble 정렬 ... 587 20.3.3 선택 정렬 ... 591 PART 12 과제와 프로젝트 프로그램(CD) 21장 과제 프로그램 [과제 01] 최대 공약수와 최소 공배수 ... 594 [과제 02] 소수 이하 임의의 자릿수에서 반올림 ... 596 [과제 03] 비만도 측정과 판정 ... 598 [과제 04] 고속도로 통행요금 계산 ... 600 [과제 05] 당구장 이용 요금 계산 ... 601 [과제 06] 사원 봉급 계산 ... 602 [과제 07] 승용차 세금 계산 ... 604 [과제 08] 전력 요금 청구서 ... 605 [과제 09] 수도 요금 청구서 ... 607 [과제 10] 행렬의 합, 차 그리고 곱의 계산 ... 609 [과제 11] 파스칼의 삼각형 ... 610 [과제 12] 사칙연산 계산기 ... 612 [과제 13] 숫자 야구게임 ... 613 [과제 14] 사용자가 생각한 숫자를 컴퓨터가 맞추는 게임 ... 615 [과제 15] 한자리 디지털 숫자 출력 ... 617 [과제 16] 주유기 메타 출력 ... 618 [과제 17] 정수형 숫자의 카운트 ... 619 [과제 18] 실수형 숫자의 카운트 ... 621 [과제 19] 문장에 사용된 알파벳, 숫자, 기타문자의 카운트 ... 622 [과제 20] 서기를 간지로 변환 ... 624 [과제 21] 특정일로부터 며칠 후 계산 ... 625 [과제 22] 특정일의 요일 계산 ... 626 [과제 23] 세계 주요 도시의 현재 시간 ... 627 [과제 24] stopwatch ... 629 [과제 25] 동전 던지기 모의실험 ... 632 [과제 26] 주사위 던지기 모의실험과 막대그래프 출력 ... 633 [과제 27] 주택복권 당첨 번호 발생기 ... 634 [과제 28] sine과 cosine 그래프를 동시에 출력 ... 636 [과제 29] 발 크기에 대한 통계 조사 ... 637 [과제 30] 파일에 포함된 알파벳 문자 카운트 ... 638 [과제 31] 파일크기의 계산과 파일내용을 거꾸로 출력 ... 640 [과제 32] 이용자가 1명인 엘리베이터 운행 제어 ... 642 22장 프로젝트 프로그램 [프로젝트 01] 주민등록번호를 이용한 생년월일, 성별, 띠 그리고 만 나이 계산 ... 644 [프로젝트 02] 도량형 환산 ... 646 [프로젝트 03] 자동판매기 제어 ... 648 [프로젝트 04] 임의의 정수형 숫자에 대한 디지털 숫자 출력 ... 650 [프로젝트 05] 임의의 아라비아 숫자를 로마 숫자로 변환 ... 652 [프로젝트 06] 2, 8, 10, 16진법 변환 ... 654 [프로젝트 07] 스택을 이용한 후위 표기법 ... 656 [프로젝트 08] 스택(stack)을 이용한 계산기 ... 660 [프로젝트 09] 특정한 월의 바이오리듬(Biorhythm) ... 662 [프로젝트 10] 로또 추첨과 같은 방식의 로또 번호 생성 ... 665 [프로젝트 11] 로또당첨에 대한 모의실험 ... 668 [프로젝트 12] 구구단 학습 프로그램 ... 669 [프로젝트 13] 정규난수 생성 ... 672 [프로젝트 14] 대기 행렬 모형 ... 674 [프로젝트 15] 이용자가 2명인 엘리베이터의 운행제어 ... 676 [프로젝트 16] 하노이 탑 ... 649 [프로젝트 17] 랜덤 접근에 의한 파일 데이터의 추가와 변경 ... 681 [프로젝트 18] 텍스트 파일에 대한 정렬 ... 683 [프로젝트 19] 이진 파일에 대한 정렬 ... 684 [프로젝트 20] 학생 성적 파일 관리 ... 686 [프로젝트 21] 고객 파일 관리 ... 689 [프로젝트 22] 보간(interploation) 검색 ... 691 [프로젝트 23] heap 정렬 ... 695 [프로젝트 24] shell 정렬 후 파일 출력 ... 698 [프로젝트 25] quick 정렬 후 파일 출력 ... 701 부록 부록 1 ASCII 코드표 ... 706( 부록 2 키워드(keyword)와 예약어(reserved word) ... 709( 부록 3 [여러 종류의 데이터 표] ... 709( 찾아보기 ... 712(