C How to Program (8th Edition): Hướng dẫn lập trình C/C++ - Paul & Harvey Deitel

Tài liệu nghiên cứu C how to program with an introduction to c global edition 8th edition, tổng hợp lý thuyết và thực hành, cung cấp kiến thức chuyên sâu về .

Trường đại học

University of Programming

Chuyên ngành

Computer Science

Người đăng

Ẩn danh

Thể loại

textbook

2023

1K
2
0

Phí lưu trữ

0 Point

Tóm tắt

I. Review sách C How to Program 8th Edition của Deitel

Cuốn sách C How to Program with an introduction to C++, Global Edition 8th Edition là một tài liệu học thuật toàn diện, được biên soạn bởi hai chuyên gia hàng đầu là Paul DeitelHarvey Deitel. Xuất bản bởi Pearson Education, giáo trình này đã trở thành một tài liệu tham khảo kinh điển cho sinh viên và lập trình viên trên toàn thế giới. Với mã ISBN 9780133976892, phiên bản thứ 8 tiếp tục củng cố vị thế là một trong những sách lập trình cho người mới bắt đầu tốt nhất, cung cấp nền tảng vững chắc về ngôn ngữ lập trình C và giới thiệu các khái niệm cốt lõi của lập trình C++. Điểm đặc trưng của series sách từ Deitel & Deitel là phương pháp tiếp cận "live-code", trình bày các khái niệm thông qua các chương trình hoàn chỉnh, có thể chạy được, thay vì các đoạn mã rời rạc. Mỗi ví dụ đều đi kèm với kết quả thực thi, giúp người học hiểu rõ cách chương trình hoạt động trong thực tế. Phiên bản thứ 8 được cập nhật để tích hợp các tính năng mới từ tiêu chuẩn C11 và C99, đồng thời tất cả mã nguồn đều được kiểm tra trên ba hệ điều hành phổ biến: Linux, Windows và OS X. Điều này đảm bảo tính di động và phù hợp của kiến thức trong môi trường phát triển hiện đại. Cuốn sách không chỉ là một giáo trình C mà còn là một cầu nối quan trọng, dẫn dắt người đọc từ lập trình có cấu trúc sang hướng đối tượng OOP, một kỹ năng thiết yếu trong ngành công nghiệp phần mềm. Nó được thiết kế để phục vụ cả những người chưa có kinh nghiệm lập trình lẫn các lập trình viên chuyên nghiệp muốn nâng cao kỹ năng.

1.1. Tác giả Paul Deitel Harvey Deitel Chuyên gia hàng đầu

Tác giả của cuốn sách là Paul DeitelHarvey Deitel, hai tên tuổi lớn trong lĩnh vực đào tạo và xuất bản tài liệu công nghệ. Paul Deitel, CEO của Deitel & Associates, Inc., tốt nghiệp từ MIT và có kinh nghiệm giảng dạy cho nhiều tập đoàn lớn như Cisco, IBM, Siemens. Tiến sĩ Harvey Deitel, với hơn 54 năm kinh nghiệm, đã từng là trưởng khoa Khoa học Máy tính tại Đại học Boston. Sự kết hợp giữa kinh nghiệm sư phạm và chuyên môn kỹ thuật sâu rộng đã tạo nên thương hiệu Deitel & Deitel, nổi tiếng với các giáo trình tin học đại cương và sách chuyên ngành bán chạy nhất thế giới. Phong cách viết của họ luôn tập trung vào sự rõ ràng, thực tiễn và tính ứng dụng cao, giúp hàng triệu người trên thế giới bắt đầu sự nghiệp lập trình.

1.2. Đối tượng và mục tiêu của cuốn giáo trình C này

Cuốn C How to Program, 8th Edition hướng đến một đối tượng đa dạng, từ sinh viên các khóa học CS1, CS2 đến những người tự học lập trình C tại nhà. Mục tiêu chính là cung cấp một sự giới thiệu toàn diện, đầy thử thách nhưng cũng thú vị về ngôn ngữ C. Sách không yêu cầu người đọc có kinh nghiệm lập trình từ trước. Nội dung được xây dựng theo lộ trình từ các khái niệm cơ bản nhất như biến, kiểu dữ liệu, cấu trúc điều khiển, sau đó tiến dần đến các chủ đề phức tạp như con trỏ, cấu trúc dữ liệu và xử lý tệp. Hơn nữa, sách còn mở rộng sang C++ introduction, giúp người học có cái nhìn tổng quan về lập trình hướng đối tượng, chuẩn bị hành trang để tiếp cận các công nghệ phần mềm tiên tiến.

1.3. Các cập nhật quan trọng trong Global Edition 8th Edition

