Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 107 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
107
Dung lượng
3,35 MB
Nội dung
Xin chào bạn! Cám ơn bạn quan tâm đến tài liệu, tải xuống sử dụng nó. Mình người tìm hiểu ngôn ngữ C này. Mình tìm ebook, tài liệu có liên quan, upload lên mạng chia sẻ…hy vọng phần giúp ích cho bạn làm quen với lập trình. Rất mong làm quen với bạn gần xa yêu thích môn lập trình để học kinh nghiệm. Liên lạc: Mình TP.HCM Yahoo: Email : laptrinh_123 dung.softwares@gmail.com Hướng lâu dài theo ngành “Lập trình ứng dụng web”. Theo ngành cần phải biết nhiều: Lập trình (PHP,MySQL…) - Đồ họa ( Flash, Photoshop…), chưa kể thứ tổng hợp linh tinh khác có liên quan ngôn ngữ lập trình khác… Nói chung có nhiều thứ để học hỏi lắm. Mình sẵn sàng đón nhận giúp đỡ bạn có kinh nghiệm chuyên môn, giao lưu với bạn có sở thích mình, trao đổi tài liệu có liên quan đến lĩnh vực trên… Không biết bạn nghĩ sao, thấy tự học mà theo cách lên mạng tải ebook rùi in ngâm kíu thì… chậm tiến lắm. Mình nghĩ phải có học hỏi từ người có K/Nghiệm khác tốt. Bạn bè bổ sung cho lỗ hổng kiến thức… có tác dụng tích cực hơn. “HỌC THÀY KO BẰNG HỌC BẠN” mà lại… TP.HCM, ngày 20/07/2009 Lập trình PHẦN GIỚI THIỆU VỀ MỘT NGÔN NGỮ LẬP TRÌNH NGÔN NGỮ LẬP TRÌNH C Chương GIỚI THIỆU VỀ NGÔN NGỮ C & MÔI TRƯỜNG TURBO C 3.0 Học xong chương này, sinh viên nắm vấn đề sau: - Tổng quan ngôn ngữ lập trình C. - Môi trường làm việc cách sử dụng Turbo C 3.0. I. TỔNG QUAN VỀ NGÔN NGỮ LẬP TRÌNH C C ngôn ngữ lập trình cấp cao, sử dụng phổ biến để lập trình hệ thống với Assembler phát triển ứng dụng. Vào năm cuối thập kỷ 60 đầu thập kỷ 70 kỷ XX, Dennish Ritchie (làm việc phòng thí nghiệm Bell) phát triển ngôn ngữ lập trình C dựa ngôn ngữ BCPL (do Martin Richards đưa vào năm 1967) ngôn ngữ B (do Ken Thompson phát triển từ ngôn ngữ BCPL vào năm 1970 viết hệ điều hành UNIX máy PDP-7) cài đặt lần hệ điều hành UNIX máy DEC PDP-11. Năm 1978, Dennish Ritchie B.W Kernighan cho xuất “Ngôn ngữ lập trình C” phổ biến rộng rãi đến nay. Lúc ban đầu, C thiết kế nhằm lập trình môi trường hệ điều hành Unix nhằm mục đích hỗ trợ cho công việc lập trình phức tạp. Nhưng sau, với nhu cầu phát triển ngày tăng công việc lập trình, C vượt qua khuôn khổ phòng thí nghiệm Bell nhanh chóng hội nhập vào giới lập trình để công ty lập trình sử dụng cách rộng rãi. Sau đó, công ty sản xuất phần mềm đưa phiên hỗ trợ cho việc lập trình ngôn ngữ C chuẩn ANSI C khai sinh từ đó. Ngôn ngữ lập trình C ngôn ngữ lập trình hệ thống mạnh “mềm dẻo”, có thư viện gồm nhiều hàm (function) tạo sẵn. Người lập trình tận dụng hàm để giải toán mà không cần phải tạo mới. Hơn nữa, ngôn ngữ C hỗ trợ nhiều phép toán nên phù hợp cho việc giải toán kỹ thuật có nhiều công thức phức tạp. Ngoài ra, C cho phép người lập trình tự định nghĩa thêm kiểu liệu trừu tượng khác. Tuy nhiên, điều mà người vừa học lập trình C thường gặp “rắc rối” “hơi khó hiểu” “mềm dẻo” C. Dù vậy, C phổ biến rộng rãi trở thành công cụ lập Trang 12 Lập trình trình mạnh, sử dụng ngôn ngữ lập trình chủ yếu việc xây dựng phần mềm nay. Ngôn ngữ C có đặc điểm sau: o Tính cô đọng (compact): C có 32 từ khóa chuẩn 40 toán tử chuẩn, hầu hết biểu diễn chuỗi ký tự ngắn gọn. o Tính cấu trúc (structured): C có tập hợp thị lập trình cấu trúc lựa chọn, lặp… Từ chương trình viết C tổ chức rõ ràng, dễ hiểu. o Tính tương thích (compatible): C có tiền xử lý thư viện chuẩn vô phong phú nên chuyển từ máy tính sang máy tính khác chương trình viết C hoàn toàn tương thích. o Tính linh động (flexible): C ngôn ngữ uyển chuyển cú pháp, chấp nhận nhiều cách thể hiện, thu gọn kích thước mã lệnh làm chương trình chạy nhanh hơn. o Biên dịch (compile): C cho phép biên dịch nhiều tập tin chương trình riêng rẽ thành tập tin đối tượng (object) liên kết (link) đối tượng lại với thành chương trình thực thi (executable) thống nhất. II. MÔI TRƯỜNG LẬP TRÌNH TURBO C Turbo C môi trường hỗ trợ lập trình C hãng Borland cung cấp. Môi trường cung cấp chức như: soạn thảo chương trình, dịch, thực thi chương trình… Phiên sử dụng Turbo C 3.0. II.1. Gọi Turbo C Chạy Turbo C giống chạy chương trình khác môi trường DOS hay Windows, hình xuất menu Turbo C có dạng sau: Dòng gọi menu (menu bar). Mỗi mục menu lại có nhiều mục nằm menu kéo xuống. Dòng ghi chức số phím đặc biệt. Chẳng hạn gõ phím F1 ta có hệ thống trợ giúp mà ta tham khảo nhiều thông tin bổ ích. Trang 13 Lập trình Muốn vào menu ngang ta gõ phím F10. Sau dùng phím mũi tên qua trái phải để di chuyển vùng sáng tới mục cần chọn gõ phím Enter. Trong menu kéo xuống ta lại dùng phím mũi tên lên xuống để di chuyển vùng sáng tới mục cần chọn gõ Enter. Ta chọn mục menu cách giữ phím Alt gõ vào ký tự đại diện mục (ký tự có màu sắc khác với ký tự khác). Chẳng hạn để chọn mục File ta gõ Alt-F (F ký tự đại diện File) II.2. Soạn thảo chương trình Muốn soạn thảo chương trình ta chọn mục New menu File (File >New) Trên hình xuất vùng trống ta soạn thảo nội dung chương trình. Trong trình soạn thảo chương trình ta sử dụng phím sau: Các phím xem thông tin trợ giúp: - F1: Xem toàn thông tin phần trợ giúp. - Ctrl-F1: Trợ giúp theo ngữ cảnh (tức trỏ từ đo, chẳng hạn int mà bạn gõ phím Ctrl-F1 bạn có thông tin kiểu liệu int) Các phím di chuyển trỏ vùng soạn thảo chương trình: Phím Ý nghĩa Phím tắt ( tổ hợp phím) Enter Đưa trỏ xuống dòng Mũi tên lên Đưa trỏ lên hàng trước Ctrl-E Mũi tên xuống Đưa trỏ xuống hàng sau Ctrl-X Mũi tên sang trái Đưa trỏ sang trái ký tự Ctrl-S Mũi tên sang phải Đưa trỏ sang phải ký tự Ctrl-D End Đưa trỏ đến cuối dòng Home Đưa trỏ đến đầu dòng PgUp Đưa trỏ lên trang trước Ctrl-R PgDn Đưa trỏ xuống trang sau Ctrl-C Đưa trỏ sang từ bên trái Ctrl-A Đưa trỏ sang từ bên phải Ctrl-F Các phím xoá ký tự/ dòng: Phím Ý nghĩa Phím tắt Delete Xoá ký tự ví trí trỏ Ctrl-G BackSpace Di chuyển sang trái đồng thời xoá ký tự đứng trước trỏ Ctrl-H Xoá dòng chứa trỏ Ctrl-Y Xóa từ vị trí trỏ đến cuối dòng Ctrl-Q-Y Xóa ký tự bên phải trỏ Ctrl-T Các phím chèn ký tự/ dòng: Insert Thay đổi viết xen hay viết chồng Ctrl-N Xen dòng trống vào trước vị trí trỏ Sử dụng khối : Khối đoạn văn chương trình hình chữ nhật xác định đầu khối góc bên trái cuối khối góc bên phải hình chữ nhật. Khi khối xác định (trên hình khối có màu sắc khác chỗ bình thường) ta có Trang 14 Lập trình thể chép khối, di chuyển khối, xoá khối . Sử dụng khối cho phép soạn thảo chương trình cách nhanh chóng. sau thao tác khối: Phím tắt Ý nghĩa Ctrl-K-B Đánh dấu đầu khối Ctrl-K-K Đánh dấu cuối khối Ctrl-K-C Chép khối vào sau vị trí trỏ Ctrl-K-V Chuyển khối tới sau vị trí trỏ Ctrl-K-Y Xoá khối Ctrl-K-W Ghi khối vào đĩa tập tin Ctrl-K-R Đọc khối (tập tin) từ đĩa vào sau vị trí trỏ Ctrl-K-H Tắt/mở khối Ctrl-K-T Đánh dấu từ chứa chon trỏ Ctrl-K-P In khối Các phím, phím tắt thực thao tác khác: Phím Ý nghĩa Phím tắt Ctrl-K-D, F10 Kích hoạt menu Ctrl-K-Q F2 Lưu chương trình soạn vào đĩa Ctrl-K-S F3 Tạo tập tin Tab Di chuyển trỏ khoảng đồng thời đẩy dòng văn Ctrl-I ESC Hủy bỏ thao tác lệnh Ctrl-U Đóng tập tin Alt-F3 Hiện hộp thoại tìm kiếm Ctrl-Q-F Hiện hộp thoại tìm kiếm thay Ctrl-Q-A Tìm kiếm tiếp tục Ctrl-L Ví dụ: Bạn gõ đoạn chương trình sau: #include #include int main () { char ten[50]; printf(“Xin cho biet ten cua ban !”); scanf(“%s”,ten); printf(“Xin chao ban %s”,ten); getch(); return 0; } II.3. Ghi chương trình soạn thảo vào đĩa Sử dụng File/Save gõ phím F2. Có hai trường hợp xảy ra: - Nếu chương trình chưa ghi lần hội thoại xuất cho phép bạn xác định tên tập tin (FileName). Tên tập tin phải tuân thủ quy cách đặt tên DOS không cần có phần mở rộng (sẽ tự động có phần mở rộng .C .CPP nói thêm phần Option). Sau gõ phím Enter. - Nếu chương trình ghi lần ghi thay đổi bổ sung lên tập tin chương trình cũ. Trang 15 Lập trình Chú ý: Để đề phòng điện soạn thảo chương trinh bạn nên gõ phím F2. Quy tắc đặt tên tập tin DOS: Tên tập tin gồm phần: Phần tên phần mở rộng. o Phần tên tập tin phải bắt đầu ký tự từ a z (không phân biệt hoa thường), theo sau ký tự từ a z, ký số từ hay dấu gạch (_), phần dài tối đa ký tự. o Phần mở rộng: phần dài tối đa ký tự. Ví dụ: Ghi chương trình vừa soạn thảo lên đĩa với tên CHAO.C II.4. Thực chương trình Để thực chương trình dùng Ctrl-F9 (giữ phím Ctrl gõ phím F9). Ví dụ: Thực chương trình vừa soạn thảo xong quan sát hình để thấy kết việc thực thi chương trình sau gõ phím để trở lại với Turbo. II.5. Mở chương trình có đĩa Với chương trình có đĩa, ta mở để thực sửa chữa bổ sung. Để mở chương trình ta dùng File/Open gõ phím F3. Sau gõ tên tập tin vào hộp File Name lựa chọn tập tin danh sách tập tin gõ Enter. Ví dụ: Mở tập tin CHAO.C sau bổ sung để có chương trình sau: #include #include int main () { char ten[50]; printf(“Xin cho biet ten cua ban !”); scanf(“%s”,ten); printf(“Xin chao ban %s\n ”,ten); printf(“Chao mung ban den voi Ngon ngu lap trinh C”); getch(); return 0; } Ghi lại chương trình (F2) cho thực (Ctrl-F9). Hãy so sánh xem có khác trước? II.6. Thoát khỏi Turbo C trở DOS (hay Windows) Dùng File/Exit Alt-X. II.7. Sử dụng số lệnh menu II.7.1. Các lệnh menu File (Alt -F) - Lệnh New : Dùng để tạo chương trình. Tên ngầm định chương trình NONAMEXX.C (XX số từ 00 đến 99). - Lệnh Open : Dùng để mở chương trình có sẵn đĩa để sửa chữa, bổ sung để thực chương trình Trang 16 Lập trình đó. Khi tập tin mở văn chương trình trình bày vùng soạn thảo; hộp thoại Open sau: Nơi nhập tên file Thư mực hành Trong trường hợp ta nhập vào tên tập tin chưa tồn chương trình tạo sau ta lưu trữ, chương trình lưu với tên đó. - Lệnh Save : Dùng để lưu chương trình soạn thảo vào đĩa. - Lệnh Save as . : Dùng để lưu chương trình soạn thảo với tên khác, hộp thoại lưu tập tin soạn với tên khác sau: Tên (tên cũ) Tên ( kể tên thư mục) - Lệnh : Save All: Trong lúc làm việc với Turbo C, ta mở lúc nhiều chương trình để sửa chữa, bổ sung. Lệnh Save All dùng để lưu lại thay đổi tất chương trình mở - Lệnh Change Dir . : Dùng để đổi thư mục hành Trang 17 Lập trình Thư mục hành Chọn thư mục khác - Lệnh Print : Dùng để in chương trình soạn thảo máy in. - Lệnh Printer Setup .: Dùng để thiết đặt số thông số cho máy in. - Lệnh Dos Shell : Dùng để thoát tạm thời Dos, để trở lại Turbo C ta đánh EXIT. - Lệnh Exit : Dùng để thoát khỏi C. II.7.2. Các lệnh menu Edit (Alt -E) - Lệnh Undo : Dùng để hủy bỏ thao tác soạn thảo cuối cửa số soạn thảo. - Lệnh Redo : Dùng để phục hồi lại thao tác bị Undo cuối cùng. - Lệnh Cut : Dùng để xóa phần văn đánh dấu khối, phần liệu bị xóa lưu vào vùng nhớ đặc biệt gọi Clipboard. - Lệnh Copy : Dùng để chép phần chương trình đánh dấu khối vào Clipboard. - Lệnh Paste : Dùng để dán phần chương trình lưu Clipboard vào số soạn thảo, bắt đầu vị trí trỏ. - Lệnh Clear : Dùng để xóa phần liệu đánh dấu khối, liệu bị xóa không lưu vào Clipboard. - Lệnh Show clipboard : Dùng để hiển thị phần chương trình lưu Clipboard cửa sổ mới. II.7.3. Các lệnh menu Search (Alt -S) - Lệnh Find .: Dùng để tìm kiếm cụm từ văn chương trình. Nếu tìm thấy trỏ di chuyển đến đoạn văn trùng với cụm từ cần tìm; hộp thoại Find sau: Trang 18 Lập trình Nhập cụm từ cần tìm vào Ý nghĩa lựa chọn hộp thoại sau: Case sentitive : Phân biệt chữ IN HOA với chữ in thường so sánh cụm từ cần tìm với văn chương trình. Whole word only: Một đoạn văn chương trình trùng với toàn cụm từ cần tìm xem tìm thấy. Regular expression: Tìm theo biểu thức Global :Tìm tất tập tin. Forward : Tìm đến cuối tập tin. Selected text: Chỉ tìm khối văn đánh dấu. Backward: Tìm đến đầu tập tin. From cursor : Bắt đầu từ vị trí nháy. Entire scope: Bắt đầu vị trí khối tập tin. - Lệnh Replace .: Dùng để tìm kiếm đoạn văn đó, tự động thay đoạn văn khác, hộp thoại replace sau: Tìm cụm từ Scanf thay scanf - Lệnh Search again : Dùng để thực lại việc tìm kiếm. - Các lệnh lại menu Search, bạn tìm hiểu thêm thực hành trực tiếp máy tính. II.7.4. Các lệnh menu Run (Alt -R) - Lệnh Run : Dùng để thực thi hay "chạy" chương trình. - Lệnh Step over : Dùng để "chạy" chương trình bước. - Lệnh Trace into : Dùng để chạy chương trình bước. Khác với lệnh Step over chỗ: Lệnh Step over không cho xem bước "chạy" chương trình con, lệnh Trace into cho xem bước chương trình con. Trang 19 Lập trình - Các lệnh lại, bạn tìm hiểu thêm thực hành máy. II.7.5. Các lệnh menu Compile (Alt C) - Lệnh Complie: Biên dịch chương trình. - Lệnh Make , Build, … : Các lệnh bạn tìm hiểu thêm thực hành trực tiếp máy tính. - Lệnh Information : Dùng để thị thông tin chương trình, Mode, môi trường . II.7.6. Các lệnh menu Debug (Alt-D) Trên menu Debug bao gồm số lệnh giúp người lập trình "gỡ rối" chương trình . Người lập trình sử dụng chức "gỡ rối" gặp số "lỗi" thuật toán, sử dụng biến nhớ… - Lệnh Breakpoints: Dùng để đặt "điểm dừng" chương trình. Khi chương trình thực thi đến "điểm dừng dừng lại" . - Lệnh Watch : Dùng để mở cửa sổ hiển thị kết trung gian biến nhớ chạy chương trình bước. - Lệnh Evaluate/Modify: Bạn tìm hiểu thực hành trực tiếp máy. II.7.7. Các lệnh menu Project (Alt- P) Trên menu Project bao gồm lệnh liên quan đến dự án : đóng, mở, thêm , xóa mục,… II.7.8. Các lệnh menu Option (Alt -O) Trên menu Option bao gồm lệnh giúp người lập trình thiết đặt số tự chọn chạy chương trình. Thông thường, người lập trình không cần phải thiết đặt lại tự chọn. - Lệnh Compiler .: Dùng để thiết đặt lại số thông số biên dịch chương trình hình sau Phần trình bày thuộc mục: Directories, Enviroment Save; phần khác sinh viên tự tìm hiểu. - Lệnh Directories .: Dùng để đặt lại đường dẫn tìm đến tập tin cần thiết biên dịch chương trình hình sau: Trang 20 Lập trình ; } ; Trong đó: - : tên đặt theo quy tắc đặt tên danh biểu; tên mang ý nghĩa tên kiểu cấu trúc. - (i=1 n): trường cấu trúc có liệu thuộc kiểu (tên trường phải tên đặt theo quy tắc đặt tên danh biểu). Ví dụ 1: Để quản lý ngày, tháng, năm ngày năm ta khai báo kiểu cấu trúc gồm thông tin: ngày, tháng, năm. struct NgayThang { unsigned char Ngay; unsigned char Thang; unsigned int Nam; }; typedef struct { unsigned char Ngay; unsigned char Thang; unsigned int Nam; } NgayThang; Ví dụ 2: Mỗi sinh viên cần quản lý thông tin: mã số sinh viên, họ tên, ngày tháng năm sinh, giới tính, địa thường trú. Lúc ta khai báo struct gồm thông tin trên. struct SinhVien { char MSSV[10]; char HoTen[40]; struct NgayThang NgaySinh; int Phai; char DiaChi[40]; }; typedef struct { char MSSV[10]; char HoTen[40]; NgayThang NgaySinh; int Phai; char DiaChi[40]; } SinhVien; I.3 Khai báo biến cấu trúc Việc khai báo biến cấu trúc tương tự khai báo biến thuộc kiểu liệu chuẩn. Cú pháp: - Đối với cấu trúc định nghĩa theo cách 1: struct [, …]; - Đối với cấu trúc định nghĩa theo cách 2: [, …]; Ví dụ: Khai báo biến NgaySinh có kiểu cấu trúc NgayThang; biến SV có kiểu cấu trúc SinhVien. struct NgayThang NgaySinh; struct SinhVien SV; Trang 99 NgayThang NgaySinh; SinhVien SV; Lập trình II. CÁC THAO TÁC TRÊN BIẾN KIỂU CẤU TRÚC II.1 Truy xuất đến trường biến cấu trúc Cú pháp: . Khi sử dụng cách truy xuất theo kiểu này, thao tác . giống thao tác biến kiểu liệu . Ví dụ : Viết chương trình cho phép đọc liệu từ bàn phím cho biến mẩu tin SinhVien in biến mẩu tin lên hình: #include #include #include typedef struct { unsigned char Ngay; unsigned char Thang; unsigned int Nam; } NgayThang; typedef struct { char MSSV[10]; char HoTen[40]; NgayThang NgaySinh; int Phai; char DiaChi[40]; } SinhVien; /* Hàm in lên hình mẩu tin SinhVien*/ void InSV(SinhVien s) { printf("MSSV: | Ho va ten | Ngay Sinh | Dia chi\n"); printf("%s | %s | %d-%d-%d | %s\n",s.MSSV,s.HoTen, s.NgaySinh.Ngay,s.NgaySinh.Thang,s.NgaySinh.Nam,s.DiaChi); } int main() { SinhVien SV, s; printf("Nhap MSSV: ");gets(SV.MSSV); printf("Nhap Ho va ten: ");gets(SV.HoTen); printf("Sinh ngay: ");scanf("%d",&SV.NgaySinh.Ngay); printf("Thang: ");scanf("%d",&SV.NgaySinh.Thang); printf("Nam: ");scanf("%d",&SV.NgaySinh.Nam); printf("Gioi tinh (0: Nu), (1: Nam): ");scanf("%d",&SV.Phai); flushall(); printf("Dia chi: ");gets(SV.DiaChi); InSV(SV); s=SV; /* Gán trị cho mẩu tin s*/ InSV(s); getch(); return 0; } Trang 100 Lập trình Lưu ý: - Các biến cấu trúc gán cho nhau. Thực chất thao tác toàn cấu trúc trường riêng rẽ nào. Chương trình dòng s=SV ví dụ. - Với biến kiểu cấu trúc ta thực thao tác sau đây: o Sử dụng hàm xuất nhập biến cấu trúc. o Các phép toán quan hệ, phép toán số học logic. Ví dụ: Nhập vào hai số phức tính tổng chúng. Ta biết số phức cặp (a,b) a, b số thực, a gọi phần thực, b phần ảo. (Đôi người ta viết số phức dạng a + ib i đơn vị ảo có tính chất i2=-1). Gọi số phức c1=(a1, b1) c2=(a2,b2) tổng hai số phức c1 c2 số phức c3 mà c3=(a1+a2, b1+b2). Với hiểu biết ta xem số phức cấu trúc có hai trường, trường biểu diễn cho phần thực, trường biểu diễn cho phần ảo. Việc tính tổng hai số phức tính cách lấy phần thực cộng với phần thực phần ảo cộng với phần ảo. #include #include #include typedef struct { float Thuc; float Ao; } SoPhuc; /* Hàm in số phức lên hình*/ void InSoPhuc(SoPhuc p) { printf("%.2f + i%.2f\n",p.Thuc,p.Ao); } int main() { SoPhuc p1,p2,p; clrscr(); printf("Nhap so phuc thu nhat:\n"); printf("Phan thuc: ");scanf("%f",&p1.Thuc); printf("Phan ao: ");scanf("%f",&p1.Ao); printf("Nhap so phuc thu hai:\n"); printf("Phan thuc: ");scanf("%f",&p2.Thuc); printf("Phan ao: ");scanf("%f",&p2.Ao); printf("So phuc thu nhat: "); InSoPhuc(p1); printf("So phuc thu hai: "); Trang 101 Lập trình InSoPhuc(p2); p.Thuc = p1.Thuc+p2.Thuc; p.Ao = p1.Ao + p2.Ao; printf("Tong so phuc: "); InSoPhuc(p); getch(); return 0; } Kết thực chương trình: II.2 Khởi tạo cấu trúc Việc khởi tạo cấu trúc thực lúc khai báo biến cấu trúc. Các trường cấu trúc khởi tạo đạt dấu { }, chúng phân cách dấu phẩy (,). Ví dụ: Khởi tạo biến cấu trúc NgaySinh: struct NgayThang NgaySinh ={29, 8, 1986}; III. CON TRỎ CẤU TRÚC III.1 Khai báo Việc khai báo biến trỏ kiểu cấu trúc tương tự khai báo biến trỏ khác, nghĩa đặt thêm dấu * vào phía trước tên biến. Cú pháp: struct * ; Ví dụ: Ta khai báo trỏ cấu trúc kiểu NgayThang sau: struct NgayThang *p; /* NgayThang *p; // Nếu có định nghĩa kiểu */ III.2 Sử dụng trỏ kiểu cấu trúc Khi khai báo biến trỏ cấu trúc, biến trỏ chưa có địa cụ thể. Lúc cấp phát byte để lưu giữ địa ghi nhận trỏ đến cấu trúc, chưa đến đối tượng cụ thể. Muốn thao tác trỏ cấu trúc hợp lệ, tương tự trỏ khác, ta phải: - Cấp phát vùng nhớ cho (sử dụng hàm malloc() hay calloc) - Hoặc, cho quản lý địa biến cấu trúc đó. Ví dụ: Sau khởi tạo giá trị cấu trúc: struct NgayThang Ngay = {29,8,1986}; Trang 102 Lập trình p = &Ngay; lúc biến trỏ p chứa địa Ngay. III.3 Truy cập thành phần cấu trúc quản lý trỏ Để truy cập đến trường cấu trúc thông qua trỏ nó, ta sử dụng toán tử dấu mũi tên (->: dấu - dấu >). Ngoài ra, ta sử dụng đến phép toán * để truy cập vùng liệu quản lý trỏ cấu trúc để lấy thông tin cần thiết. Ví dụ: Sử dụng trỏ cấu trúc. #include #include typedef struct { unsigned char Ngay; unsigned char Thang; unsigned int Nam; } NgayThang; int main() { NgayThang Ng={29,8,1986}; NgayThang *p; clrscr(); p=&Ng; printf("Truy cap binh thuong %d-%d-%d\n", Ng.Ngay,Ng.Thang,Ng.Nam); printf("Truy cap qua tro %d-%d-%d\n", p->Ngay,p->Thang,p->Nam); printf("Truy cap qua vung nho tro %d-%d-%d\n", (*p).Ngay,(*p).Thang,(*p).Nam); getch(); return 0; } Kết quả: IV. BÀI TẬP IV.1 Mục đích yêu cầu Làm quen biết cách sử dụng kiểu liệu cấu trúc kết hợp với kiểu liệu học. Phân biệt kiểu liệu mảng kiểu cấu trúc. Thực tập phần nội dung. Trang 103 Lập trình IV.2 Nội dung 1. Hãy định nghĩa kiểu: struct Hoso{ char HoTen[40]; float Diem; char Loai[10]; }; Viết chương trình nhập vào họ tên, điểm n học sinh. Xếp loại văn hóa theo cách sau: Điểm Xếp loại 9, 10 Giỏi 7, Khá 5, Trung bình Không đạt In danh sách lên hình theo dạng sau: XEP LOAI VAN HOA HO VA TEN DIEM XEPLOAI Nguyen Van A Kha Ho Thi B Trung binh Dang Kim C Khong dat 2. Xem phân số cấu trúc có hai trường tử số mẫu số. Hãy viết chương trình thực phép toán cộng, trừ, nhân, chia hai phân số. (Các kết phải tối giản ). 3. Tạo danh sách cán công nhân viên, người người xem cấu trúc bao gồm trường Ho, Ten, Luong, Tuoi, Dchi. Nhập số người vào danh sách, xếp tên theo thứ tự từ điển, in danh sách xếp theo mẫu sau: DANH SACH CAN BO CONG NHAN VIEN | STT |HO VA TEN | LUONG | TUOI | DIACHI | | Nguyen Van | 333.00 | 26 Tho | | | Dang Kim B | 23 | Vinh Long | Trang 104 | Can 290.00 | | Lập trình Chương 10 KIỂU TẬP TIN Học xong chương này, sinh viên nắm rõ vấn đề sau: Một số khái niệm tập tin? Các bước thao tác với tập tin. Một số hàm truy xuất tập tin văn bản. Một số hàm truy xuất tập tin nhị phân. I. MỘT SỐ KHÁI NIỆM VỀ TẬP TIN Đối với kiểu liệu ta biết kiểu số, kiểu mảng, kiểu cấu trúc liệu tổ chức nhớ (RAM) máy tính nên kết thúc việc thực chương trình liệu bị mất; cần bắt buộc phải nhập lại từ bàn phím. Điều vừa thời gian vừa không giải toán với số liệu lớn. Để giải vấn đề, người ta đưa kiểu tập tin (file) cho phép lưu trữ liệu nhớ (đĩa). Khi kết thúc chương trình liệu sử dụng nhiều lần. Một đặc điểm khác kiểu tập tin kích thước lớn với số lượng phần tử không hạn chế (chỉ bị hạn chế dung lượng nhớ ngoài). Có loại liệu kiểu tập tin: o Tập tin văn (Text File): loại tập tin dùng để ghi ký tự lên đĩa, ký tự lưu trữ dạng mã Ascii. Điểm đặc biệt liệu tập tin lưu trữ thành dòng, dòng kết thúc ký tự xuống dòng (new line), ký hiệu ‘\n’; ký tự kết hợp ký tự CR (Carriage Return - Về đầu dòng, mã Ascii 13) LF (Line Feed - Xuống dòng, mã Ascii 10). Mỗi tập tin kết thúc ký tự EOF (End Of File) có mã Ascii 26 (xác định tổ hợp phím Ctrl + Z). Tập tin văn truy xuất theo kiểu tuần tự. o Tập tin định kiểu (Typed File): loại tập tin bao gồm nhiều phần tử có kiểu: char, int, long, cấu trúc… lưu trữ đĩa dạng chuỗi byte liên tục. o Tập tin không định kiểu (Untyped File): loại tập tin mà liệu chúng gồm cấu trúc liệu mà người ta không quan tâm đến nội dung kiểu nó, lưu ý đến yếu tố vật lý tập tin độ lớn yếu tố tác động lên tập tin mà thôi. Biến tập tin: biến thuộc kiểu liệu tập tin dùng để đại diện cho tập tin. Dữ liệu chứa tập tin truy xuất qua thao tác với thông số biến tập tin đại diện cho tập tin đó. Con trỏ tập tin: Khi tập tin mở để làm việc, thời điểm, có vị trí tập tin mà việc đọc/ghi thông tin xảy ra. Người ta hình dung có trỏ đến vị trí đặt tên trỏ tập tin. Trang 105 Lập trình Sau đọc/ghi xong liệu, trỏ chuyển dịch thêm phần tử phía cuối tập tin. Sau phần tử liệu cuối tập tin dấu kết thúc tập tin EOF (End Of File). II. CÁC THAO TÁC TRÊN TẬP TIN Muốn thao tác tập tin, ta phải làm theo bước: o Khai báo biến tập tin. o Mở tập tin hàm fopen(). o Thực thao tác xử lý liệu tập tin hàm đọc/ghi liệu. o Đóng tập tin hàm fclose(). Ở đây, ta thao tác với tập tin nhờ hàm định nghĩa thư viện stdio.h. II.1. Khai báo biến tập tin Cú pháp: FILE Các biến danh sách phải trỏ phân cách dấu phẩy(,). Ví dụ: FILE *f1,*f2; II.2. Mở tập tin Cú pháp: FILE *fopen(char *Path, const char *Mode) Trong đó: - Path: chuỗi đường dẫn đến tập tin đĩa. - Type: chuỗi xác định cách thức mà tập tin mở. Các giá trị Mode: Chế độ r w a rb wb ab r+ w+ a+ r+b w+b a+b Ý nghĩa Mở tập tin văn để đọc Tạo tập tin văn để ghi Nối vào tập tin văn Mở tập tin nhị phân để đọc Tạo tập tin nhị phân để ghi Nối vào tập tin nhị phân Mở tập tin văn để đọc/ghi Tạo tập tin văn để đọc ghi Nối vào hay tạo tập tin văn để đọc/ghi Mở tập tin nhị phân để đọc/ghi Tạo tập tin nhị phân để đọc/ghi Nối vào hay tạo tập tin nhị phân - Hàm fopen trả trỏ tập tin. Chương trình ta thay đổi giá trị trỏ này. Nếu có lỗi xuất mở tập tin hàm trả trỏ NULL. Ví dụ: Mở tập tin tên TEST.txt để ghi. FILE *f; f = fopen(“TEST.txt”, “w”); if (f!=NULL) { /* Các câu lệnh để thao tác với tập tin*/ Trang 106 Lập trình /* Đóng tập tin*/ } Trong ví dụ trên, ta có sử dụng câu lệnh kiểm tra điều kiện để xác định mở tập tin có thành công hay không?. Nếu mở tập tin để ghi, tập tin tồn tập tin bị xóa tập tin tạo ra. Nếu ta muốn ghi nối liệu, ta phải sử dụng chế độ “a”. Khi mở với chế độ đọc, tập tin phải tồn rồi, không lỗi xuất hiện. II.3. Đóng tập tin Hàm fclose() dùng để đóng tập tin mở hàm fopen(). Hàm ghi liệu lại vùng đệm vào tập tin đóng lại tập tin. Cú pháp: int fclose(FILE *f) Trong f trỏ tập tin mở hàm fopen(). Giá trị trả hàm báo việc đóng tập tin thành công. Hàm trả EOF có xuất lỗi. Ngoài ra, ta sử dụng hàm fcloseall() để đóng tất tập tin lại. Cú pháp: int fcloseall() Kết trả hàm tổng số tập tin đóng lại. Nếu không thành công, kết trả EOF. II.4. Kiểm tra đến cuối tập tin hay chưa? Cú pháp: int feof(FILE *f) Ý nghĩa: Kiểm tra xem chạm tới cuối tập tin hay chưa trả EOF cuối tập tin chạm tới, ngược lại trả 0. II.5 Di chuyển trỏ tập tin đầu tập tin - Hàm rewind() Khi ta thao tác tập tin mở, trỏ tập tin di chuyển phía cuối tập tin. Muốn cho trỏ quay đầu tập tin mở nó, ta sử dụng hàm rewind(). Cú pháp: void rewind(FILE *f) III. TRUY CẬP TẬP TIN VĂN BẢN III.1. Ghi liệu lên tập tin văn III.1.1 Hàm putc() Hàm dùng để ghi ký tự lên tập tin văn mở để làm việc. Cú pháp: int putc(int c, FILE *f) Trong đó, tham số c chứa mã Ascii ký tự đó. Mã ghi lên tập tin liên kết với trỏ f. Hàm trả EOF gặp lỗi. III.1.2 Hàm fputs() Hàm dùng để ghi chuỗi ký tự chứa vùng đệm lên tập tin văn bản. Cú pháp: int puts(const char *buffer, FILE *f) Trang 107 Lập trình Trong đó, buffer trỏ có kiểu char đến vị trí chuỗi ký tự ghi vào. Hàm trả giá trị buffer chứa chuỗi rỗng trả EOF gặp lỗi. III.1.3 Hàm fprintf() Hàm dùng để ghi liệu có định dạng lên tập tin văn bản. Cú pháp: fprintf(FILE *f, const char *format, varexpr) Trong đó: format: chuỗi định dạng (giống với định dạng hàm printf()), varexpr: danh sách biểu thức, biểu thức cách dấu phẩy (,). Định dạng Ý nghĩa %d %[.số chữ số thập phân] f Ghi số nguyên Ghi số thực có theo quy tắc làm tròn số. %o Ghi số nguyên hệ bát phân %x Ghi số nguyên hệ thập lục phân %c Ghi ký tự %s Ghi chuỗi ký tự %e %E %g Ghi số thực dạng khoa học (nhân 10 mũ x) %G Ví dụ: Viết chương trình ghi chuỗi ký tự lên tập tin văn D:\\Baihat.txt #include #include int main() { FILE *f; clrscr(); f=fopen("D:\\Baihat.txt","r+"); if (f!=NULL) { fputs("Em oi Ha Noi pho.\n",f); fputs("Ta em, mui hoang lan; ta em, mui hoa sua.",f); fclose(f); } getch(); } return 0; Nội dung tập tin Baihat.txt mở trình soạn thảo văn Notepad. Trang 108 Lập trình III.2. Đọc liệu từ tập tin văn III.2.1 Hàm getc() Hàm dùng để đọc liệu từ tập tin văn mở để làm việc. Cú pháp: int getc(FILE *f) Hàm trả mã Ascii ký tự (kể EOF) tập tin liên kết với trỏ f. III.2.2 Hàm fgets() Cú pháp: char *fgets(char *buffer, int n, FILE *f) Hàm dùng để đọc chuỗi ký tự từ tập tin văn mở liên kết với trỏ f đọc đủ n ký tự gặp ký tự xuống dòng ‘\n’ (ký tự đưa vào chuỗi kết quả) hay gặp ký tự kết thúc EOF (ký tự không đưa vào chuỗi kết quả). Trong đó: - buffer (vùng đệm): trỏ có kiểu char đến nhớ đủ lớn chứa ký tự nhận được. - n: giá trị nguyên độ dài lớn chuỗi ký tự nhận được. - f: trỏ liên kết với tập tin đó. - Ký tự NULL (‘\0’) tự động thêm vào cuối chuỗi kết lưu vùng đêm. - Hàm trả địa vùng đệm không gặp lỗi chưa gặp ký tự kết thúc EOF. Ngược lại, hàm trả giá trị NULL. III.2.3 Hàm fscanf() Hàm dùng để đọc liệu từ tập tin văn vào danh sách biến theo định dạng. Cú pháp: fscanf(FILE *f, const char *format, varlist) Trong đó: format: chuỗi định dạng (giống hàm scanf()); varlist: danh sách biến biến cách dấu phẩy (,). Ví dụ: Viết chương trình chép tập tin D:\Baihat.txt sang tập tin D:\Baica.txt. #include #include int main() { FILE *f1,*f2; clrscr(); f1=fopen("D:\\Baihat.txt","rt"); f2=fopen("D:\\Baica.txt","wt"); if (f1!=NULL && f2!=NULL) { int ch=fgetc(f1); while (! feof(f1)) { fputc(ch,f2); ch=fgetc(f1); } Trang 109 Lập trình fcloseall(); } getch(); return 0; } IV. TRUY CẬP TẬP TIN NHỊ PHÂN IV.1 Ghi liệu lên tập tin nhị phân - Hàm fwrite() Cú pháp: size_t fwrite(const void *ptr, size_t size, size_t n, FILE *f) Trong đó: - ptr: trỏ đến vùng nhớ chứa thông tin cần ghi lên tập tin. - n: số phần tử ghi lên tập tin. - size: kích thước phần tử. - f: trỏ tập tin mở. - Giá trị trả hàm số phần tử ghi lên tập tin. Giá trị n trừ xuất lỗi. IV.2 Đọc liệu từ tập tin nhị phân - Hàm fread() Cú pháp: size_t fread(const void *ptr, size_t size, size_t n, FILE *f) Trong đó: - ptr: trỏ đến vùng nhớ nhận liệu từ tập tin. - n: số phần tử đọc từ tập tin. - size: kích thước phần tử. - f: trỏ tập tin mở. - Giá trị trả hàm số phần tử đọc từ tập tin. Giá trị n hay nhỏ n chạm đến cuối tập tin có lỗi xuất IV.3 Di chuyển trỏ tập tin - Hàm fseek() Việc ghi hay đọc liệu từ tập tin làm cho trỏ tập tin dịch chuyển số byte, kích thước kiểu liệu phần tử tập tin. Khi đóng tập tin mở lại nó, trỏ vị trí đầu tập tin. Nhưng ta sử dụng kiểu mở tập tin “a” để ghi nối liệu, trỏ tập tin di chuyển đến vị trí cuối tập tin này. Ta điều khiển việc di chuyển trỏ tập tin đến vị trí định hàm fseek(). Cú pháp: int fseek(FILE *f, long offset, int whence) Trong đó: - f: trỏ tập tin thao tác. - offset: số byte cần dịch chuyển trỏ tập tin kể từ vị trí trước đó. Phần tử vị trí 0. - whence: vị trí bắt đầu để tính offset, ta chọn điểm xuất phát là: SEEK_SET Vị trí đầu tập tin Trang 110 Lập trình - Vị trí trỏ tập tin SEEK_CUR Vị trí cuối tập tin SEEK_END Kết trả hàm việc di chuyển thành công. Nếu không thành công, giá trị khác (đó mã lỗi) trả về. IV.4 Ví dụ Ví dụ 1: Viết chương trình ghi lên tập tin CacSo.Dat giá trị số (thực, nguyên, nguyên dài). Sau đọc số từ tập tin vừa ghi hiển thị lên hình. #include #include int main() { FILE *f; clrscr(); f=fopen("D:\\CacSo.txt","wb"); if (f!=NULL) { double d=3.14; int i=101; long l=54321; fwrite(&d,sizeof(double),1,f); fwrite(&i,sizeof(int),1,f); fwrite(&l,sizeof(long),1,f); /* Doc tu tap tin*/ rewind(f); fread(&d,sizeof(double),1,f); fread(&i,sizeof(int),1,f); fread(&l,sizeof(long),1,f); printf("Cac ket qua la: %f %d fclose(f); } getch(); return 0; } %ld",d,i,l); Ví dụ 2: Mỗi sinh viên cần quản lý thông tin: mã sinh viên họ tên. Viết chương trình cho phép lựa chọn chức năng: nhập danh sách sinh viên từ bàn phím ghi lên tập tin SinhVien.dat, đọc liệu từ tập tin SinhVien.dat hiển thị danh sách lên hình, tìm kiếm họ tên sinh viên dựa vào mã sinh viên nhập từ bàn phím. Ta nhận thấy phần tử tập tin SinhVien.Dat cấu trúc có trường: mã họ tên. Do đó, ta cần khai báo cấu trúc sử dụng hàm đọc/ghi tập tin nhị phân với kích thước phần tử tập tin kích thước cấu trúc đó. #include #include #include typedef struct { char Ma[10]; char HoTen[40]; Trang 111 Lập trình } SinhVien; void WriteFile(char *FileName) { FILE *f; int n,i; SinhVien sv; f=fopen(FileName,"ab"); printf("Nhap bao nhieu sinh vien? ");scanf("%d",&n); fflush(stdin); for(i=1;i[...]...Lập trình c n bản Include directory: Thư m c chứa c c tập tin mà chúng ta muốn đưa vào chương trình (c c tập tin h trong dòng #include) Library directory : Thư m c chứa c c tập tin thư viện ( c c tập tin Lib) Output directory: Thư m c chứa c c tập tin “đối tượng “ (c phần mở rộng là OBJ), tập tin th c thi (.exe) khi biên dịch chương trình Source directory: Thư m c chứa c c tập tin “nguồn” (c phần... đư c mô tả và khai báo C c câu lệnh đư c ngăn c ch với nhau bởi dấu chấm phẩy (;) I.2 Phân loại C hai loại lệnh: lệnh đơn và lệnh c c u tr c Lệnh đơn là một lệnh không chứa c c lệnh kh c C c lệnh đơn gồm: lệnh gán, c c câu lệnh nhập xuất dữ liệu… Lệnh c c u tr c là lệnh trong đó chứa c c lệnh kh c Lệnh c c u tr c bao gồm: c u tr c điều kiện rẽ nhánh, c u tr c điều kiện lựa chọn, c u tr c lặp và c u... gồm c c lệnh gọi trợ giúp khi người lập trình c n giúp đỡ một số vấn đề nào đó như: C pháp c u lệnh, c ch sử dụng c c hàm c sẵn… - Lệnh Contents: Hiện thị toàn bộ nội dung c a phần help Trang 21 Lập trình c n bản - Lệnh Index : Hiển thị bảng tìm kiếm theo chỉ m c - C c lệnh c n lại, bạn sẽ tìm hiểu khi th c hành trên máy Trang 22 Lập trình c n bản Chương 2 C C THÀNH PHẦN C BẢN C A NGÔN NGỮ C H c xong... đó và thường đư c khai th c bởi c c lập trình viên trong vi c định nghĩa c c ký hiệu như là: #define NB_COUPS_MAX 100 #define SIZE 25 VII.2 C u tr c một chương trình C Một chương trình C bao gồm c c phần như: C c chỉ thị tiền xử lý, khai báo biến ngoài, c c hàm tự tạo, chương trình chính (hàm main) C u tr c có thể như sau: C c chỉ thị tiền xử lý (Preprocessor directives) #include ... H c xong chương này, sinh viên sẽ nắm đư c c c vấn đề sau: Bộ chữ viết trong C C c từ khóa Danh biểu C c kiểu dữ liệu Biến và c c biểu th c trong C Cấu tr c của một chương trình viết bằng ngôn ngữ lập trình C I BỘ CHỮ VIẾT TRONG C Bộ chữ viết trong ngôn ngữ C bao gồm những ký tự, ký hiệu sau: (phân biệt chữ in hoa và in thường): 26 chữ c i latinh lớn A,B ,C Z 26 chữ c i latinh nhỏ a,b ,c z 10 chữ số thập... Bư c tiền xử lý tương ứng với vi c cập nhật trong văn bản c a chương trình nguồn, chủ yếu dựa trên vi c diễn giải c c mã lệnh rất đ c biệt gọi là c c chỉ thị dẫn hướng c a bộ tiền xử lý (destination directive of preprocessor); c c chỉ thị này đư c nhận biết bởi chúng bắt đầu bằng ký hiệu (symbol) # Hai chỉ thị quan trọng nhất là: - Chỉ thị sự gộp vào c a c c tập tin nguồn kh c: #include - Chỉ thị vi c. .. Enter: III BÀI TẬP III.1 M c đích yêu c u Làm quen và nắm vững c c lệnh đơn giản (printf, scanf), c c kiểu dữ liệu chuẩn (int, long, char, float ), c c phép toán và c c hàm chuẩn c a ngôn ngữ lập trình C Th c hiện viết c c chương trình hoàn chỉnh sử dụng c c lệnh đơn giản và c c kiểu dữ liệu chuẩn đó III.2 Nội dung 1 Viết chương trình in lên màn hình một thiệp mời dự sinh nhật c dạng: *******************************************... C i đặt c c hàm function1( c c tham số) { C c khai báo c c bộ trong hàm C c câu lệnh dùng để định nghĩa hàm Lưu ý: Một số tập tin header thường dùng: return ; } … Trang 34 Lập trình c n bản Một chương trình C bắt đầu th c thi từ hàm main (thông thường là từ c u lệnh đầu tiên đến c u lệnh cuối c ng) VII.3 C c tập tin thư viện thông dụng Đây là c c tập tin chứa c c. .. TRONG C H c xong chương này, sinh viên sẽ nắm rõ c c vấn đề sau: C u lệnh là gì? C ch sử dụng c u lệnh gán giá trị c a một biểu th c cho một biến C ch sử dụng lệnh scanf để nhập giá trị cho biến C ch sử dụng lệnh printf để xuất giá trị c a biểu th c lên màn hình và c ch định dạng dữ liệu I C u lệnh I.1 Khái niệm c u lệnh Một c u lệnh (statement) x c định một c ng vi c mà chương trình phải th c hiện... c c macros ho c ký hiệu: #define Chỉ thị đầu tiên đư c sử dụng trư c hết là nhằm gộp vào nội dung c a c c tập tin c n c (header file), không thể thiếu trong vi c sử dụng một c ch tốt nhất c c hàm c a thư viện chuẩn, phổ biến nhất là: #include Trang 33 Lập trình c n bản Chỉ thị thứ hai rất hay đư c sử dụng trong c c tập tin thư viện (header file) đã đư c định nghĩa trư c đó và thường được . 20 Lập trình c n bản Include directory: Thư m c chứa c c tập tin mà chúng ta muốn đưa vào chương trình (c c tập tin .h trong dòng #include). Library directory : Thư m c chứa c c tập tin. cung c p. Môi trường này cung c p c c ch c năng như: soạn thảo chương trình, dịch, th c thi chương trình Phiên bản đư c sử dụng ở đây là Turbo C 3.0. II.1. Gọi Turbo C Chạy Turbo C cũng. - C c lệnh c n lại, bạn sẽ tìm hiểu khi th c hành trên máy. Trang 22 Lập trình c n bản Chương 2 C C THÀNH PHẦN C BẢN C A NGÔN NGỮ C H c xong chương này, sinh viên sẽ nắm đư c c c vấn