Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 351 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
351
Dung lượng
4,71 MB
Nội dung
VŨ QUỐC HỒNG BÍ KÍP LUYỆN LẬP TRÌNH C Quyển h Book Bí kíp luyện Lập trình C Quyển Copyright 2017 Vũ Quốc Hoàng (hBook) Được phép chép, chia sẻ với mục đích học tập, nghiên cứu, vui chơi, giải trí Nghiêm cấm hình thức kiếm tiền từ tài liệu Bản cập nhật tài liệu tài nguyên đính kèm để ở: Facebook/vqhoang.books Các ý kiến đóng góp xin gởi về: vqhoang.books@gmail.com hoặc/và thảo luận tại: Facebook/vqhoang.books Ông Nộ i Vỗ Văn Lầ u HSBN: 7966-7064-0406-070a-6f66-7d73-0205-0401 21-11-2017 h Book Tưởng nhớ Nợ i, Ơng Vỡ Văn Lầ u Lời nói đầu Nếu bạn muốn dùng máy tính theo cách hay nhất, học lập trình Nếu bạn muốn học lập trình, học lập trình C trước Nếu bạn muốn học lập trình C, dùng tài liệu “Bí kíp luyện Lập trình C (Quyển 1)” soạn chủ yếu cho việc tự học, phù hợp với đâ số đối tượng, lứa tuổi trình độ1 Cách hiệu (và cách nhất) để học lập trình luyện lập trình, nghĩâ học qua việc gõ, chạy, quan sát, phân tích, tìm hiểu, khám phá, sáng tạơ, … chương trình Tầ i liệ u nầ y soạn thêô phương pháp Muốn giỏi lập trình, bạn phải luyện lập trình Thời gian phù hợp để bạn luyện xong Quyển 16 tuần2: tuần cho Tầng 1, tuần cho Tầng 2, tuần cho Tầng tuần cho Tầng Mỗi tuần nên luyện từ đến Mỗi nên dành từ đến cho phần học, thêm 30 phút đến cho phần mở rộng (nếu có), sâu nghỉ ngơi làm tập3 Hiển nhiên bạn phải luyện theo trình tự: từ tầng thấp lên tầng cao, từ đầu đến cuối4 Yêu cầu tiên (và yêu cầu nhất) bạn phải có máy tính Đó phải máy riêng bạn để bạn dùng lúc nơi5 Bạn sẵn sàng?6 Hãy bắt đầu việc cài đặt cơng cụ để lập trình (xem Phụ lục A.1) luyện từ Bầ i 1.1 Chúc bạn tu thành quả! Tài liệu này chắc chắn còn rất nhiều lỗi biên dịch và bug Các ý kiến đóng góp xin gởi địa chỉ mail vqhoang.books@gmail.com hoặc/và thảo luận Facebook/vqhoang.books Cảm ơn người Nếu khơng có nhân dun khơi nguồn khơng có tài liệu Con cảm ơn Bâ Mê Nhớ Nội… Vũ Quốc Hồng Sài Gòn, 11-2017 Các cháu mẫu giáo, tiểu học không nên dùng tài liệu này:) Độ tuổi phù hợp: 15+ Trình độ tối thiểu: Tốn lớp Có thể tăng/giảm tùy theo quỹ thời giân lực bạn đừng luyện nhanh Không thiết phải làm hết tập làm nhiều tập, công lực bạn tăng nhânh Luyện khơng theo trình tự dẫn đến tẩu hỏa nhập ma:) 12 khuya linh:) Nghĩâ bạn muốn học (hoặc muốn thử học) lập trình C, bạn có chút thời gian rảnh bạn có máy tính riêng Mục lục TẦNG BÀI 1.1 MỞ RỘNG 1.1 – Xuất tên tiếng Việt BÀI TẬP BÀI 1.2 MỞ RỘNG 1.2 – Tràn số nguyên 13 BÀI TẬP 14 BÀI 1.3 15 MỞ RỘNG 1.3 – Tràn số thực 19 BÀI TẬP 20 BÀI 1.4 21 MỞ RỘNG 1.4 – Tính giá trị đâ thức phương pháp Hôrnêr 25 BÀI TẬP 27 BÀI 1.5 29 MỞ RỘNG 1.5 – Tính phương pháp chiâ đơi 33 BÀI TẬP 35 BÀI 1.6 37 BÀI TẬP 47 BÀI 1.7 51 MỞ RỘNG 1.7 – Mã Unicode kí hiệu tiếng Việt 60 BÀI TẬP 63 TẦNG BÀI 2.1 65 MỞ RỘNG 2.1 – Biểu thức địa 71 BÀI TẬP 73 BÀI 2.2 75 MỞ RỘNG 2.2 – Lượng giá biểu thức có hiệu ứng lề 79 BÀI TẬP 81 BÀI 2.3 83 BÀI TẬP 91 BÀI 2.4 93 BÀI TẬP 100 BÀI 2.5 101 MỞ RỘNG 2.5 – Lặp vô tận nghi vấn 3n + 106 BÀI TẬP 108 BÀI 2.6 109 MỞ RỘNG 2.6 – Vòng lặp tương tác người dùng 116 BÀI TẬP 121 BÀI 2.7 123 BÀI TẬP 129 TẦNG BÀI 3.1 131 BÀI TẬP 138 BÀI 3.2 139 BÀI TẬP 145 BÀI 3.3 147 MỞ RỘNG 3.3 – Hàm gọi lẫn 153 BÀI TẬP 155 BÀI 3.4 157 MỞ RỘNG 3.4 – Hàm có số lượng đối số tùy ý 164 BÀI TẬP 167 BÀI 3.5 169 BÀI TẬP 182 BÀI 3.6 185 BÀI TẬP 194 BÀI 3.7 197 BÀI TẬP 205 BÀI 3.8 207 BÀI TẬP 216 BÀI 3.9 219 BÀI TẬP 230 TẦNG BÀI 4.1 231 MỞ RỘNG 4.1 – Trung bình phương sâi mẫu liệu số 238 BÀI TẬP 241 BÀI 4.2 243 MỞ RỘNG 4.2 – Hình fractal thảm Sierpinski 249 BÀI TẬP 250 BÀI 4.3 251 BÀI TẬP 259 BÀI 4.4 261 MỞ RỘNG 4.4 – Dùng chuỗi biểu diễn số nguyên lớn 265 BÀI TẬP 267 BÀI 4.5 269 MỞ RỘNG 4.5 – Tràn phân số 274 BÀI TẬP 277 BÀI 4.6 279 MỞ RỘNG 4.6 – Bài toán Tháp Hà Nội 284 BÀI TẬP 287 BÀI 4.7 289 MỞ RỘNG 4.7 – Tập tin CSV 297 BÀI TẬP 300 BÀI 4.8 303 MỞ RỘNG 4.8 – Thuật tốn tìm kiếm quay lui toán 8-hậu 313 BÀI TẬP 317 BÀI 4.9 319 BÀI TẬP 326 PHỤ LỤC PHỤ LỤC A.1 329 PHỤ LỤC A.2 330 PHỤ LỤC A.3 331 PHỤ LỤC A.4 333 PHỤ LỤC A.5 334 PHỤ LỤC A.6 336 PHỤ LỤC A.7 338 PHỤ LỤC A.8 339 PHỤ LỤC A.9 340 TÀI LIỆU THAM KHẢO 341 BÀI 327 Thêm chức chơi lại từ đầu (New Game) Quản lý danh sách điểm cao (Highscores) Điều chỉnh cách tính điểm tăng tốc độ qua level tốt Gỡ bỏ “trick” liên quan đến việc tạm dừng game (Pause) Thêm tính rơi nhanh “soft drop” Thêm tính trọng lượng (gravity) với “chain reactions” phá gạch - Thêm màu sắc cho game - … Bt 4.9.2 Các game thực tế không viết cách ta làm học trên, chúng thường phát triển dựa công nghệ game, công nghệ đồ họa, multimedia cao cấp hơn10 Tuy nhiên ta thấy với “Ascii Art” Bài 1.7, công nghệ đơn giản tạo nên loại hình nghệ thuật/giải trí cao cấp11 “Viết game”, loại hình nghệ thuật/giải trí khác, đơi cần ý tưởng độc đáo hút người chơi/người thưởng thức Tương tự kĩ thuật viết game Tetris học trên, viết game đơn giản như12: Pong, Pac-Man, Đua xe, Snake, Caro, Dò mìn, … - Bt 4.9.3 (Mở rộng13) Bạn dùng quen thuộc với máy tính cầm tay (Calculator) học phổ thông So với hệ máy ban đầu Calculator ngày thực thiết bị tính tốn tiện dụng, mạnh mẽ với nhiều chức Hãy vận dụng công cụ kĩ thuật mà bạn học để viết chương trình C mơ Calculator này, chẳng hạn máy Casio fx-570ES PLUS (Gợi ý: dot matrix display, hàm thư viện chuẩn, hàm môi trường thực thi (Windows), mảng chiều, mảng chiều, kiểu liệu bản, chuỗi, lặp, đệ qui, thuật tốn giải tích số, tổ chức module, … thứ mà bạn dùng đến Hãy tìm kiếm tra cứu Hãy sáng tạo thiết kế giao diện tương tác người dùng.) Thời gian làm từ ngày đến tuần tùy theo thời gian … nghỉ ngơi Nếu hoàn thành khoảng 50% (so với máy thực Casio fx-570ES PLUS) bạn đủ cơng lực để luyện tiếp Quyển II Nếu không bạn nên luyện lại Quyển I cho kĩ (Làm xong, được, gởi cho để người học hỏi.) Bài tập thay cho lời kết! 10 Ta lại gặp chủ đề “Lập trình game” Chất liệu/vật liệu/kỹ thuật đơn sơ tạo nên tác phẩm nghệ thuật đặc sắc 12 Đây game đơn giản tiếng Bạn chơi thử để cảm nhận game, sau tra cứu, tìm hiểu game trước bắt tay viết 13 Yêu cầu tập đánh dấu “Mở rộng” khó chúng xứng đáng để bạn bỏ cơng làm: bạn chương trình thú vị cơng lực lập trình bạn tăng nhanh đáng kể 11 PHỤ LỤC A.1 CÀI ĐẶT CÔNG CỤ LẬP TRÌNH C Bạn chắn cần có máy tính để lập trình C Tuy nhiên có máy tính thơi chưa đủ, bạn cần phải có cơng cụ lập trình cài đặt máy Đây hệ thống phần mềm giúp bạn thực công đoạn việc lập trình Hệ thống gọi mơi trường phát triển tích hợp (Integrated Development Environment), viết tắt IDE Như tên gọi, IDE bao gồm nhiều thành phần mà quan trọng là: trình soạn thảo mã nguồn (source code editor) phục vụ cho việc gõ mã C, trình biên dịch (compiler) biên dịch mã C thành mã thực thi trình gỡ lỗi (debugger) hỗ trợ việc tìm loại bỏ lỗi chương trình Tóm lại bạn cần IDE để lập trình (và học lập trình) Có nhiều IDE khác mà bạn dùng Nếu máy bạn cài đặt IDE bạn bắt đầu việc học lập trình Nếu khơng bạn nên chọn cài IDE là: Dev-C++ và/hoặc Microsoft Visual Studio Dev-C++ IDE nhỏ, gọn phù hợp cho việc học lập trình C/C++ Microsoft Visual Studio IDE chuyên nghiệp, hoành tráng, phù hợp cho việc viết phần mềm lớn Dev-C++ hồn tồn miễn phí Microsoft Visual Studio có nhiều bản, có giá vài ngàn đô dùng cho doanh nghiệp có miễn phí dùng cho sinh viên hay lập trình viên khơng chun Trong tài liệu bạn nên dùng Dev-C++ luyện Tầng 1, 2, để khỏi bỡ ngỡ dùng Microsoft Visual Studio luyện Tầng để quen với môi trường phát triển chuyên nghiệp Cũng lưu ý nhiều IDE tuyệt vời khác mà bạn nên trải nghiệm, trước mắt, bạn nên quen thuộc với IDE Việc cài đặt IDE đơn giản Dễ nhất, bạn nhờ có kinh nghiệm cài đặt giùm1 Nếu khơng bạn cài đặt Dev-C++ Microsoft Visual Studio (bản miễn phí) theo tài liệu hướng dẫn đính kèm với Phụ lục Hoặc bạn làm theo tài liệu hướng dẫn cài đặt khác (như video hay tutorial mạng) Như nhờ thầy cô bạn học sinh, sinh viên nhờ cháu bạn lớn tuổi nhờ sối ca bạn bánh bèo vơ dụng:), … Chắc chắn nhờ lập trình viên game thủ cài đặt dễ dàng 329 PHỤ LỤC A.2 GÕ VÀ CHẠY CHƯƠNG TRÌNH C Thuật ngữ “gõ chạy chương trình” ám bước chính: - Bước 1: Gõ mã chương trình Bước 2: Biên dịch chương trình Bước 3: Chạy chương trình Trước gõ mã chương trình, bạn cần phải tạo Project, tạo File (Bước 0) Sau chạy chương trình, bạn đóng vai trò người dùng chương trình để quan sát kết chạy chương trình hay tương tác với chương trình nhập liệu cho chương trình, (Bước 4) Hơn chương trình có lỗi biên dịch, nghĩa chương trình bạn gõ khơng hợp lệ (xem Bài 1.7) Khi bạn cần phải biết chỗ bị lỗi sửa lỗi (Bước 2’) Tất bước IDE hỗ trợ mà thao tác cụ thể phụ thuộc vào IDE mà bạn dùng Bạn xem tài liệu hướng dẫn đính kèm với Phụ lục để biết cách thực Dev-C++ Microsoft Visual Studio Hoặc bạn làm theo tài liệu hướng dẫn khác (như video hay tutorial mạng) 330 PHỤ LỤC A.3 LỊCH SỬ C Ngơn ngữ lập trình C Dennis Ritchie phát triển từ năm 1969 đến năm 1973 Bell Labs Từ xuất (khoảng năm 1972) đến nay, C trải qua nhiều lần thay đổi hoàn thiện với phiên C khác Các cột mốc đáng kể là: - K&R C: C đặc tả tài liệu tiếng “The C Programming Language” (edition 1) Brian Kernighan Dennis Ritchie viết năm 1978 Phiên C gọi C gốc - ANSI C: C đặc tả tài liệu “The C Programming Language” (edition 2) ANSI, ISO chuẩn hóa Phiên C gọi C chuẩn hay C89 hầu hết compiler C hỗ trợ - C99: ISO chuẩn hóa C lần vào năm 1999 với việc bổ sung thêm vài đặc trưng cho C Đa số compiler C hỗ trợ phiên C (đầy đủ phần) - C11: Một chuẩn hóa (vào năm 2011) với việc bổ sung thêm nhiều đặc trưng khác cho C Một vài compiler C hỗ trợ phiên C - Ngồi có phiên C chuẩn hóa cho thiết bị nhúng (embedded system) gọi Embedded C C ngơn ngữ lập trình dùng phổ biến từ trước đến cho nhiều mục đích/loại phần mềm khác nhiều hệ máy/kiến trúc máy khác Đặc biệt C gần gũi với kiến trúc máy nên dùng để viết phần mềm hệ thống (system software), chương trình đặc biệt cần tốc độ hay khả can thiệp cấp thấp vào kiến trúc máy/phần cứng máy Vì lí này, đơi C gọi ngơn ngữ lập trình cấp thấp (low-level programming language) so với ngơn ngữ lập trình cấp cao (high-level) C#, Java, Python, SQL, …1 C dùng để viết phần mềm ứng dụng (application software), nhiên, lãnh vực ngơn ngữ lập trình hướng đối tượng (như C++, Objective-C, C#, Java, …) tỏ phù hợp cho phần mềm thương mại Chữ thấp/cao ám đến gần gũi, khả can thiệp vào máy Theo nghĩa mã máy (machine code) hợp ngữ (assembly) có cấp thấp nhất, C có cấp cao chút (medium-level) Perl, Python, … có cấp cao (very high-level), Prolog, SQL, … thuộc hàng siêu cấp:) 331 332 PHỤ LỤC C ngơn ngữ lập trình theo phong cách (paradigm) thủ tục (imperative, procedural) với chương trình có cấu trúc (structured) Đây phong cách lập trình nhất, phù hợp với kiến trúc máy cách tự nhiên để mơ tả thuật tốn hay bước thực cơng việc Do việc học lập trình trước hết nên bắt đầu việc học lập trình C Điều khơng giúp bạn có cách thức lập trình, cách thức tư duy, giải vấn đề phù hợp mà giúp bạn dễ dàng nắm phong cách lập trình, tư khác Đặc biệt C ảnh hưởng đến nhiều ngôn ngữ lập trình quan trọng đời sau như: C++, Objective-C, C#, Java, JavaScript, Perl, PHP, Python, … Điều làm cho việc học lập trình trước hết nên bắt đầu việc học lập trình C giúp bạn dễ dàng học ngơn ngữ lập trình quan trọng khác Về mặt này, xem C ngôn ngữ Latin2 giới ngơn ngữ lập trình Bạn khơng cần thuộc tất điều Thật chúng lời sáo rỗng (nếu bạn không thực trải nghiệm để biết/hiểu chúng) Có lẽ bạn cần nhớ cha đẻ ngôn ngữ C Dennis Ritchie để hiểu trọn vẹn Bài 1.1 đủ:) Tuy nhiên việc biết chuyện bên lề, chuyện tầm phào (như chữ C lấy theo tên ngôn ngữ lập trình B hay chí có ngơn ngữ lập trình ngơn ngữ lập trình D?:)), chuyện thú vị … giúp trò chuyện C thêm rơm rả giúp bạn có cảm hứng học C Bạn tham khảo thêm viết C nhé3! Chứ tiếng Anh hay tiếng Hoa nha:) Vị trí thuộc ngơn ngữ lập trình khác Có thể xuất phát từ viết “C (programming language)” trang Wikipedia: https://en.wikipedia.org/wiki/C_(programming_language) PHỤ LỤC A.4 CẤU HÌNH CỬA SỔ CONSOLE Sau “gõ chạy chương trình”, bạn thường đóng vai người dùng chương trình, quan sát kết hay tương tác với chương trình nhập liệu, để kiểm tra chương trình Có nhiều dạng/loại chương trình khác tùy theo mức độ đơn giản/phức tạp hay công nghệ/nền tảng/mơi trường/phần cứng mà chương trình thực thi Trong tài liệu ta viết chương trình dạng đơn giản chương trình Console Đây dạng chương trình mà kết xuất tương tác chương trình với người dùng diễn “cửa sổ” đơn giản gọi cửa sổ Console Trên cửa sổ này, tất tương tác (nhập/xuất) thơng qua kí tự chuỗi Như chương trình Console sử dụng công nghệ tương tác, đồ họa, giao diện đơn giản Ngược lại, chương trình GUI (Graphical User Interface1) sử dụng công nghệ tương tác, đồ họa, giao diện cao cấp phức tạp hơn2 Cấu hình cửa sổ Console cách phù hợp giúp người dùng sử dụng chương trình Console tốt Tuy nhiên, mơi trường (hệ điều hành) thường quản lý cho phép cấu hình cửa sổ Console theo cách khác Bạn xem tài liệu hướng dẫn đính kèm với Phụ lục để biết cách cấu hình cửa sổ Console Windows Hoặc bạn xem tài liệu hướng dẫn khác (như video hay tutorial mạng) https://en.wikipedia.org/wiki/Graphical_user_interface Để so sánh với GUI dạng chương trình Console gọi CUI (viết tắt từ tiếng Anh Command-line User Interface hay Console User Interface hay Character User Interface hay viết tắt từ tiếng Việt CÙI BẮP:)) https://en.wikipedia.org/wiki/Command-line_interface 333 PHỤ LỤC A.5 TỪ VỰNG C Tập kí hiệu phép dùng chương trình C gọi kí tự C Nói chung, kí tự thơng thường gõ từ bàn phím1 Ở mức thấp nhất, chương trình C dãy kí tự kí tự C Ở mức cao hơn, kí tự gom lại thành đơn vị gọi từ2 Giữa từ thường có kí hiệu phân cách (như kí tự khoảng trắng) khơng cần kí hiệu phân cách dễ dàng xác định “ranh giới” từ Các từ C gọi token có loại token (từ loại) C: 1) Từ khóa (Keyword): từ đặc biệt, C dành riêng, gồm3: char double const short unsigned void int signed struct long extern enum float static union if for goto else return switch while typedef case break sizeof default continue Các từ khóa chia nhóm: từ khóa liên quan đến liệu (nhóm trên) từ khóa liên quan đến lệnh (nhóm dưới) 2) Định danh (Identifier): từ dùng để đặt tên tên biến, tên hàm, tên kiểu liệu Định danh gồm nhiều kí tự chữ (letter) chữ số (digit), kí tự chữ Kí tự gạch (_) xem chữ Lưu ý, C phân biệt chữ hoa chữ thường nên x1, X1 hai định danh khác Hơn định danh khơng trùng với từ khóa Ví dụ: - Các định danh hợp lệ: main, Main, printf, tong, Double, _1x, dien_tich - Các định danh không hợp lệ: tổng4, US$, double, 1x, dientich, dien tich Tùy phiên C compiler mà kí tự có khác Một số compiler chấp nhận kí tự Unicode, cho phép kí tự có dấu tiếng Việt Thật ra, trước tiến hành việc gom kí tự thành từ, compiler thực trình gọi tiền xử lý (preprocessing) Ta tìm hiểu trình sau Danh sách gồm từ khóa hay gặp Để đỡ rồi, từ khóa dùng khơng liệt kê Một số compiler chấp nhận định danh định danh tiếng Việt khác (hay ngơn ngữ khác) Điều phụ thuộc vào kí tự C mà compiler chấp nhận 334 335 PHỤ LỤC 3) Hằng số (Constant), gồm: - Hằng số nguyên: mô tả số nguyên cụ thể, viết theo số 10 0, 100, …5 số 16, bắt đầu tiền tố 0x hay 0X, 0x100, 0x1a, 0x1A, … (xem Bài 1.7)6 - Hằng kí tự: mơ tả kí tự cụ thể, với cách viết '', 'a', 'A', '\n', '\0', '\x16', … Lưu ý, kí tự thật số, mơ tả số ngun cố định, mã ASCII kí tự tương ứng (xem Bài 1.7) - Hằng số thực: mô tả số thực cụ thể, viết theo kiểu thập phân thông thường 10.25, 10.0, 10., 10, … hay theo kiểu khoa 1e-6 (cho số thực 110-6 = 0.000001), 0.001e4 (cho số thực 0.001104 = 10.0), … 4) Hằng chuỗi (String literal): mô tả chuỗi cố định, với cách viết "", "Hello", "Hello world!", "Hi\tthere\n", … (xem Bài 1.7) 5) Tốn tử (Operator): kí tự mơ tả phép tốn + - * / % = ++ == … (xem Phụ lục A.6) 6) Dấu câu (Separator): kí tự phân cách phần chương trình { } ( ) , ; … Khoảng trắng (white space) dãy kí tự trắng (space, tab, xuống dòng) Chúng khơng token C giúp phân cách token định dạng chương trình cho dễ đọc Lưu ý, chuỗi phép chứa kí tự space có ý nghĩa (chuỗi xuất tương ứng có khoảng trắng) Kí tự tab xuống dòng mơ tả chuỗi thoát \t \n tương ứng chuỗi (xem Bài 1.7) Ghi (comment) chuỗi kí tự đặt cặp dấu /* */ Ghi dạng trải dài nhiều dòng Một cách ghi khác, dòng đặt chuỗi ghi sau dấu //7 Ghi lập trình viên dùng để thích thêm thơng tin cho chương trình Chúng khơng có ý nghĩa với compiler: chúng compiler xem khoảng trắng bỏ qua Lưu ý: -100 xem gồm token - (toán tử) 100 (hằng số nguyên) Thật C cho phép mô tả số nguyên số dùng Ghi dạng (trên dòng với //) có nguồn gốc từ C++ PHỤ LỤC A.6 CÁC TOÁN TỬ C Bảng sau liệt kê danh sách toán tử C với độ ưu tiên tính kết hợp chúng Để khỏi rối, danh sách gồm toán tử mà bạn học Quyển Danh sách đầy đủ tất toán tử C cho Quyển Bảng A.6.1 – Danh sách toán tử C với độ ưu tiên tính kết hợp Độ ưu Tốn tử Thao tác Tính kết Bài học tiên hợp () Gọi hàm Bài 3.3 [] Truy cập phần tử mảng Bài 4.1 Trái Truy cập thành phần cấu Bài 4.5 trúc ++ -Tăng, giảm (hậu tố) Bài 2.2 ! Phủ định luận lý Bài 2.1 ++ -Tăng, giảm (tiền tố) Bài 2.2 + Giữ giá trị, lấy đối Bài 2.1 (type) Phải Ép kiểu Bài 3.5 sizeof Lấy kích thước kiểu Bài 3.5 & Lấy địa Mở rộng 2.1 * / % Nhân, chia, chia lấy dư Trái Bài 2.1 + Cộng, trừ Trái Bài 2.1 < >= So sánh nhỏ hơn, nhỏ Bài 2.1 bằng, lớn hơn, Trái lớn == != So sánh bằng, khác Trái Bài 2.1 && Và luận lý Trái Bài 2.1 || Hoặc luận lý Trái Bài 2.1 ?: Điều kiện Phải Bài 2.6 = += -= 10 Gán đơn, gán kép Phải Bài 2.2 11 *= /= %= , Lượng giá dãy Trái Bài 2.6 Độ ưu tiên xác định thứ tự thực toán tử: tốn tử có độ ưu tiên cao thực trước Khi độ ưu tiên, tính kết hợp xác định việc thực toán tử từ trái qua phải (kết hợp Trái) hay từ 336 337 PHỤ LỤC phải qua trái (kết hợp Phải) (xem Bài 2.1) Ở bảng trên, toán tử chung nhóm có độ ưu tiên nhau, tốn tử nhóm (nhóm nhỏ) có độ ưu tiên cao tốn tử nhóm (nhóm lớn) Chẳng hạn, tốn tử [] tốn tử chấm (.) có độ ưu tiên cao nhất, tốn tử phẩy (,) có độ ưu tiên thấp Sau vài điểm toán tử C mà bạn nên lưu ý: - C ưu tiên thực toán tử cặp ngoặc tròn trước - Hầu hết tốn tử ngơi có độ ưu tiên cao tốn tử hai ngơi - Các tốn tử hậu tố (nhóm 1) có độ ưu tiên cao tốn tử tiền tố (nhóm 2) tốn tử tiền tố có độ ưu tiên cao tốn tử trung tố (các nhóm lại) - Chỉ có nhóm tốn tử có tính kết hợp phải nhóm (các tốn tử ngơi tiền tố), nhóm (tốn tử điều kiện) nhóm 10 (các tốn tử gán) Các nhóm tốn tử lại có tính kết hợp trái - Các toán tử gọi hàm, gán (đơn/kép) tăng/giảm tốn tử có hiệu ứng lề (xem Bài 2.2) - Ngoại trừ toán tử &&, ||, ?: tốn tử phẩy (,), C khơng xác định thứ tự lượng giá toán hạng1 Thứ tự compiler định ảnh hưởng đến việc lượng giá biểu thức có hiệu ứng lề (xem Mở rộng 2.2) - Toán tử luận lý (&&), (||) lượng giá tắt (xem Bài 2.6) - Vài tốn tử có kí hiệu xác định phép toán khác tùy theo ngữ cảnh2 Chẳng hạn: o Kí hiệu +, - mơ tả cho tốn tử giữ hay lấy đối giá trị (như +3, -2.5) mơ tả cho toán tử cộng hay trừ (như + 2, 3.5 – 2.5) Để phân biệt, trường hợp đầu gọi tốn tử cộng, trừ ngơi trường hợp sau toán tử cộng, trừ hai ngơi o Tốn tử ngơi tăng, giảm (++, ) viết theo cách tiền tố (viết trước toán hạng) hậu tố (viết sau toán hạng) lượng giá theo hai cách khác (xem Bài 2.2) Để phân biệt, trường hợp đầu gọi toán tử tăng, giảm tiền tố trường hợp sau toán tử tăng, giảm hậu tố o Các toán tử số học (+, -, *, /, %) toán tử so sánh (=, ==, !=) có phiên cho số nguyên số thực riêng, tùy theo kiểu toán hạng (xem Bài 2.1) Điều khơng liên quan đến tính kết hợp tốn tử Đây tượng “lạm dụng kí hiệu” mà ta thấy Bài 2.1 PHỤ LỤC A.7 DEBUG CHƯƠNG TRÌNH Chương trình có lỗi biên dịch chương trình khơng hợp lệ Compiler khơng biên dịch chương trình mã thực thi nên chúng không chạy Sửa lỗi biên dịch công việc dễ dàng trợ giúp IDE (xem Phụ lục A2) Tuy nhiên chương trình khơng có lỗi biên dịch (và chạy được) có bug, lỗi hay bất thường chạy (xem Bài 1.6) Các bug thường để lại hậu “khủng khiếp” cho chương trình Hơn chúng thường khó phát khó sửa hay loại bỏ Do kĩ debug, tìm loại/sửa bug, kĩ thực hành quan trọng mà lập trình viên phải thành thạo Có nhiều cách thức, chiến lược debug khác mà theo nghĩa rộng, bao gồm kiểm tra/kiểm thử phần mềm (Software verification/Software testing) Ở mức đơn giản ta phải sử dụng thành thạo debugger, công cụ mà IDE cung cấp để hỗ trợ cho việc debug Bạn xem tài liệu hướng dẫn đính kèm với Phụ lục để biết cách dùng debugger Dev-C++ Microsoft Visual Studio Hoặc bạn xem tài liệu hướng dẫn khác (như video hay tutorial mạng) 338 PHỤ LỤC A.8 THAO TÁC TRÊN TẬP TIN VĂN BẢN Tập tin văn (Text file) tập tin lưu trữ chuỗi, tức dãy kí tự (xem Bài 4.7) Chính xác hơn, gọi tập tin văn (plain text) liệu văn mà khơng có liệu định dạng font chữ, màu sắc, kích thước, … hay đối tượng đồ họa ảnh, bảng biểu, … kèm Cách gọi giúp phân biệt với dạng tập tin chứa tài liệu văn (document) Word, … Các tập tin văn thường có phần mở rộng txt1 xử lý trình soạn thảo văn (Text editor) Trên Windows ta dùng phần mềm Notepad Tuy nhiên có nhiều phần mềm xử lý tập tin văn tốt với nhiều chức mà ta nên dùng, với lập trình viên, để xử lý tập tin văn chuyên sâu Một phần mềm Notepad++ mà đáng bỏ công để cài đặt dùng thành thạo Bạn xem tài liệu hướng dẫn đính kèm với Phụ lục để biết cách cài đặt Notepad++ cách thực thao tác đơn giản tập tin văn Notepad Notepad++ Hoặc bạn xem tài liệu hướng dẫn khác (như video hay tutorial mạng) Tập tin văn xuất hầu khắp nơi:) có phần mở rộng khác, chẳng hạn tập tin CSV (có phần mở rộng csv), dạng tập tin văn đánh dấu (có phần mở rộng html, xml, …) hay tập tin chứa mã nguồn ngơn ngữ lập trình (chẳng hạn mã nguồn C/C++ với phần mở rộng c, cpp, h), … 339 PHỤ LỤC A.9 TẠO TẬP TIN CSV Tập tin CSV (Comma-Separated Values) tập tin (thuần) văn lưu trữ liệu bảng tính (xem Mở rộng 4.7) Vì tập tin văn nên ta dùng trình soạn thảo văn (Text editor) Notepad, Notepad++, … để tạo tập tin Tuy nhiên, bảng tính thường tạo nhập liệu phần mềm xử lý bảng tính (Spreadsheet) chuyên nghiệp Microsoft Excel, … Các phần mềm lưu trữ bảng tính tập tin có định dạng riêng xls, xlsx, … mà chúng thường phức tạp dạng tập tin văn Dù vậy, hầu hết phần mềm xử lý bảng tính cho phép lưu trữ bảng tính dạng tập tin CSV Đây cách để trao đổi liệu phần mềm xử lý bảng tính với và/hoặc với phần mềm xử lý liệu khác Bạn xem tài liệu hướng dẫn đính kèm với Phụ lục để biết cách tạo bảng tính lưu trữ dạng tập tin CSV Microsoft Excel Hoặc bạn xem tài liệu hướng dẫn khác (như video hay tutorial mạng) 340 TÀI LIỆU THAM KHẢO Brian W Kernighan, Dennis M Ritchie The C Programming Language, 2nd edition Prentice Hall, 1988 Eric S Roberts The Art and Science of C: A Library Based Introduction to Computer Science Addison-Wesley, 1994 K N King C Programming: A Mordern Approach, 2nd edition W W Norton & Company, 2008 Paul Deitel, Harvey Deitel C: How to Program, 7th edition Prentice Hall, 2012 Trần Đan Thư, Nguyễn Thanh Phương, Đinh Bá Tiến, Trần Minh Triết Nhập mơn Lập trình NXB Khoa học Kỹ thuật, 2011 341