Phiên bản thứ 8 mang đến nhiều cải tiến đáng giá. Đáng chú ý nhất là việc tích hợp sâu hơn các tính năng của tiêu chuẩn C11 và C99, giúp nội dung luôn cập nhật với xu hướng phát triển ngôn ngữ. Toàn bộ mã nguồn đã được kiểm thử lại trên các trình biên dịch phổ biến như GNU gcc trên Linux, Visual C++ trên Windows và LLVM trên OS X. Các chương về lập trình C++hướng đối tượng OOP cũng được làm mới dựa trên cuốn C++ How to Program, 9/e, tương thích với tiêu chuẩn C++11. Phong cách trình bày mã nguồn cũng được tinh chỉnh để dễ đọc hơn. Đặc biệt, sách bổ sung các mục "Secure C Programming" ở cuối nhiều chương, nhấn mạnh các kỹ thuật lập trình an toàn để tránh các lỗ hổng bảo mật phổ biến.

II. Thách thức khi học lập trình C với các tài liệu cũ

Việc learn C programming đặt ra nhiều thách thức, đặc biệt với những người mới bắt đầu sử dụng các tài liệu lỗi thời hoặc thiếu tính sư phạm. Một trong những rào cản lớn nhất là sự phức tạp của các khái niệm cốt lõi như con trỏ và quản lý bộ nhớ. Nhiều C programming textbook truyền thống thường giải thích các chủ đề này một cách trừu tượng, thiếu ví dụ minh họa trực quan, khiến người học dễ nản lòng. Vấn đề thứ hai là sự thiếu nhất quán giữa các phiên bản và trình biên dịch C. Các tài liệu cũ không đề cập đến các tiêu chuẩn mới như C99 hay C11, dẫn đến việc người học viết mã không di động, không tận dụng được các tính năng ngôn ngữ hiện đại và có thể gặp lỗi không tương thích khi chuyển đổi môi trường. Hơn nữa, việc tập trung quá nhiều vào cú pháp mà bỏ qua các nguyên tắc kỹ thuật phần mềm như structured programming (lập trình có cấu trúc) khiến người học khó xây dựng các chương trình lớn, có khả năng bảo trì. Các chương trình thường trở nên rối rắm và khó gỡ lỗi. Cuối cùng, một thách thức không nhỏ là sự thiếu hụt các hướng dẫn về lập trình an toàn. Các lỗi như tràn bộ đệm (buffer overflow) là nguyên nhân của nhiều lỗ hổng bảo mật nghiêm trọng, nhưng lại ít được đề cập trong các giáo trình cũ. Cuốn C How to Program 8th Edition của Deitel ra đời để giải quyết triệt để những vấn đề này, cung cấp một lộ trình học tập hiện đại, an toàn và hiệu quả.

2.1. Khó khăn trong việc hiểu con trỏ trong C pointers in C

Con trỏ (pointers) là một trong những tính năng mạnh mẽ nhất nhưng cũng khó hiểu nhất của ngôn ngữ C. Nhiều người mới học cảm thấy bối rối với các khái niệm như địa chỉ bộ nhớ, tham chiếu, hủy tham chiếu và số học con trỏ. Các sách giáo khoa truyền thống thường trình bày pointers in C như một chủ đề độc lập, tách rời khỏi các ứng dụng thực tế. Điều này làm người học không thấy được lợi ích và mục đích của việc sử dụng con trỏ, chẳng hạn như trong việc quản lý bộ nhớ động, xây dựng các data structures in C hiệu quả, hay truyền tham số cho hàm bằng tham chiếu. Sách của Deitel giải quyết vấn đề này bằng cách giới thiệu con trỏ một cách tuần tự, kết hợp với các ví dụ thực tế như sắp xếp mảng, xử lý chuỗi và mô phỏng xáo bài.

2.2. Thiếu tài liệu về lập trình có cấu trúc structured programming

Lập trình có cấu trúc là một phương pháp luận nền tảng, giúp chia nhỏ một chương trình phức tạp thành các module đơn giản, dễ quản lý hơn thông qua việc sử dụng các cấu trúc điều khiển tuần tự, lựa chọn (if-else, switch) và lặp (while, for). Tuy nhiên, nhiều người tự học lập trình C thường bỏ qua nguyên tắc này và lạm dụng các lệnh nhảy như goto, dẫn đến mã nguồn "spaghetti code" khó đọc và khó bảo trì. Structured programming không chỉ là một kỹ thuật mà còn là một tư duy thiết kế. Giáo trình của Deitel dành riêng các Chương 3 và 4 để trình bày chi tiết về phát triển chương trình có cấu trúc, sử dụng các nghiên cứu tình huống (case study) để minh họa cách áp dụng phương pháp top-down, stepwise refinement (tinh chỉnh từng bước từ trên xuống) để giải quyết vấn đề một cách có hệ thống.

III. Phương pháp Live Code trong C How to Program 8th Edition

