Bài giảng lập trình hướng đối tượng với C++

88 3 0
Bài giảng lập trình hướng đối tượng với C++

Đ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

Chương 1 Mở đầu Chương 1 MỞ ĐẦU Các khái niệm cơ bản Ngôn ngữ lập trình C C là ngôn ngữ lập trình cấp cao, được sử dụng rất phổ biến để lập trình hệ thống cùng với Assembler và phát triển các ứng dụng.

Chương MỞ ĐẦU Các khái niệm 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 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 khn 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 tốn mà khơng cần phải tạo Hơn nữa, ngơn ngữ C hỗ trợ nhiều phép tố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 Ngồ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 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 Ngơn ngữ C có đặc điểm sau: o Tính đọng (compact): C có 32 từ khóa chuẩn 40 tố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 hồn tồ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 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 1.2 Sử dụng môi trường Turbo C++ Khởi động Khởi động C++ chương trình khác cách nhấp đúp chuột lên biểu tượng chương trình Giao diện cửa sổ soạn thảo Khi gọi chạy C++ hình xuất menu xổ xuống cửa sổ soạn thảo Trên menu gồm có nhóm chức năng: File, Edit, Search, Run, Compile, Debug, Project, Options, Window, Help Các chương trình dịch hỗ trợ người lập trình mơi trường tích hợp tức ngồi chức soạn thảo, cịn cung cấp nhiều chức năng: Các chức soạn thảo Chức tìm kiếm thay Các chức liên quan đến tệp Chức dịch chạy chương trình − Ctrl-F9: Khởi động chức dịch chạy tồn chương trình − F4: Chạy chương trình từ đầu đến dịng lệnh (đang chứa trỏ) − F7: Chạy lệnh hàm main(), kể lệnh hàm − F8: Chạy lệnh hàm main() Khi lời gọi hàm xem lệnh (không chạy lệnh hàm gọi) Các chức liên quan đến dịch chương trình chọn thơng qua menu Compile (Alt-C) Tóm tắt số phím nóng hay dùng − Các phím kích hoạt menu: Alt+chữ đại diện cho nhóm menu Ví dụ Alt-F mở menu File để chọn chức cụ thể Open (mở file), Save (ghi file lên đĩa), Print (in nội dung văn chương trình máy in), … Alt-C mở menu Compile để chọn chức dịch chương trình Các phím dịch chuyển trỏ soạn thảo − F1: mở cửa sổ trợ giúp Đây chức quan trọng giúp người lập trình nhớ tên lệnh, cú pháp cách sử dụng − F2: ghi tệp lên đĩa − F3: mở tệp cũ sửa chữa soạn thảo tệp − F4: chạy chương trình đến vị trí trỏ − F5: Thu hẹp/mở rộng cửa sổ soạn thảo − F6: Chuyển đổi cửa sổ soạn thảo − F7: Chạy chương trình theo lệnh, kể lệnh hàm − F8: Chạy chương trình theo lệnh hàm − F9: Dịch liên kết chương trình Thường dùng chức để tìm lỗi cú pháp chương trình nguồn trước chạy − Alt-F7: Chuyển trỏ nơi gây lỗi trước − Alt-F8: Chuyển trỏ đến lỗi − Ctrl-F9: Chạy chương trình − Ctrl-Insert: Lưu khối văn đánh dấu vào nhớ đệm − Shift-Insert: Dán khối văn nhớ đệm vào văn vị trí trỏ − Shift-Delete: Xoá khối văn đánh dấu, lưu vào nhớ đệm − Ctrl-Delete: Xố khối văn đánh dấu (không lưu vào nhớ đệm) − Alt-F5: Chuyển sang cửa sổ xem kết chương trình vừa chạy xong − Alt-X: C++ lại Windows 1.3 Sử dụng kiểu liệu 1.3.1 Các thành phần ngơn ngữ lập trình C Bộ chữ viết C Bộ chữ viết ngôn ngữ C bao gồm ký tự, ký hiệu sau: (phân biệt chữ in hoa in thường): 26 chữ latinh lớn A,B,C Z 26 chữ latinh nhỏ a,b,c z 10 chữ số thập phân 0,1,2 Các ký hiệu toán học: +, -, *, /, =, , (, ) Các ký hiệu đặc biệt: : , ; " ' _ @ # $ ! ^ [ ] { } Dấu cách hay khoảng trống Các từ khố C Từ khóa từ dành riêng (reserved words) C mà người lập trình sử dụng chương trình tùy theo ý nghĩa từ asm break case cdecl char const continue default double else enum extern far float for goto huge if int interrupt long near pascal register return short static struct signed sizeof switch typedef union unsigned void volatile while Cặp dấu ghi thích Khi viết chương trình đơi lúc ta cần phải có vài lời ghi đoạn chương trình để dễ nhớ dễ điều chỉnh sau này; phần nội dung ghi phải không thuộc chương trình (khi biên dịch phần bị bỏ qua) Trong ngơn ngữ lập trình C, nội dung thích phải viết cặp dấu /* */ Ví dụ : #include #include int main () { char ten[50]; /* khai bao bien ten kieu char 50 ky tu */ /*Xuat chuoi man hinh*/ printf(“Xin cho biet ten cua ban !”); scanf(“%s”,ten); /*Doc vao chuoi la ten cua ban*/ printf(“Xin chao ban %s\n ”,ten); printf(“Chao mung ban den voi Ngon ngu lap trinh C”); /*Dung chuong trinh, cho go phim*/ getch(); return 0; } 1.3.2 Các kiểu liệu chuẩn C Các kiểu liệu sơ cấp chuẩn C chia làm dạng : kiểu số nguyên, kiểu số thực a Kiểu số nguyên Kiểu số nguyên kiểu liệu dùng để lưu giá trị nguyên hay gọi kiểu đếm Kiểu số nguyên C chia thành kiểu liệu con, kiểu có miền giá trị khác Kiểu số nguyên byte (8 bits) Kiểu số nguyên byte gồm có kiểu sau: STT Kiểu liệu Miền giá trị (Domain) Từ đến 255 (tương đương 256 ký tự unsigned char bảng mã ASCII) char Từ -128 đến 127 Kiểu unsigned char: lưu số nguyên dương từ đến 255 => Để khai báo biến kiểu ký tự ta khai báo biến kiểu unsigned char Mỗi số miền giá trị kiểu unsigned char tương ứng với ký tự bảng mã ASCII Kiểu char: lưu số nguyên từ -128 đến 127 Kiểu char sử dụng bit trái để làm bit dấu => Nếu gán giá trị > 127 cho biến kiểu char giá trị biến số âm (?) Kiểu số nguyên bytes (16 bits) Kiểu số nguyên bytes gồm có kiểu sau: STT Kiểu liệu Miền giá trị (Domain) enum Từ -32,768 đến 32,767 unsigned int Từ đến 65,535 short int Từ -32,768 đến 32,767 int Từ -32,768 đến 32,767 Kiểu enum, short int, int : Lưu số nguyên từ -32768 đến 32767 Sử dụng bit bên trái để làm bit dấu => Nếu gán giá trị >32767 cho biến có kiểu giá trị biến số âm Kiểu unsigned int: Kiểu unsigned int lưu số nguyên dương từ đến 65535 Kiểu số nguyên byte (32 bits) Kiểu số nguyên bytes hay gọi số nguyên dài (long) gồm có kiểu sau: STT Kiểu liệu Miền giá trị (Domain) unsigned long Từ đến 4,294,967,295 long Từ -2,147,483,648 đến 2,147,483,647 Kiểu long : Lưu số nguyên từ -2147483658 đến 2147483647 Sử dụng bit bên trái để làm bit dấu => Nếu gán giá trị >2147483647 cho biến có kiểu long giá trị biến số âm Kiểu unsigned long: Kiểu unsigned long lưu số nguyên dương từ đến 4294967295 b Kiểu số thực Kiểu số thực dùng để lưu số thực hay số có dấu chấm thập phân gồm có kiểu sau: STT Kiểu liệu Kích thước Miền giá trị (Domain) (Size) float bytes Từ 3.4 * 10-38 đến 3.4 * 1038 double bytes Từ 1.7 * 10-308 đến 1.7 * 10308 long double 10 bytes Từ 3.4 *10-4932 đến 1.1 *104932 Mỗi kiểu số thực có miền giá trị độ xác (số số lẻ) khác Tùy vào nhu cầu sử dụng mà ta khai báo biến thuộc kiểu Ngoài ta cịn có kiểu liệu void, kiểu mang ý nghĩa kiểu rỗng khơng chứa giá trị 1.3.3 Tên C a Tên (danh biểu) Tên hay gọi danh biểu (identifier) dùng để đặt cho chương trình, hằng, kiểu, biến, chương trình Tên có hai loại tên chuẩn tên người lập trình đặt Tên chuẩn tên C đặt sẵn tên kiểu: int, char, float,…; tên hàm: sin, cos Tên người lập trình tự đặt để dùng chương trình Sử dụng chữ cái, chữ số dấu gạch (_) để đặt tên, phải tuân thủ quy tắc: Bắt đầu chữ dấu gạch Khơng có khoảng trống tên Khơng trùng với từ khóa Độ dài tối đa tên khơng giới hạn, nhiên có 31 ký tự có ý nghĩa Khơng cấm việc đặt tên trùng với tên chuẩn ý nghĩa tên chuẩn khơng cịn giá trị Ví dụ: tên người lập trình đặt: Chieu_dai, Chieu_Rong, Chu_Vi, Dien_Tich Tên không hợp lệ: Do Dai, 12A2,… b Hằng (Constant) Là đại lượng khơng đổi suốt q trình thực thi chương trình Hằng chuỗi ký tự, ký tự, số xác định Chúng biểu diễn hay định dạng (Format) với nhiều dạng thức khác Hằng số thực Số thực bao gồm giá trị kiểu float, double, long double thể theo cách sau: - Cách 1: Sử dụng cách viết thông thường mà sử dụng mơn Tốn, Lý, …Điều cần lưu ý sử dụng dấu thập phân dấu chấm (.); Ví dụ: 123.34 -223.333 3.00 -56.0 - Cách 2: Sử dụng cách viết theo số mũ hay số khoa học Một số thực tách làm phần, cách ký tự e hay E Phần giá trị: số nguyên hay số thực viết theo cách Phần mũ: số nguyên Giá trị số thực là: Phần giá trị nhân với 10 mũ phần mũ Ví dụ: 1234.56e-3 = 1.23456 (là số 1234.56 * 10-3) -123.45E4 = -1234500 ( -123.45 *104) Hằng số nguyên Số nguyên gồm kiểu int (2 bytes) , long (4 bytes) thể theo cách sau - Hằng số nguyên bytes (int) hệ thập phân: Là kiểu số mà sử dụng thông thường, hệ thập phân sử dụng ký số từ đến để biểu diễn giá trị nguyên Ví dụ: 123 ( trăm hai mươi ba), -242 ( trừ hai trăm bốn mươi hai) - Hằng số nguyên byte (int) hệ bát phân: Là kiểu số nguyên sử dụng ký số từ đến để biểu diễn số nguyên Cách biểu diễn: 0 Ví dụ : 0345 (số 345 hệ bát phân) -020 (số -20 hệ bát phân) Cách tính giá trị thập phân số bát phân sau: Số bát phân : 0dndn-1dn-2…d1d0 ( di có giá trị từ đến 7) => Giá trị thập phân= Σ=niiid08* 0345=229 , 020=16 - Hằng số nguyên byte (int) hệ thập lục phân: Là kiểu số nguyên sử dụng 10 ký số từ đến ký tự A, B, C, D, E ,F để biểu diễn số nguyên Ký tự giá trị A 10 B 11 C 12 D 13 E 14 F 15 Cách biểu diễn: 0x Ví dụ: 0x345 (số 345 hệ 16) 0x20 (số 20 hệ 16) 0x2A9 (số 2A9 hệ 16) Cách tính giá trị thập phân số thập lục phân sau: Số thập lục phân : 0xdndn-1dn-2…d1d0 ( di từ đến A đến F) => Giá trị thập phân=Σ =niiid016* 0x345=827 , 0x20=32 , 0x2A9= 681 - Hằng số nguyên byte (long): Số long (số nguyên dài) biểu diễn số int hệ thập phân kèm theo ký tự l L Một số nguyên nằm miền giá trị số int ( bytes) số long ( bytes) Ví dụ: 45345L hay 45345l hay 45345 - Các số lại: Viết cách viết thơng thường (khơng có dấu phân cách số) Ví dụ: 12 (mười hai) 12.45 (mười hai chấm 45) 1345.67 (một ba trăm bốn mươi lăm chấm sáu mươi bảy) Hằng ký tự Hằng ký tự ký tự riêng biệt viết cặp dấu nháy đơn (‘) Mỗi ký tự tương ứng với giá trị bảng mã ASCII Hằng ký tự xem trị số nguyên Ví dụ: ‘a’, ‘A’, ‘0’, ‘9’ Chúng ta thực phép toán số học ký tự (thực chất thực phép toán giá trị ASCII chúng) Hằng chuỗi ký tự Hằng chuỗi ký tự chuỗi hay xâu ký tự đặt cặp dấu nháy kép (“) Ví dụ: “Ngon ngu lap trinh C”, “Khoa CNTT-CHC”, “Nguyen Ngoc Son” Chú ý: Một chuỗi khơng có nội dung “” gọi chuỗi rỗng Khi lưu trữ nhớ, chuỗi kết thúc ký tự NULL (‘\0’: mã Ascii 0) Để biểu diễn ký tự đặc biệt bên chuỗi ta phải thêm dấu \ phía trước Ví dụ: “I’m a student” phải viết “I\’m a student” “Day la ky tu “dac biet”” phải viết “Day la ky tu \”dac biet\”“ 1.4 Biến biểu thức a Biến Biến đại lượng người lập trình định nghĩa đặt tên thơng qua việc khai báo biến Biến dùng để chứa liệu trình thực chương trình giá trị biến bị thay đổi trình Cách đặt tên biến giống cách đặt tên nói phần Mỗi biến thuộc kiểu liệu xác định có giá trị thuộc kiểu Cú pháp khai báo biến: Danh sách tên biến cách dấu phẩy; Ví dụ: int a, b, c; /*Ba biến a, b,c có kiểu int*/ long int chu_vi; /*Biến chu_vi có kiểu long*/ float nua_chu_vi; /*Biến nua_chu_vi có kiểu float*/ double dien_tich; /*Biến dien_tich có kiểu double*/ Lưu ý: Để kết thúc lệnh phải có dấu chấm phẩy (;) cuối lệnh Vị trí khai báo biến C Trong ngơn ngữ lập trình C, ta phải khai báo biến vị trí Nếu khai báo (đặt biến) khơng vị trí dẫn đến sai sót ngồi ý muốn mà người lập trình khơng lường trước (hiệu ứng lề) Chúng ta có cách đặt vị trí biến sau: Khai báo biến ngoài: Các biến đặt bên tất hàm có tác dụng hay ảnh hưởng đến tồn chương trình (cịn gọi biến tồn cục) Ví dụ: int i; /*Bien ben ngoai */ float pi; /*Bien ben ngoai*/ int main() { … } Khai báo biến trong: Các biến đặt bên hàm, chương trình hay khối lệnh Các biến có tác dụng hay ảnh hưởng đến hàm, chương trình hay khối lệnh chứa Khi khai báo biến, phải đặt biến đầu khối lệnh, trước lệnh gán, … Ví dụ 1: #include #include int bienngoai; /*khai bao bien ngoai*/ int main () { int j,i; /*khai bao bien ben chuong trinh chinh*/ clrscr(); i=1; j=2; bienngoai=3; return 0; } Ví dụ 2: #include #include int main () { int i, j; /*Bien ben trong*/ clrscr(); i=4; j=5; printf("\n Gia tri cua i la %d",i); printf("\n Gia tri cua j la %d",j); if(j>i) { int hieu=j-i; /*Bien ben */ printf("\n Hieu so cua j tru i la %d",hieu); } else { int hieu=i-j ; /*Bien ben trong*/ printf("\n Gia tri cua i tru j la %d",hieu); } getch(); return 0; } b Biểu thức Biểu thức kết hợp toán tử (operator) toán hạng (operand) theo trật tự định Mỗi tốn hạng hằng, biến biểu thức khác Trong trường hợp, biểu thức có nhiều tốn tử, ta dùng cặp dấu ngoặc đơn () để định tốn tử thực trước Ví dụ: Biểu thức nghiệm phương trình bậc hai: (-b + sqrt(Delta))/(2*a) Trong hằng; a, b, Delta biến Các tốn tử số học Trong ngơn ngữ C, toán tử +, -, *, / làm việc tương tự chúng làm việc ngôn ngữ khác Ta áp dụng chúng cho đa số kiểu liệu có sẵn cho phép C Khi ta áp dụng phép / cho số nguyên hay ký tự, phần dư bị cắt bỏ Chẳng hạn, 5/2 phép chia nguyên Toán tử Ý nghĩa + Cộng Trừ * Nhân / Chia % Chia lấy phần dư -Giảm đơn vị ++ Tăng đơn vị Tăng giảm (++ & ) Toán tử ++ thêm vào toán hạng – trừ bớt Nói cách khác: x = x + giống ++x x = x – giống x— Cả tốn tử tăng giảm tiền tố (đặt trước) hay hậu tố (đặt sau) tốn hạng Ví dụ: x = x + viết x++ (hay ++x) Tuy nhiên tiền tố hậu tố có khác biệt sử dụng biểu thức Khi toán tử tăng hay giảm đứng trước tốn hạng nó, C thực việc tăng hay giảm trước lấy giá trị dùng biểu thức Nếu toán tử sau toán hạng, C lấy giá trị tốn hạng trước tăng hay giảm Tóm lại: x = 10 y = ++x //y = 11 Tuy nhiên: x = 10 x = x++ //y = 10 Thứ tự ưu tiên toán tử số học: ++ sau * / % đến + Các toán tử quan hệ tốn tử Logic Ý tưởng tốn tử quan hệ toán tử Logic sai Trong C giá trị khác gọi đúng, sai Các biểu thức sử dụng toán tử quan hệ Logic trả sai trả Toán tử Ý nghĩa Các toán tử quan hệ > Lớn >= Lớn < Nhỏ 1+ 12 xem 10 > (1 + 12) kết sai (0) Ta kết hợp vài toán tử lại với thành biểu thức sau: 10>5&&!(10= < Tên_thành_phần Cách hai : (*Tên_con_trỏ).Tên_thành_phần Ví dụ : nc1.ngaysinh.nam p1-> ngaysinh.nam 74 ds[4].ngaysinh.thang (*p2) ngaysinh.thang Phép gán qua trỏ: Giả sử ta gán : p1=&nc1; p2=&ds[4]; Khi dïng : *p1 thay cho nc1 *p2 thay cho ds[4] Tức viết: ds[5]=nc1; ds[4]=nc2; Tơng đơng với : ds[5]=*p1; *p2=nc2; Phép cộng địa : Sau phép gán : p=ds; p2=&ds[4]; p trỏ thới ds[[0]] p2 trá tíi ds[4] Ta cã thĨ dïng c¸c phÐp céng, trừ địa để làm cho p p2 trỏ tới thành phần khác Ví dụ : Sau lệnh : p=p+10; p2=p2-4; p trỏ tới ds[10] p2 trỏ tới ds[0] 5.2 Kiểu hợp liệt kê Kiểu Enum Mt bin l kiu d liệu enum nhận giá trị giá trị liệt kê Định nghĩa kiểu enum Ví dụ : định nghĩa kiểu enum day 75 từ khóa tên dấu ; kết thúc enum enum day{ SUN, MON, TUE, WED, THU, FRI, SAT }; giá trị liệt kê giá trị bọc móc ⇒ Các tên thứ (SUN, MON … SAT) day đánh số từ đến (SUN 1, MON 2… SAT 6) Nếu bạn muốn bắt đầu giá trị khác gán giá trị mong muốn vào trị tăng lên  enum phải viết chữ thường Cách khai báo biến có kiểu tập hợp Ví dụ : enum day ngay; day ngay; Khai báo biến có kiểu enum day  vừa tạo enum day vừa khai báo biến enum day{ SUN, MON, TUE, WED, THU, FRI, SAT } ngay; Sử dụng enum chương trình Ví dụ : phụ trội Tính tiền lương tuần cho nhân viên Thứ bảy Chủ nhật tính Dịng File Edit Search Run Compile Debug Project Option Window Help 10 11 12 13 14 15 16 17 18 19 20 21 22 23 /* Tinh tien luong tuan cho nhan vien */ #include #include #define PHU_TROI_T7 #define PHU_TROI_CN 2.0 1.5 //dinh nghia enum enum tuan{CHU_NHAT, THU_HAI, THU_BA, THU_TU, THU_NAM, THU_SAU, THU_BAY}; typedef enum tuan ngay_tuan; //dinh nghia ngay_tuan la tuan void main(void) { int igio; float fLuongCB, fLuongNgay, fTongLuong; char cngay[][4] = {"Chu Nhat", "Thu Hai", "Thu Ba", "Thu Tu", "Thu Nam", "Thu Sau", "Thu Bay"}; ngay_tuan engay; ngay_tuan ngay_mai(ngay_tuan); //khai bao prototype 76 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 printf("Nhap vao luong can ban: "); scanf("%f", &fLuongCB); luong = 0.0; printf("Nhap vao so gio lam viec tu Thu hai den Chu nhat:\n"); engay = CHU_NHAT; { engay = ngay_mai(engay); printf("Nhap vao gio lam viec %s :", cngay[engay]); scanf("%d", &igio); swith(engay) { case THU_HAI: case THU_BA: case THU_TU: case THU_NAM: case THU_SAU: fLuongNgay = fLuongCB; break; case THU_BAY: fLuongNgay = fLuongCB * PHU_TROI_T7; break; case CHU_NHAT: fLuongNgay = fLuongCB * PHU_TROI_CN; break; } fTongLuong += fLuongNgay * igio; } while (ngay != CHU_NHAT); printf("Tong luong tuan = %8.2f dong.\n", fTongLuong); getch(); } //ham chon ke tiep ngay_tuan ngay_mai(ngay_tuan en) { ngay_tuan engay_ke; switch(en) { case CHU_NHAT : engay_ke = THU_HAI; break; case THU_HAI : engay_ke = THU_BA; break; case THU_BA : engay_ke = THU_TU; break; case THU_TU : engay_ke = THU_NAM; break; case THU_NAM : engay_ke = THU_SAU; break; case THU_SAU : engay_ke = THU_BAY; break; case THU_BAY : engay_ke = CHU_NHAT; break; } return (engay_ke); } F1 Help Alt-F8 Next Msg Alt-F7 Prev Msg 77 Alt - F9 Compile F9 Make F10 Menu  Kết in hình Nhap vao luong can ban: 250 Nhap vao so gio lam viec tu Thu hai den Chu nhat: Nhap vao gio lam viec Thu Hai: Nhap vao gio lam viec Thu Ba: Nhap vao gio lam viec Thu Tu: Nhap vao gio lam viec Thu Nam: Nhap vao gio lam viec Thu Sau: Nhap vao gio lam viec Thu Bay: Nhap vao gio lam viec Chu Nhat: Tong luong tuan = 14625.00 dong _ Hàm chọn ngày dài, bạn thay từ dòng 54 đến 65 câu lệnh return (++en > ? : en); return (++en % 7); Chạy lại chương trình, quan sát, nhận xét đánh giá kết với liệu khác  Giải thích chương trình Ở chương trình ta phải khai báo struct nhanvien biến toàn cục, định nghĩa hàm input output có sử dụng kiểu liệu struct nhanviên Bài tập Định nghĩa dãy cấu trúc dùng làm danh bạ điện thoại, gồm có tên, địa chỉ, số điện thoại, với số mẫu tin tối đa 40 Viết chương trình với chức sau: nhập thơng mới, tìm kiếm số điện thoại, in danh sách theo quận Viết chương trình đọc vào tên, địa chỉ, xếp tên địa theo thứ tự alphabet, sau hiển thị danh sách xếp Viết chương trình nhận vào thơng tin sau: Tên đội bóng, số trận thắng, số trận hịa, số trận thua In đội bóng có số điểm cao (với trận thắng = điểm, trận hòa = điểm trận thua = điểm) Xây dựng cấu trúc gồm: Họ tên, ngày sinh, trường, số báo danh, điểm thi Trong đó, điểm thi cấu trúc gồm mơn: Tốn, Lý, Hóa Nhập liệu vào khoảng 10 thí sinh, tìm in thí sinh có tổng điểm mơn >= 15 Viết chương trình tạo lập tìm kiếm liệu Nội dung yêu cầu gồm: Nhập họ tên, địa (gồm: Quận, phường, tổ), tuổi, lương Tìm kiếm người Quận có tuổi 30 thu nhập từ 500.000đ trở lên in hình 78 Chương KIỂU TẬP TIN 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 tố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ớ ngồi (đĩa) Khi kết thúc chương trình liệu cịn 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ớ ngồ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 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à 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 Người ta hình dung có trỏ đến vị trí đặt tên trỏ tập tin Trang 105 Lập trình 79 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) 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 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; 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 Ý nghĩa mở Các giá trị Mode: Chế độ r Mở tập tin văn để đọc w Tạo tập tin văn để ghi a Nối vào tập tin văn rb Mở tập tin nhị phân để đọc wb Tạo tập tin nhị phân để ghi ab Nối vào tập tin nhị phân r+ Mở tập tin văn để đọc/ghi w+ Tạo tập tin văn để đọc ghi a+ Nối vào hay tạo tập tin văn để đọc/ghi r+b Mở tập tin nhị phân để đọc/ghi w+b Tạo tập tin nhị phân để đọc/ghi a+b 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ế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 80 FILE *f; f = fopen(“TEST.txt”, “w”); if (f!=NULL) { /* Các câu lệnh để thao tác với tập tin*/ /* Đó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 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 Đó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 Ngồi ra, ta cịn 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 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ả 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 ln 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) 6.1 Thao tác với tệp tin văn Ghi liệu lên tập tin văn 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 Hàm fputs() Hàm dùng để ghi chuỗi ký tự chứa vùng đệm lên tập tin văn Cú pháp: int puts(const char *buffer, FILE *f) 81 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 Hàm fprintf() Hàm dùng để ghi liệu có định dạng lên tập tin văn Cú pháp: fprintf(FILE *f, const char *format, varexpr) Trong đó: format: chuỗi định dạng (giống Ý nghĩa 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 %d Ghi số nguyên %[.số chữ số thập phân] f 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 %G Ghi số thực dạng khoa học (nhân 10 mũ x) 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 82 Đọc liệu từ tập tin văn 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 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 - n: giá trị nguyên độ dài lớn chuỗi ký tự nhận - 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 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); } closeall(); } getch(); return 0; } 83 6.2 Thao tác với tập tin nhị phân 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 Đọ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 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ỏ ln 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 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í - 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 SEEK_CUR Vị trí trỏ tập tin SEEK_END Vị trí cuối tập tin 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í dụ 84 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 %ld",d,i,l); fclose(f); } getch(); return 0; } 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 85 } 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

Ngày đăng: 12/10/2022, 21:11

Hình ảnh liên quan

Bảng chõn trị cho cỏc toỏn tử Logic: - Bài giảng lập trình hướng đối tượng với C++

Bảng ch.

õn trị cho cỏc toỏn tử Logic: Xem tại trang 10 của tài liệu.
Bảng chõn trị của toỏn tử ^ (XOR) - Bài giảng lập trình hướng đối tượng với C++

Bảng ch.

õn trị của toỏn tử ^ (XOR) Xem tại trang 11 của tài liệu.
hình - Bài giảng lập trình hướng đối tượng với C++

h.

ình Xem tại trang 63 của tài liệu.

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan