1. Trang chủ
  2. » Tất cả

[Tài liệu lập trình C] - Chương 2 - Những Kỹ Thuật Nâng Cao

164 4 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 164
Dung lượng 2,2 MB

Nội dung

Tài liệu hướng dẫn lập trình C Apprenez programmer en C www.siteduzero.com Tác giả: M@teo21 1) Modular Programming (Mô-đun Lập trình)  Prototypes  Headers  Separate Compilation  Phạm Vi Sử Dụng (scope) functions biến số 5) Preprocessor – Tiền xử lý  #include  #define  Macro  Condition 6) Tạo biến kiểu riêng bạn  Cấu trúc (struct)  Mảng cấu trúc  Typedef 2) Pointer (Con trỏ)  Vấn đề nan giải  Địa nhớ  Cách sử dụng pointer (con trỏ)  Cách sử dụng trỏ function 7) Những thao tác làm việc với tập tin (file)  Mở đóng tập tin  Ghi liệu vào tập tin  Đọc liệu tập tin  Di chuyển tập tin  Đổi tên xóa tập tin 3) Arrays (Mảng)  Các Arrays nhớ  Cách tạo array  Liệt kê giá trị array  Tạo function để liệt kê giá trị array  Bài tập thực hành 8) Cấp phát động  Kích thước biến  Cấp phát nhớ động  Giải phóng nhớ 4) Chuỗi ký tự  Biến kiểu Char  String hay gọi mảng ký tự  Các thao tác với chuỗi ký tự Dịch giả: Mr Hung daihung.pham@yahoo.fr 9) Test Program: Người Treo Cổ  Một số dẫn  Giải pháp 1:  Giải pháp 2:  Ý tưởng cải tiến -1- Editor: M0N1M thaibaminh2512@gmai.com Tài liệu hướng dẫn lập trình C Apprenez programmer en C www.siteduzero.com Tác giả: M@teo21 Bài 1: Modular Programming Mơ-đun Lập Trình Trong chương thứ hai hướng dẫn, bạn khám phá khái niệm lập trình ngơn ngữ C cao Cho đến lúc này, bạn làm việc file tên "main.c" Điều tạm chấp nhận giai đoạn chương trình cịn ngắn, tới chương trình chứa hàng chục, chí hàng trăm functions, bạn đặt tất chúng file dài ! Cũng lí mà người ta sáng tạo gọi modular programming Về mặt ngun tắc nghe ngu ngốc: thay đặt tất dịng code file (main.c), chia thành nhiều file nhỏ Chú ý: không đặt instruction system ("PAUSE") vào phía cuối main ( ) Hãy thêm vào bạn cần Và tơi khuyên bạn sử dụng IDE Code::Blocks Vì IDE update để đặt instruction system ("PAUSE") phía cuối main ( ) Prototypes Những hướng dẫn trước, yêu cầu bạn đặt functions trước main Tại vậy? Tại thứ tự xếp có tầm quan trọng: Khi bạn đặt function trước main, máy tính đọc nhớ Khi gọi lại main, máy tính biết phải kiếm lại function đâu Nhưng bạn đặt sau main, chương trình khơng hoạt động máy tính khơng biết function Hãy test thử, bạn thấy ! Nhưng vấn đề bất lợi, không? Tôi đồng ý với bạn điểm ! Nhưng bạn yên tâm, nhà lập trình trước gặp điều tương tự họ tìm cách khắc phục Dịch giả: Mr Hung daihung.pham@yahoo.fr -2- Editor: M0N1M thaibaminh2512@gmai.com Tài liệu hướng dẫn lập trình C Apprenez programmer en C www.siteduzero.com Tác giả: M@teo21 Nhờ vào tơi cho bạn sau đây, bạn đặt functions theo thứ tự bạn muốn code source Prototype để báo trước function Chúng ta bắt đầu việc báo trước cho máy tính function cách viết prototypes Tôi biết bạn nghĩ từ ngữ mang đậm chất “high-tech” prototypes thứ ghê gớm thật thứ hoàn toàn ngu ngốc Hãy xem đoạn code function dientichHinhChuNhat: C code: double dientichHinhChuNhat (double chieuRong, double chieuDai) { return chieuRong * chieuDai; } Hãy copy lại dòng (double dientichHinhChuNhat ) chép vào phần đầu file source bạn (sau dòng #include) Và thêm vào dấu chấm phẩy cuối Vậy xong ! Bây bạn đặt function sau main bạn muốn Dịch giả: Mr Hung daihung.pham@yahoo.fr -3- Editor: M0N1M thaibaminh2512@gmai.com Tài liệu hướng dẫn lập trình C Apprenez programmer en C www.siteduzero.com Tác giả: M@teo21 Và đoạn code thay đổi sau: C code: #include #include // Doan code sau chinh la prototype cua function dientichHinhChuNhat : double dientichHinhChuNhat (double chieuRong, double chieuDai); int main (int argc, char *argv[ ]) { printf ("Hinh chu nhat voi chieu rong va chieu dai 10 co dien tich la %f\n", dientichHinhChuNhat(5, 10)); printf ("Hinh chu nhat voi chieu rong 2.5 va chieu dai 3.5 co dien tich la %f\n", dientichHinhChuNhat(2.5, 3.5)); printf ("Hinh chu nhat voi chieu rong 4.2 va chieu dai 9.7 co dien tich la %f\n", dientichHinhChuNhat(4.2, 9.7)); return 0; } // function dientichHinhChuNhat bay gio co the dat o bat ki vi tri nao code source double dientichHinhChuNhat (double chieuRong, double chieuDai) { return chieuRong * chieuDai; } Và điều thay đổi là, dòng prototype thêm vào phần đầu code source Một prototype thật lời dẫn cho máy tính Nó thơng báo với máy tính có tồn function (dientichHinhChuNhat) với tham số (parameters) cần đưa vào type giá trị xuất Nhờ mà máy tính tự xếp Và nhờ vào dịng code này, bạn khơng cịn đau đầu chọn vị trí đặt function Hãy ln viết prototypes functions có chương trình Chương trình bạn khơng bị chậm sử dụng nhiều function đâu: bạn nên tập thói quen tốt kể từ bây giờ, đặt prototype cho functions bạn viết Chắc bạn thấy function main khơng có prototype Và function khơng cần prototype, máy tính biết rõ (tất chương trình dùng đến mà, bắt buộc phải biết thôi) Dịch giả: Mr Hung daihung.pham@yahoo.fr -4- Editor: M0N1M thaibaminh2512@gmai.com Tài liệu hướng dẫn lập trình C Apprenez programmer en C www.siteduzero.com Tác giả: M@teo21 Để cho xác hơn, bạn cần biết thêm: dịng code prototype khơng cần thiết phải viết lại tên biến số cần cho parameter Máy tính cần biết type biến số thơi Vì đơn giản ta viết sau: C code: double dientichHinhChuNhat (double , double); Và với cách viết đó, chương trình chạy tốt, lợi ích cách viết bạn copy-paste nhanh chóng thêm vào dấu chấm phẩy cuối ĐỪNG QUÊN đặt dấu chấm phẩy cuối prototype Vì giúp cho máy tính nhận khác prototype function Nếu bạn không làm vậy, bạn mắc lỗi biên dịch chương trình Headers Cho đến lúc này, bạn sử dụng file source cho project bạn Và yêu cầu bạn gọi file source main.c Cách sử dụng nhiều files project Trong thực tế, chương trình khơng viết hết tồn file main.c Chắc chắn làm việc mị mẫm file chứa 10000 dịng code thật khơng thiết thực chút Chính vậy, thơng thường, project tạo nhiều files Nhưng mà project vậy? Khơng phải chứ, bạn qn ? Dịch giả: Mr Hung daihung.pham@yahoo.fr -5- Editor: M0N1M thaibaminh2512@gmai.com Tài liệu hướng dẫn lập trình C Apprenez programmer en C www.siteduzero.com Tác giả: M@teo21 Ok, không sao, giải thích lại cho bạn, việc thống chung khái niệm thật cần thiết Project tập hợp files source chương trình Trong thời điểm tại, chương trình chứa file Hãy nhìn vào IDE, phía bên trái: Bạn thấy hình chụp phía trên, bên trái, project chứa file main.c Sau đây, tơi cho bạn xem hình ảnh chương trình thật sự, chương trình mà bạn thực sau: trò chơi Sokoban Bạn thấy đấy, có nhiều files khác Một chương trình bình thường giống trên: bạn thấy nhiều files liệt kê cột bên trái Bạn tìm thấy file main.c: bên chứa function main Và chương trình tơi viết, tơi để function main file main.c (điều không bắt buộc, người có cách xếp khác nhau, theo tốt bạn nên thực giống điểm này) Dịch giả: Mr Hung daihung.pham@yahoo.fr -6- Editor: M0N1M thaibaminh2512@gmai.com Tài liệu hướng dẫn lập trình C Apprenez programmer en C www.siteduzero.com Tác giả: M@teo21 Nhưng phải tạo nhiều files vậy? Vậy tơi tạo tối đa file cho project ? Điều tùy thuộc vào bạn Bình thường, người ta thường hay xếp function có chủ đề vào chung với Trong hình vẽ trên, file editor.c tập hợp functions liên quan đến việc thay đổi cấp độ trò chơi, file game.c, tập hợp functions liên quan đến trò chơi, Các files h c Bạn thấy hình vẽ trên, có loại file khác nhau:   file h: gọi file headers Những file chứa prototype functions file c: file source Những file chứa nội dung functions Bình thường, người ta để prototypes file c giống vừa làm file main.c (chỉ trừ chương trình q nhỏ) Mỗi file c tương ứng với file h chứa prototype functions Xem lại hình lần nữa:    Có file editor.c (chứa C code functions) file editor.h (chứa prototype functions đó) Tương tự ta có file game.c file game.h Làm máy tính biết prototypes nằm file khác file c ? Ta thêm file h vào chương trình nhờ vào thị tiền xử lý (preprocessor directive) Tập trung nhé, bạn cần chuẩn bị tinh thần để hiểu biết thêm nhiều thứ ! Làm thêm vào file header ? Bạn biết cách mà, bạn làm nhiều lần nhớ không? Dịch giả: Mr Hung daihung.pham@yahoo.fr -7- Editor: M0N1M thaibaminh2512@gmai.com Tài liệu hướng dẫn lập trình C Apprenez programmer en C www.siteduzero.com Tác giả: M@teo21 Chúng ta xem ví dụ đoạn đầu file jeu.c tơi viết: C code: #include #include #include "game.h" void play (SDL_Surface* screen) { // Và bạn biết cách thêm vào sử dụng thị tiền xử lý (preprocessor directive) #include Bây giờ, ý dòng đoạn code trên: C code: #include #include #include "game.h" // them vao file game.h Tôi thêm vào files h: stdio, stdlib game Có khác biệt đây: Những file mà bạn để chung folder project phải viết ngoặc kép " " ("game.h") file thư viện (đã cài đặt trước, bình thường nằm folder IDE bạn) phải viết ngoặc nhọn < > () Tóm lại, thơng thường ta sử dụng:   Ngoặc nhọn < > để thêm vào file thư viện tìm thấy folder IDE Ngoặc kép " " để thêm vào file tìm thấy folder project bạn ( bên cạnh file c) Dịch giả: Mr Hung daihung.pham@yahoo.fr -8- Editor: M0N1M thaibaminh2512@gmai.com Tài liệu hướng dẫn lập trình C Apprenez programmer en C www.siteduzero.com Tác giả: M@teo21 Lệnh #include yêu cầu thêm vào nội dung file h vào file c Giống bạn yêu cầu "Hãy thêm vào nội dung file game.h" Vậy nội dung file game.h gì? Chúng ta tìm thấy prototype functions nằm file game.c ! C code: /* game.h Noi dung : prototypes of functions in game */ void play (SDL_Surface* screen); void placingPlay (int card[ ][NB_BLOCK_HEIGHT], SDL_Rect *post, int direction); void placingFund (int *firstCase, int *secondCase); Và cách project thật hoạt động ! Vậy lợi ích việc đặt prototypes vào file h ? Lí đơn giản Khi code source bạn viết yêu cầu gọi function, máy tính bạn bắt buộc phải biết trước function gì, cần tham số (parameter), Vì ta cần đến prototype: giống bảng hướng dẫn sử dụng trước dùng function cho máy tính Câu hỏi tương ứng với câu hỏi thứ tự chạy chương trình: bạn đặt prototypes file h (headers) #include phần đầu file c , máy tính bạn hiểu cách sử dụng tất function kể từ giai đoạn bắt đầu chạy chương trình Và điều giúp bạn bận tâm thứ tự đặt function files c Hiện giờ, bạn viết số chương trình chứa khoảng hai ba functions, bạn chưa thấy rõ ích lợi prototypes sau, bạn viết nhiều functions rồi, bạn không đặt prototypes file h, bạn thường xuyên gặp lỗi việc dịch chương trình Dịch giả: Mr Hung daihung.pham@yahoo.fr -9- Editor: M0N1M thaibaminh2512@gmai.com Tài liệu hướng dẫn lập trình C Apprenez programmer en C www.siteduzero.com Tác giả: M@teo21 Nếu bạn gọi function (được viết file functions.c) từ file main.c bạn cần phải thêm prototypes functions.c file main.c Bằng cách tạo #include "functions.h" đầu main.c Bạn cần nhớ: lần bạn gọi function X file, bạn cần phải thêm prototypes function vào file Điều giúp trình biên dịch kiểm tra lại xem bạn có gọi cách hay khơng Vậy làm cách tơi thêm vào project file h c ? Điều phụ thuộc vào IDE bạn sử dụng tổng quát qui trình tương tự nhau: File/New/ Empty file Việc tạo file trống File chưa có dạng h hay c, bạn cần lưu lại để thơng báo điều Cứ lưu lại (mặc dù file trống !) Máy tính hỏi bạn tên file muốn lưu lại lúc bạn lựa chọn h c :  Nếu bạn đặt tên [tênfile].c có dạng c  Nếu bạn đặt tên [tênfile].h có dạng h Đơn giản Lưu lại file folder chứa files khác dùng cho project (folder chứa file main.c) Thông thường, tất file h c lưu lại folder Dịch giả: Mr Hung daihung.pham@yahoo.fr - 10 - Editor: M0N1M thaibaminh2512@gmai.com ... daihung.pham@yahoo.fr - 22 - Editor: M0N1M thaibaminh25 12@ gmai.com Tài liệu hướng dẫn lập trình C Apprenez programmer en C www.siteduzero.com Tác giả: M@teo21 Và kết quả: Console gio va 90 phut Ặc chương trình. .. Hung daihung.pham@yahoo.fr - 20 - Editor: M0N1M thaibaminh25 12@ gmai.com Tài liệu hướng dẫn lập trình C Apprenez programmer en C www.siteduzero.com Tác giả: M@teo21 Bài 2: Pointer Con trỏ Đã đến... daihung.pham@yahoo.fr - 12 - Editor: M0N1M thaibaminh25 12@ gmai.com Tài liệu hướng dẫn lập trình C Apprenez programmer en C www.siteduzero.com Tác giả: M@teo21 Phân tích trình Compilation (separate

Ngày đăng: 26/11/2016, 10:49

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w