Phương pháp tiếp cận "Live-Code" là dấu ấn đặc trưng và là yếu tố thành công cốt lõi của series sách C How to Program do Deitel & Deitel phát triển. Thay vì trình bày các khái niệm lý thuyết suông hoặc các đoạn mã nhỏ lẻ, phương pháp này tập trung vào việc sử dụng các chương trình hoàn chỉnh, hoạt động được để giảng dạy. Mỗi chương trình mẫu không chỉ minh họa một cú pháp hay một tính năng ngôn ngữ, mà còn được đặt trong một bối cảnh có ý nghĩa, giúp người học hiểu được mục đích và cách ứng dụng kiến thức vào giải quyết vấn đề thực tế. Mỗi ví dụ mã nguồn đều được theo sau bởi một hoặc nhiều kết quả thực thi mẫu, cho thấy chính xác chương trình sẽ xuất ra những gì. Cách tiếp cận này mang lại nhiều lợi ích. Thứ nhất, nó thúc đẩy việc học tập chủ động; người học được khuyến khích tự gõ lại, chạy và tinh chỉnh mã nguồn. Thứ hai, nó loại bỏ sự mơ hồ, giúp người học thấy rõ mối liên hệ giữa mã lệnh và kết quả đầu ra. Thứ ba, nó nhấn mạnh tầm quan trọng của kỹ thuật phần mềm tốt ngay từ đầu. Các chương trình trong sách được viết một cách rõ ràng, có chú thích đầy đủ và tuân thủ các quy tắc lập trình tốt. Phương pháp này biến việc học lập trình C từ một quá trình trừu tượng thành một trải nghiệm thực hành, trực quan và hiệu quả, đặc biệt hữu ích cho những người mới bắt đầu.

3.1. Phân tích các ví dụ mã nguồn hoàn chỉnh và thực tiễn

Điểm mạnh của phương pháp "Live-Code" nằm ở chất lượng của các ví dụ. Sách C How to Program 8th Edition cung cấp hàng trăm chương trình hoàn chỉnh, từ những ví dụ đơn giản như in một dòng văn bản đến các ứng dụng phức tạp hơn như hệ thống xử lý giao dịch, mô phỏng trò chơi, và triển khai các cấu trúc dữ liệu. Các ví dụ này không chỉ đúng về mặt cú pháp mà còn được thiết kế để dễ đọc, dễ hiểu và dễ mở rộng. Tác giả sử dụng kỹ thuật syntax shading (tô màu cú pháp) tương tự như trong các IDE hiện đại để làm nổi bật các thành phần khác nhau của mã. Các phần quan trọng nhất trong mỗi đoạn mã được đóng khung màu xám để thu hút sự chú ý. Cách trình bày này giúp người học tập trung vào khái niệm đang được thảo luận và nhanh chóng nắm bắt logic của chương trình.

3.2. Tầm quan trọng của thư viện chuẩn C C Standard Library

Một phần quan trọng của việc học C là biết cách sử dụng hiệu quả bộ sưu tập các hàm có sẵn trong C Standard Library. Thay vì "phát minh lại bánh xe", sách khuyến khích tư duy tái sử dụng phần mềm (software reuse). Cuốn giáo trình C này giới thiệu và giải thích chi tiết cách sử dụng các hàm từ các thư viện quan trọng như <stdio.h> cho vào/ra, <math.h> cho các phép toán, <string.h> để xử lý chuỗi và <stdlib.h> cho các tiện ích chung. Việc sử dụng các hàm thư viện chuẩn không chỉ giúp tiết kiệm thời gian phát triển mà còn cải thiện hiệu suất và tính di động của chương trình, vì các hàm này đã được tối ưu và có sẵn trên hầu hết mọi nền tảng. Sách tích hợp việc sử dụng thư viện chuẩn một cách tự nhiên vào các ví dụ "live-code", giúp người học làm quen và áp dụng chúng một cách thành thạo.

IV. Lộ trình học lập trình C từ cơ bản đến nâng cao

Cuốn C How to Program 8th Edition xây dựng một lộ trình học tập logic và có cấu trúc, dẫn dắt người đọc từ những khái niệm cơ bản nhất đến các chủ đề nâng cao một cách bài bản. Lộ trình này được thiết kế để đảm bảo người học xây dựng một nền tảng kiến thức vững chắc trước khi chuyển sang các nội dung phức tạp. Quá trình bắt đầu với việc giới thiệu về máy tính, môi trường phát triển C và một chương trình C đơn giản. Tiếp theo, sách tập trung vào các nguyên tắc của structured programming, bao gồm các cấu trúc điều khiển, vòng lặp và câu lệnh lựa chọn. Sau khi người học đã nắm vững cách kiểm soát luồng chương trình, sách giới thiệu về hàm (functions), một khái niệm then chốt cho việc module hóa chương trình. Các chương tiếp theo đi sâu vào các thành phần cốt lõi của C, bao gồm Mảng, Con trỏ và Chuỗi. Đây là những chủ đề thường gây khó khăn nhưng được sách giải thích cặn kẽ qua nhiều ví dụ. Các chương sau đó đề cập đến các chủ đề nâng cao hơn như Cấu trúc (Structures), Union, Thao tác bit, Xử lý tệp và cuối cùng là data structures in C như danh sách liên kết, ngăn xếp, hàng đợi và cây nhị phân. Lộ trình này đảm bảo rằng người học không chỉ biết cách viết mã C mà còn hiểu sâu sắc cách tổ chức dữ liệu và xây dựng các ứng dụng hiệu quả.

