Bài giảng Lập trình nâng cao - Bài 1: Căn bản về C++ - Hoàng Thị Điệp
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Lập trình nâng cao - Bài 1: Căn bản về C++ - Hoàng Thị Điệp", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Tài liệu đính kèm:
- bai_giang_lap_trinh_nang_cao_bai_1_can_ban_ve_c_hoang_thi_di.pdf
Nội dung text: Bài giảng Lập trình nâng cao - Bài 1: Căn bản về C++ - Hoàng Thị Điệp
- Bài 1: Căn bản về C++ Giảng viên: Hoàng Thị Điệp Khoa Công nghệ Thông tin – ĐH Công Nghệ
- Chapter 1 C++ Basics Copyright © 2010 Pearson Addison-Wesley. All rights reserved
- Mục tiêu bài học • Giới thiệu C++ – Nguồn gốc, Lập trình hướng đối tượng, Thuật ngữ • Biến, Biểu thức và Câu lệnh gán • Đọc ghi trên thiết bị vào/ra chuẩn • Phong cách lập trình • Thư viện và Không gian tên (namespace) DTH INT2202
- Giới thiệu C++ • Nguồn gốc – Ngôn ngữ bậc thấp • Ngôn ngữ máy, hợp ngữ – Ngôn ngữ bậc cao • C, C++, ADA, COBOL, FORTRAN – Lập trình hướng đối tượng trong C++ • Thuật ngữ C++ – Program và function – Đọc/ghi cơ bản với cin và cout DTH INT2202
- Display 1.1 Một chương trình C++ mẫu (1/2) DTH INT2202
- Display 1.1 Một chương trình C++ mẫu (2/2) DTH INT2202
- Biến • Định danh trong C++ – Phân biệt khái niệm từ khóa và định danh – Định danh phân biệt viết hoa viết thường và có quy tắc – Hãy đặt tên có nghĩa! • Biến – Là nơi trong bộ nhớ để lưu dữ liệu cho chương trình – Tất cả dữ liệu cần được khai báo trước khi sử dụng trong chương trình DTH INT2202
- Các kiểu dữ liệu: Display 1.2 Các kiểu dữ liệu đơn giản (1/2) DTH INT2202
- Các kiểu dữ liệu: Display 1.2 Các kiểu dữ liệu đơn giản (2/2) DTH INT2202
- Gán giá trị cho biến • Dùng câu lệnh khai báo để khởi tạo giá trị cho biến – Nếu không khởi tạo, kết quả sẽ là “không xác định”! • int myValue = 0; • Gán giá trị cho biến khi đang thực thi – Lvalue (vế trái) & Rvalue (vế phải) • Lvalue phải là biến • Rvalue có thể là biểu thức bất kì • Ví dụ: distance = rate * time; Lvalue: "distance" Rvalue: "rate * time" DTH INT2202
- Phép gán: Kí hiệu tắt DTH INT2202
- Các quy tắc gán • Dữ liệu gán phải tương thích – Lệch kiểu • Quy tắc chung: Không thể gán giá trị kiểu này cho biến kiểu khác – intVar = 2.99; // 2 sẽ được gán cho intVar! • Chỉ có phần nguyên là “vừa” nên ta chỉ lấy được phần này cho biến • Đây là “chuyển kiểu tự động” hay “không tường minh" – Giá trị hằng • 2, 5.75, "Z", "Hello World" • Coi là hằng số vì chúng không thay đổi trong suốt chương trình DTH INT2202
- Dữ liệu hằng • Giá trị hằng – Ví dụ: • 2 // Hằng int • 5.75 // Hằng double • "Z" // Hằng char • "Hello World" // Hằng string • Không thể thay đổi các giá trị này trong suốt quá trình thực hiện chương trình • Called "literals" because you "literally typed" them in your program! DTH INT2202
- Các xâu escape • “Mở rộng” tập kí tự • Gồm dấu xược ngược (\) đứng trước một kí tự – Báo cho trình biên dịch chuẩn bị làm việc với một kí tự escape đặc biệt – Display 1.3 trong slide sau liệt kê các xâu escape DTH INT2202
- Display 1.3 Một số xâu escape (1/2) DTH INT2202
- Display 1.3 Một số xâu escape (2/2) DTH INT2202
- Hằng • Hãy đặt tên hằng số của bạn – Dùng giá trị hằng cũng tạm được nhưng đặt tên hằng sẽ cung cấp một chút ý nghĩa • ví dụ: khi bạn thấy số 24 trong 1 chương trình bạn sẽ không hiểu được nó biểu diễn gì • Hãy sử dụng các hằng đặt tên – Đặt tên ý nghĩa để biểu diễn dữ liệu const int NUMBER_OF_STUDENTS = 24; • Gọi là một “hằng đã khai báo” hoặc “hằng có tên” • Sau đó hãy dùng tên hằng ở bất cứ chỗ nào bạn cần tới • Giá trị gia tăng: chỉ cần sửa đổi giá trị của hằng ở 1 chỗ DTH INT2202
- Các phép toán số học: Display 1.4 Hằng có tên (1/2) • Các phép toán số học chuẩn – Luật ưu tiên – luật chuẩn DTH INT2202
- Các phép toán số học: Display 1.4 Hằng có tên (2/2) DTH INT2202
- Độ chính xác số học • Độ chính xác của các phép tính – Rất quan trọng! • C++ có thể tính giá trị biểu thức khác với mong đợi của bạn! – “Toán hạng bậc cao nhất" xác định kiểu của “độ chính xác” số học sẽ được thực hiện – Lỗi hay gặp! DTH INT2202
- Ví dụ độ chính xác số học • Ví dụ: – 17 / 5 có giá trị bằng 3 trong C++ • Cả 2 toán hạng đều là số nguyên • Phép chia số nguyên được thực hiện – 17.0 / 5 có giá trị bằng 3.4 trong C++ • Toán hạng bậc cao nhất có kiểu double • Phép chia với độ chính xác double được thực hiện – int intVar1 =1, intVar2=2; intVar1 / intVar2; • Thực hiện phép chia số nguyên • Kết quả: 0 DTH INT2202
- Độ chính xác số học riêng lẻ • Từng phép tính một được thực hiện – 1 / 2 / 3.0 / 4 thực hiện 3 phép chia riêng rẽ. • Đầu tiên 1 / 2 bằng 0 • Sau đó 0 / 3.0 bằng 0.0 • Sau đó 0.0 / 4 bằng 0.0 • Do đó chỉ biến đổi một toán hạng trong biểu thức lớn là không đủ – Bạn cần nhớ là từng phép tính sẽ được thực hiện khi tính giá trị biểu thức. DTH INT2202
- Chuyển đổi kiểu • Đổi kiểu cho biến – Với giá trị hằng, có thể bổ sung ".0“ để ép độ chính xác số học. Nhưng với biến thì sao? • Ta không th ể viết "myInt.0" – static_cast intVar – Chuyển kiểu tường minh cho intVar thành kiểu double • Sau đó kết quả của phép chuyển đổi sẽ được sử dụng • Biểu thức ví dụ: doubleVar = static_cast intVar1 / intVar2; – Phép chuyển đổi kiểu ép thực hiện phép chia double cho 2 biến nguyên. DTH INT2202
- Chuyển đổi kiểu (2) • Hai loại – Không tường minh – còn gọi là “tự động” • Chương trình tự động làm việc này cho bạn 17 / 5.5 Biểu thức này dẫn tới phép chuyển kiểu không tường minh, chuyển 17 17.0 – Tường minh • Người lập trình xác định phép chuyển đổi sử dụng toán tử chuyển đổi (double)17 / 5.5 Cũng giống biểu thức trên, dùng chuyển kiểu tường minh (double) myInt / myDouble Cách dùng phổ biến hơn, chuyển đổi trên biến DTH INT2202
- Các toán tử viết tắt • Toán tử tự tăng và tự giảm – Chỉ là kí hiệu viết tắt – Toán tử tự tăng, ++ intVar++; tương đương với intVar = intVar + 1; – Toán tử tự giảm, intVar ; tương đương với intVar = intVar – 1; DTH INT2202
- Các toán tử viết tắt: Hai lựa chọn • Tăng sau intVar++ – Sử dụng giá trị hiện thời, SAU ĐÓ mới tăng nó • Tăng trước ++intVar – Tăng giá trị của biến trước, SAU ĐÓ sử dụng giá trị mới • “Sử dụng" có nghĩa là bất cứ ngữ cảnh hiện thời nào của biến • Không khác nhau nếu câu lệnh chỉ có phép tự tăng: intVar++; và ++intVar; kết quả giống hệt nhau DTH INT2202
- Ví dụ tăng sau • Phép tăng sau trong biểu thức: int n = 2, valueProduced; valueProduced = 2 * (n++); cout << valueProduced << endl; cout << n << endl; – Đoạn mã này cho output: 4 3 – vì nó dùng phép tăng sau DTH INT2202
- Ví dụ tăng trước • Giờ ta sử dụng phép tăng trước: int n = 2, valueProduced; valueProduced = 2 * (++n); cout << valueProduced << endl; cout << n << endl; – Đoạn mã này cho output: 6 3 – vì nó dùng phép tăng trước DTH INT2202
- Đọc/ghi chuẩn • Các đối tượng đọc/ghi cin, cout, cerr • Định nghĩa trong thư viện của C++ • Bạn phải viết những dòng sau (gọi là chỉ thị tiền xử lý) ở gần đầu file: – #include using namespace std; – Báo cho C++ dùng những thư viện thích hợp để ta có thể sử dụng các đối tượng cin, cout, cerr trong chương trình DTH INT2202
- Ghi chuẩn • Ta có thể output những gì? – Có thể output bất cứ dữ liệu nào ra màn hình • Biến • Hằng • Giá trị hằng • Biểu thức (bao gồm tất cả) – cout << numberOfGames << " games played."; 2 giá trị được output: giá trị của biến numberOfGames, giá trị hằng " games played." • Cascading: nhiều giá trị trong một cout DTH INT2202
- Tách output thành nhiều dòng • Kí hiệu xuống dòng trong output – Nhắc lại: "\n" là chuỗi escape cho kí tự xuống dòng • Cách thứ 2: đối tượng endl • Ví dụ: cout << "Hello World\n"; • Gửi xâu "Hello World" ra màn hình và xâu escape nhảy sang dòng tiếp theo cout << "Hello World" << endl; • Kết quả giống trên DTH INT2202
- Định dạng output • Định dạng giá trị số cho output – Giá trị hiển thị có thể không như bạn mong đợi. cout << "The price is $" << price << endl; • Nếu biến price (với kiểu khai báo là double) có giá trị 78.5, bạn có thể nhận output: – The price is $78.500000 hay: – The price is $78.5 • Bạn cần báo tường minh cho C++ cách kết xuất các con số trong chương trình! DTH INT2202
- Định dạng các con số • “Công thức màu nhiệm" để ép cỡ thập phân: cout.setf(ios::fixed); cout.setf(ios::showpoint); cout.precision(2); • Những câu lệnh này ép tất cả các giá trị sẽ được cout phía sau: – phải có chính xác 2 chữ số sau dấu phẩy – Ví dụ: cout << "The price is $" << price << endl; • Giờ sẽ cho kết quả là: The price is $78.50 • Bạn cũng có thể chỉnh sửa độ chính xác mỗi khi cần DTH INT2202
- Ghi lỗi • Bạn output lỗi với cerr – cerr làm việc giống như cout – Cung cấp cơ chế phân biệt ghi thông thường với ghi lỗi • Chỉnh hướng luồng ghi – Hầu hết các hệ thống cho phép cout và cerr được “chỉnh hướng" sang thiết bị khác • ví dụ: máy in, ghi ra file, trình ghi lỗi, DTH INT2202
- Đọc dữ liệu bằng cin • cin để đọc vào, cout để ghi ra • Sự khác biệt: – ">>" (phép toán trích ra) hướng ngược lại • Hãy nghĩ nó là hướng dữ liệu sẽ đi – Đối tượng tên là "cin" được dùng thay cho "cout" – Giá trị hằng không được phép dùng với cin • Bạn phải đọc vào một biến • cin >> num; – Màn hình đợi nhập vào bàn phím – Giá trị nhập từ bàn phím được gán cho num DTH INT2202
- Nhắc nhập dữ liệu: cin và cout • Bạn nên “nhắc” người dùng nhập dữ liệu cout > numOfDragons; – Chú ý là không cần "\n" trong cout. Dấu nhắc sẽ “đợi” trên cùng dòng lời nhắc: Enter number of dragons: ___ • Dấu gạch dưới báo hiệu nơi dữ liệu nhập từ bàn phím sẽ được ghi ra • Mọi cin nên có một lời nhắc bằng cout – Cần tối đa tính thân thiện của input/output DTH INT2202
- Phong cách lập trình • Yêu cầu tối thiểu: Chương trình dễ đọc và chỉnh sửa • Có 2 phương pháp chú thích: – // Hai dấu xược báo hiệu cả dòng đó sẽ bị bỏ qua – /*Cặp xược sao báo hiệu mọi thứ nằm giữa chúng sẽ bị bỏ qua */ – Cả 2 đều được dùng thường xuyên • Đặt tên – VIẾT_HOA cho hằng – viếtThườngRồiViếtHoaChữCáiĐầuTiếng cho biến – Quan trọng nhất: TÊN PHẢI CÓ NGHĨA! DTH INT2202
- Thư viện • Các thư viện chuẩn của C++ • #include – Chỉ dẫn “thêm” nội dung của file thư viện vào chương trình của bạn – Gọi là “chỉ thị tiền xử lý” • Thực hiện trước trình biên dịch, chỉ đơn giản copy file thư viện vào file chương trình của bạn • C++ có rất nhiều thư viện – Input/output, toán, xâu, DTH INT2202
- Không gian tên • Các không gian tên đã định nghĩa: – Là tập các định nghĩa tên • Tới giờ ta chỉ quan tâm tới không gian tên "std" – Có tất cả các định nghĩa trong thư viện chuẩn ta cần • Ví dụ: #include using namespace std; • Bao gồm tất cả các định nghĩa tên trong thư viện chuẩn #include using std::cin; using std::cout; • Ta có thể chỉ đinh những đối tượng mà ta cần DTH INT2202
- Tóm tắt 1 • Định danh trong C++ phân biệt viết hoa viết thường • Dùng các tên có nghĩa – cho biến và hằng • Các biến phải được khai báo trước khi sử dụng – Nên khởi tạo biến • Cẩn thận khi tính toán dữ liệu số – Độ chính xác, dấu ngoặc, thứ tự ưu tiên các phép toán • #include các thư viện C++ khi cần DTH INT2202
- Tóm tắt 2 • Đối tượng cout – ghi ra thiết bị ra chuẩn • Đối tượng cin – đọc từ thiết bị vào chuẩn • Đối tượng cerr – ghi thông điệp báo lỗi • Dùng chú thích để làm chương trình dễ hiểu hơn – không nên chú thích quá nhiều DTH INT2202
- Chuẩn bị bài tới • Đọc chương 1, 2 giáo trình. DTH INT2202