4.1. Từ kiểu dữ liệu mảng đến các cấu trúc điều khiển

Các chương đầu của sách tập trung vào việc xây dựng nền tảng. Người học sẽ bắt đầu với các khái niệm cơ bản nhất của lập trình C: biến, các kiểu dữ liệu (int, float, char), các toán tử số học và quan hệ. Chương 3 và 4 là trọng tâm của phần này, giới thiệu chi tiết về structured programming. Sách trình bày các thuật toán sử dụng sơ đồ khối và mã giả trước khi triển khai bằng mã C thực tế. Người học sẽ nắm vững cách sử dụng các câu lệnh if, if...else, switch để ra quyết định và các vòng lặp while, for, do...while để thực hiện các tác vụ lặp đi lặp lại. Chương 6 giới thiệu về Mảng, một cấu trúc dữ liệu cơ bản để lưu trữ một tập hợp các phần tử cùng kiểu, tạo tiền đề cho việc xử lý các tập dữ liệu lớn.

4.2. Làm chủ con trỏ pointers in C và xử lý chuỗi ký tự

Chương 7, C Pointers, là một trong những chương quan trọng nhất. Sách tiếp cận chủ đề này một cách cẩn thận, bắt đầu bằng định nghĩa và khởi tạo biến con trỏ, sau đó là truyền đối số cho hàm bằng tham chiếu (pass-by-reference). Các khái niệm phức tạp hơn như số học con trỏ, mối quan hệ giữa con trỏ và mảng, và con trỏ hàm được minh họa bằng các ví dụ rõ ràng, chẳng hạn như triển khai thuật toán sắp xếp nổi bọt (Bubble Sort). Chương 8 tiếp nối bằng cách tập trung vào xử lý ký tự và chuỗi, giới thiệu các hàm hữu ích từ thư viện <string.h><ctype.h>, những công cụ không thể thiếu khi làm việc với dữ liệu văn bản. Việc nắm vững hai chương này là chìa khóa để trở thành một lập trình viên C thành thạo.

4.3. Giới thiệu cấu trúc dữ liệu trong C data structures in C

Sau khi đã có nền tảng vững chắc về con trỏ và quản lý bộ nhớ động, Chương 12 giới thiệu về các data structures in C. Đây là bước chuyển tiếp quan trọng từ việc chỉ viết các chương trình nhỏ sang thiết kế các hệ thống phần mềm phức tạp. Sách bắt đầu với các cấu trúc tự tham chiếu (self-referential structures), nền tảng để xây dựng các cấu trúc dữ liệu động. Sau đó, sách trình bày chi tiết cách triển khai và ứng dụng của các cấu trúc dữ liệu kinh điển: danh sách liên kết (linked lists), ngăn xếp (stacks), hàng đợi (queues) và cây tìm kiếm nhị phân (binary search trees). Mỗi cấu trúc dữ liệu được đi kèm với mã nguồn triển khai đầy đủ các thao tác cơ bản như chèn, xóa, tìm kiếm và duyệt, giúp người học không chỉ hiểu lý thuyết mà còn có thể tự xây dựng chúng.

V. Khám phá lập trình C và hướng đối tượng OOP qua sách

Một giá trị đặc biệt của cuốn C How to Program 8th Edition là phần giới thiệu sâu rộng về lập trình C++ và các nguyên tắc của hướng đối tượng OOP (Object-Oriented Programming). Sau khi đã trang bị cho người đọc một nền tảng C vững chắc, sách dành 9 chương cuối (từ Chương 15 đến 23) để thực hiện một bước chuyển mượt mà sang C++. Phần này được thiết kế không chỉ như một phần phụ lục mà là một khóa học nhập môn C++ thực thụ. Nó bắt đầu bằng việc trình bày C++ như một "ngôn ngữ C tốt hơn", giới thiệu các cải tiến về cú pháp và tính năng giúp viết mã an toàn và hiệu quả hơn, chẳng hạn như stream I/O, tham chiếu, và template hàm. Sau đó, sách đi sâu vào các trụ cột của OOP: Lớp (Classes) và Đối tượng (Objects), Đóng gói (Encapsulation), Kế thừa (Inheritance) và Đa hình (Polymorphism). Các khái niệm này được minh họa qua các case study chi tiết, ví dụ như xây dựng lớp Time, lớp Date, hay một hệ thống tính lương sử dụng đa hình. Phần C++ introduction này cung cấp cho người học một lợi thế cạnh tranh lớn, trang bị cho họ tư duy thiết kế hướng đối tượng và kỹ năng cần thiết để làm việc với các hệ thống phần mềm hiện đại, vốn chủ yếu được xây dựng dựa trên mô hình OOP.

5.1. Giới thiệu C Ngôn ngữ C tốt hơn cho lập trình viên

Chương 15 đóng vai trò là cầu nối giữa hai ngôn ngữ, giới thiệu C++ như một sự kế thừa và cải tiến của C. Sách chỉ ra những ưu điểm của C++ trong việc lập trình hàng ngày, ngay cả khi chưa sử dụng đến các tính năng OOP. Các khái niệm như đối tượng stream cin, cout thay thế cho scanfprintf giúp việc nhập xuất an toàn hơn. Tham chiếu (references) cung cấp một cách thay thế thanh lịch hơn cho con trỏ trong việc truyền tham số bằng tham chiếu. Template hàm cho phép viết các hàm tổng quát hoạt động với nhiều kiểu dữ liệu khác nhau, thúc đẩy việc tái sử dụng mã. Phần này giúp những lập trình viên đã quen với C dễ dàng thích nghi và tận dụng ngay những lợi ích mà C++ mang lại.

5.2. Các khái niệm cơ bản về hướng đối tượng OOP

Trọng tâm của phần C++ là việc truyền tải các khái niệm cốt lõi của hướng đối tượng OOP. Chương 16 và 17 giới thiệu về Lớp và Đối tượng, cách định nghĩa các thành viên dữ liệu (data members) và hàm thành viên (member functions), hàm tạo (constructors) và hàm hủy (destructors). Sách nhấn mạnh tầm quan trọng của việc đóng gói và che giấu thông tin (information hiding). Chương 19 và 20 khám phá hai khái niệm mạnh mẽ nhất của OOP: Kế thừa và Đa hình. Người học sẽ được tìm hiểu cách tạo các lớp dẫn xuất (derived classes) từ các lớp cơ sở (base classes) và cách sử dụng các hàm ảo (virtual functions) để đạt được hành vi đa hình, cho phép viết mã tổng quát và linh hoạt hơn. Các khái niệm này được giải thích thông qua sơ đồ UML và các ví dụ thực tế.

VI. Vị thế của C How to Program 8th Edition trong giáo dục

Cuốn sách C How to Program, Global Edition 8th Edition của Paul DeitelHarvey Deitel không chỉ là một cuốn sách giáo khoa mà còn là một tiêu chuẩn vàng trong lĩnh vực giáo dục lập trình. Nó được công nhận rộng rãi và sử dụng làm giáo trình tin học đại cương và các khóa học lập trình chuyên sâu tại hàng ngàn trường đại học và cơ sở đào tạo trên toàn cầu. Sự thành công của nó đến từ sự kết hợp hoàn hảo giữa tính nghiêm ngặt học thuật và phương pháp tiếp cận thực tiễn. Phương pháp "live-code" đặc trưng đã định hình lại cách dạy và học lập trình, giúp sinh viên vượt qua những rào cản ban đầu và xây dựng niềm đam mê với ngành học. Sách không chỉ dạy ngôn ngữ mà còn truyền đạt các nguyên tắc kỹ thuật phần mềm tốt, tư duy giải quyết vấn đề có cấu trúc, và nhận thức về lập trình an toàn. Mặc dù đã có phiên bản mới hơn là C How to Program 9th edition, phiên bản thứ 8 vẫn giữ nguyên giá trị cốt lõi và là một nguồn tài liệu tham khảo vô giá. Nó cung cấp một nền tảng toàn diện, vững chắc về lập trình Clập trình C++, đủ để người học có thể tự tin tiếp tục khám phá các lĩnh vực chuyên sâu hơn trong ngành khoa học máy tính và phát triển phần mềm.

6.1. So sánh với phiên bản C How to Program 9th edition

Phiên bản C How to Program 9th edition là một bản cập nhật tiếp theo, tiếp tục tinh chỉnh và làm mới nội dung của phiên bản thứ 8. Các thay đổi chính thường tập trung vào việc cập nhật sâu hơn các tiêu chuẩn ngôn ngữ mới nhất (C18, C++17/20), bổ sung các ví dụ và bài tập mới theo xu hướng công nghệ hiện tại. Tuy nhiên, các khái niệm nền tảng về lập trình C và các nguyên tắc hướng đối tượng OOP được trình bày trong phiên bản thứ 8 vẫn hoàn toàn chính xác và phù hợp. Đối với những người mới bắt đầu, phiên bản 8 vẫn là một lựa chọn xuất sắc với chi phí hợp lý hơn, cung cấp đầy đủ kiến thức cốt lõi cần thiết để xây dựng sự nghiệp lập trình.

6.2. Lý do sách là giáo trình tin học đại cương hàng đầu

Có nhiều lý do khiến C How to Program trở thành một giáo trình tin học đại cương được ưa chuộng. Thứ nhất, phạm vi bao quát của nó là rất lớn, đi từ những nguyên tắc cơ bản nhất đến các chủ đề nâng cao như cấu trúc dữ liệu và lập trình hướng đối tượng, phù hợp cho nhiều học phần. Thứ hai, chất lượng sư phạm vượt trội với phương pháp "live-code", các ghi chú (Good Programming Practices, Common Programming Errors), và hệ thống bài tập tự luyện đa dạng. Cuối cùng, sự uy tín của các tác giả Deitel & Deitel và nhà xuất bản Pearson Education đảm bảo rằng nội dung luôn được kiểm duyệt kỹ lưỡng, chính xác và cập nhật, mang lại sự tin cậy cho cả giảng viên và sinh viên trong quá trình dạy và học.

15/07/2025
C how to program with an introduction to c global edition 8th edition

Trích đoạn nội dung tài liệu

HOW TO PROGRAM EIGHTH EDITION GLOBAL EDITION with an introduction to C++ This page intentionally left blank HOW TO PROGRAM EIGHTH EDITION GLOBAL EDITION with an introduction to C++ Paul Deitel Deitel & Associates, Inc. Harvey Deitel Deitel & Associates, Inc. Global Edition contributions by Piyali Sengupta Boston Columbus Hoboken Indianapolis New York San Francisco Amsterdam Cape Town Dubai London Madrid Milan Munich Paris Montreal ˜ Paulo Sydney Hong Kong Seoul Singapore Taipei Tokyo Toronto Delhi Mexico City Sao Vice President and Editorial Director, ECS: Marcia J. Horton Executive Editor: Tracy Johnson (Dunkelberger) Editorial Assistant: Kelsey Loanes Assistant Acquisitions Editor, Global Editions: Aditee Agarwal Program Manager: Carole Snyder Project Manager: Robert Engelhardt Project Editor, Global Editions: K.

Neelakantan Media Team Lead: Steve Wright R&P Manager: Rachel Youdelman R&P Senior Project Manager: William Opaluch Senior Operations Specialist: Maura Zaldivar-Garcia Senior Manufacturing Controller, Global Editions: Kay Holman Inventory Manager: Bruce Boundy Marketing Manager: Demetrius Hall Product Marketing Manager: Bram Van Kempen Media Production Manager, Global Editions: Vikram Kumar Marketing Assistant: Jon Bryant Cover Designer: Chuti Prasertsith / Michael Rutkowski / Marta Samsel Cover Art: © Igoror / Shutterstock Pearson Education Limited Edinburgh Gate Harlow Essex CM20 2JE England and Associated Companies throughout the world Visit us on the World Wide Web at: www.com © Pearson Education Limited 2016 The rights of Paul Deitel and Harvey Deitel to be identified as the authors of this work have been asserted by them in accordance with the Copyright, Designs and Patents Act 1988. Authorized adaptation from the United States edition, entitled C How to Program: with an introduction to C++,8st edition, ISBN 978-0-13-397689-2, by Paul Deitel and Harvey Deitel published by Pearson Education © 2016. All rights reserved. No part of this publication may be reproduced, stored in a retrieval system, or transmitted in any form or by any means, electronic, mechanical, photocopying, recording or otherwise, without either the prior written permission of the publisher or a license permitting restricted copying in the United Kingdom issued by the Copyright Licensing Agency Ltd, Saffron House, 6–10 Kirby Street, London EC1N 8TS.

All trademarks used herein are the property of their respective owners. The use of any trademark in this text does not vest in the author or publisher any trademark ownership rights in such trademarks, nor does the use of such trademarks imply any affiliation with or endorsement of this book by such owners. British Library Cataloguing-in-Publication Data A catalogue record for this book is available from the British Library 10 9 8 7 6 5 4 3 2 1 ISBN 10: 1-292-11097-X ISBN 13: 978-1-292-11097-4 Typeset by GEX Publishing Services Printed in Malaysia In memory of Dennis Ritchie, creator of the C programming language and co-creator of the UNIX operating system. Paul and Harvey Deitel Trademarks DEITEL, the double-thumbs-up bug and DIVE INTO are registered trademarks of Deitel and Associates, Inc.

Apple, Xcode, Swift, Objective-C, iOS and OS X are trademarks or registered trademarks of Apple, Inc. Java is a registered trademark of Oracle and/or its affiliates. Microsoft and/or its respective suppliers make no representations about the suitability of the information contained in the documents and related graphics published as part of the services for any purpose. All such documents and related graphics are provided “as is” without warranty of any kind.

Microsoft and/ or its respective suppliers hereby disclaim all warranties and conditions with regard to this information, including all warranties and conditions of merchantability, whether express, implied or statutory, fitness for a particular purpose, title and non-infringement. In no event shall Microsoft and/or its respective sup- pliers be liable for any special, indirect or consequential damages or any damages whatsoever resulting from loss of use, data or profits, whether in an action of contract, negligence or other tortious action, arising out of or in connection with the use or performance of information available from the services. The documents and related graphics contained herein could include technical inaccuracies or typograph- ical errors. Changes are periodically added to the information herein.

Microsoft and/or its respective sup- pliers may make improvements and/or changes in the product(s) and/or the program(s) described herein at any time. Partial screen shots may be viewed in full within the software version specified. Other names may be trademarks of their respective owners. Contents Appendices F, G and H are PDF documents posted online at the book’s Companion Website (located at www.

Preface 23 1 Introduction to Computers, the Internet and the Web 33 1.2 Hardware and Software 35 1.4 Machine Languages, Assembly Languages and High-Level Languages 40 1.5 The C Programming Language 41 1.7 C++ and Other C-Based Languages 43 1.1 The Automobile as an Object 45 1.2 Methods and Classes 45 1.5 Messages and Method Calls 46 1.6 Attributes and Instance Variables 46 1.7 Encapsulation and Information Hiding 46 1.9 Typical C Program-Development Environment 47 1.1 Phase 1: Creating a Program 48 1.2 Phases 2 and 3: Preprocessing and Compiling a C Program 48 1.6 Problems That May Occur at Execution Time 49 1.7 Standard Input, Standard Output and Standard Error Streams 49 1.10 Test-Driving a C Application in Windows, Linux and Mac OS X 49 1.1 Running a C Application from the Windows Command Prompt 50 1.2 Running a C Application Using GNU C with Linux 53 8 Contents 1.3 Running a C Application Using the Teminal on Mac OS X 56 1.1 Windows—A Proprietary Operating System 59 1.2 Linux—An Open-Source Operating System 59 1.3 Apple’s Mac OS X; Apple’s iOS for iPhone®, iPad® and iPod Touch® Devices 60 1.12 The Internet and World Wide Web 61 1.1 The Internet: A Network of Networks 61 1.2 The World Wide Web: Making the Internet User-Friendly 61 1.5 The Internet of Things 64 1.13 Some Key Software Terminology 64 1.14 Keeping Up-to-Date with Information Technologies 66 2 Introduction to C Programming 71 2.2 A Simple C Program: Printing a Line of Text 72 2.3 Another Simple C Program: Adding Two Integers 76 2.6 Decision Making: Equality and Relational Operators 85 2.7 Secure C Programming 89 3 Structured Program Development in C 101 3.5 The if Selection Statement 105 3.6 The if…else Selection Statement 106 3.7 The while Iteration Statement 110 3.8 Formulating Algorithms Case Study 1: Counter-Controlled Iteration 111 3.9 Formulating Algorithms with Top-Down, Stepwise Refinement Case Study 2: Sentinel-Controlled Iteration 114 3.10 Formulating Algorithms with Top-Down, Stepwise Refinement Case Study 3: Nested Control Statements 120 3.12 Increment and Decrement Operators 125 3.13 Secure C Programming 127 4 C Program Control 145 4.3 Counter-Controlled Iteration 147 4.4 for Iteration Statement 148 4.5 for Statement: Notes and Observations 151 4.6 Examples Using the for Statement 152 4.7 switch Multiple-Selection Statement 155 4.8 do…while Iteration Statement 161 4.9 break and continue Statements 162 4.11 Confusing Equality (==) and Assignment (=) Operators 167 4.12 Structured Programming Summary 169 4.13 Secure C Programming 174 5 C Functions 189 5.2 Modularizing Programs in C 190 5.3 Math Library Functions 191 5.6 Function Prototypes: A Deeper Look 198 5.7 Function Call Stack and Stack Frames 200 5.9 Passing Arguments By Value and By Reference 205 5.10 Random Number Generation 206 5.11 Example: A Game of Chance; Introducing enum 210 5.15 Example Using Recursion: Fibonacci Series 222 5.17 Secure C Programming 227 6 C Arrays 246 6.1 Defining an Array and Using a Loop to Set the Array’s Element Values 249 6.2 Initializing an Array in a Definition with an Initializer List 250 6.3 Specifying an Array’s Size with a Symbolic Constant and Initializing Array Elements with Calculations 252 10 Contents 6.4 Summing the Elements of an Array 253 6.5 Using Arrays to Summarize Survey Results 254 6.6 Graphing Array Element Values with Histograms 256 6.7 Rolling a Die 60,000,000 Times and Summarizing the Results in an Array 257 6.5 Using Character Arrays to Store and Manipulate Strings 257 6.1 Initializing a Character Array with a String 258 6.2 Initializing a Character Array with an Intializer List of Characters 258 6.3 Accessing the Characters in a String 258 6.4 Inputting into a Character Array 258 6.5 Outputting a Character Array That Represents a String 259 6.6 Demonstrating Character Arrays 259 6.6 Static Local Arrays and Automatic Local Arrays 260 6.7 Passing Arrays to Functions 262 6.9 Case Study: Computing Mean, Median and Mode Using Arrays 268 6.1 Searching an Array with Linear Search 273 6.2 Searching an Array with Binary Search 274 6.1 Illustrating a Double-Subcripted Array 278 6.2 Initializing a Double-Subcripted Array 279 6.3 Setting the Elements in One Row 281 6.4 Totaling the Elements in a Two-Dimensional Array 281 6.5 Two-Dimensonal Array Manipulations 282 6.12 Variable-Length Arrays 285 6.13 Secure C Programming 288 7 C Pointers 306 7.2 Pointer Variable Definitions and Initialization 308 7.4 Passing Arguments to Functions by Reference 311 7.5 Using the const Qualifier with Pointers 315 7.1 Converting a String to Uppercase Using a Non-Constant Pointer to Non-Constant Data 316 7.2 Printing a String One Character at a Time Using a Non-Constant Pointer to Constant Data 317 7.3 Attempting to Modify a Constant Pointer to Non-Constant Data 319 7.4 Attempting to Modify a Constant Pointer to Constant Data 320 7.6 Bubble Sort Using Pass-by-Reference 321 7.8 Pointer Expressions and Pointer Arithmetic 327 7.1 Allowed Operators for Pointer Arithmetic 327 7.2 Aiming a Pointer at an Array 327 Contents 11 7.3 Adding an Integer to a Pointer 328 7.4 Subtracting an Integer from a Pointer 328 7.5 Incrementing and Decrementing a Pointer 328 7.6 Subtracting One Pointer from Another 329 7.7 Assigning Pointers to One Another 329 7.8 Pointer to void 329 7.9 Relationship between Pointers and Arrays 330 7.1 Pointer/Offset Notation 330 7.2 Pointer/Index Notation 331 7.3 Cannot Modify an Array Name with Pointer Arithmetic 331 7.4 Demonstrating Pointer Indexing and Offsets 331 7.5 String Copying with Arrays and Pointers 332 7.10 Arrays of Pointers 334 7.11 Case Study: Card Shuffling and Dealing Simulation 335 7.12 Pointers to Functions 340 7.1 Sorting in Ascending or Descending Order 340 7.2 Using Function Pointers to Create a Menu-Driven System 343 7.13 Secure C Programming 345 8 C Characters and Strings 365 8.2 Fundamentals of Strings and Characters 366 8.3 Character-Handling Library 368 8.1 Functions isdigit, isalpha, isalnum and isxdigit 368 8.2 Functions islower, isupper, tolower and toupper 371 8.3 Functions isspace, iscntrl, ispunct, isprint and isgraph 372 8.4 String-Conversion Functions 374 8.5 Standard Input/Output Library Functions 376 8.1 Functions fgets and putchar 377 8.6 String-Manipulation Functions of the String-Handling Library 381 8.1 Functions strcpy and strncpy 382 8.2 Functions strcat and strncat 382 8.7 Comparison Functions of the String-Handling Library 383 8.8 Search Functions of the String-Handling Library 385 8.4 Function strrchr 388 12 Contents 8.9 Memory Functions of the String-Handling Library 391 8.10 Other Functions of the String-Handling Library 395 8.11 Secure C Programming 397 9 C Formatted Input/Output 409 9.3 Formatting Output with printf 410 9.5 Printing Floating-Point Numbers 412 9.1 Conversion Specifiers e, E and f 413 9.2 Conversion Specifiers g and G 413 9.3 Demonstrating Floating-Point Conversion Specifiers 414 9.6 Printing Strings and Characters 414 9.7 Other Conversion Specifiers 415 9.8 Printing with Field Widths and Precision 416 9.1 Specifying Field Widths for Printing Integers 416 9.2 Specifying Precisions for Integers, Floating-Point Numbers and Strings 417 9.3 Combining Field Widths and Precisions 418 9.9 Using Flags in the printf Format Control String 419 9.1 Right and Left Justification 419 9.2 Printing Positive and Negative Numbers with and without the + Flag 420 9.3 Using the Space Flag 420 9.4 Using the # Flag 421 9.5 Using the 0 Flag 421 9.10 Printing Literals and Escape Sequences 422 9.11 Reading Formatted Input with scanf 422 9.2 scanf Conversion Specifiers 423 9.3 Reading Integers with scanf 424 9.4 Reading Floating-Point Numbers with scanf 425 9.5 Reading Characters and Strings with scanf 425 9.6 Using Scan Sets with scanf 426 Contents 13 9.7 Using Field Widths with scanf 427 9.8 Skipping Characters in an Input Stream 428 9.12 Secure C Programming 429 10 C Structures, Unions, Bit Manipulation and Enumerations 436 10.

Nội dung được bảo vệ bản quyền — Tải xuống đầy đủ