Chương 1: Lập trình cấu trúc và lập trình hướng đối tượng Giới thiệu 1.1 Các khái niệm cơ bản 1.2 Phương pháp lập trình 1.3 Các ngôn ngữ lập trình Đ.Phú, 2021 1 Giới thiệu Đ.Phú, 2021 2 Giới thiệu Đ.Phú, 2021 3 Giới thiệu Đ.Phú, 2021 4 Giới thiệu Đ.Phú, 2021 5 Giới thiệu Đ.1 Các khái niệm cơ bản • Ký tự (Character) • Từ khóa (Key word) • Tên (Identifier) • Một số quy tắc khi viết chương trình + Quy tắc 1: Mỗi câu lệnh có thể viết trên một hoặc nhiều dòng, trước khi muốn xuống dòng ta thêm dấu \ + Quy tắc 2: Cách viết chú thích (các chú thích được viết sau dấu \\ hoặc bên trong /* ……. + Quy tắc 3: Khi sử dụng các hàm chuẩn, cần khai báo thư viện chứa hàm chuẩn đó (VD: stdio.2 Phương pháp lập trình • Lập trình tuyến tính (Gặp khó khăn khi chương tình lớn) • Lập trình cấu trúc (LTCT: Structure Oriented) LTCT = Cấu trúc dự liệu + Giải thuật (thuật toán) Phương pháp này trở lên khó khăn khi dữ liệu của bài toán lớn, và khi thay đổi dữ liệu dẫn đến có thể phải viết lại thuật toán và chương trình. • Lập trình hướng đối tượng (LTHĐT: Object Oriented) + Phương pháp: thiết kế các chương trình (các thao tác xử lý) xoáy quanh dữ liệu (thuộc tính) của hệ thống và các đối tượng, nên khi dữ liệu thay đổi sẽ ít gây ảnh hưởng đến các thao tác xử lý liên quan khác. + Phương pháp lập trình cho phép tiếp cận bài toán gần gũi với thế giới thực hơn.3 Các ngôn ngữ lập trình Đ.Phú, 2021 8 Chương 2: Ngôn ngữ lập trình C/C++ Ngôn ngữ dung để làm gì ? 2.1 Biến, mảng và biểu thức 2.2 Vào ra dữ liệu 2.3 Các cấu trúc điều khiển (rẽ nhánh) 2.4 Hàm và cấu trúc chương trình 2.5 Các mở rộng của C++ so với C Đ.1 Biến mảng và biểu thức • Kiểu dữ liệu (biến) 2 Đ.1 Biến mảng và biểu thức • Hằng số C/C++ cung cấp cho người dung một số các loại hằng như: số thập phân, số Hexa, ký tự, chuỗi.
- Hằng thập phân: 1234; 324.67E5;… - Hằng Hexa: 0x17A7; 0xA00F; 0x7F ;… - Hằng ký tự: ‘A’ = 65 ; ‘a’ = 97 ; ‘9’ = 57 (Xem bảng mã ASCII) - Hằng chuỗi (xâu) ký tự: “ABcdfr768” ; “Ha Noi” ; …. ; “” //xâu rỗng Chú ý: kết thúc một chuỗi ký từ là ký tự null (\0).1 Biến mảng và biểu thức • Hằng số Cách viết một số ký tự đặc biệt: TT Cách viết Ký tự 1 ‘\’’ ‘ 2 ‘\”’ “ 3 ‘\\’ \ 4 ‘\n’ \n (xuống dòng) 5 ‘\0’ \0 (null) 6 ‘\t’ tab 7 ‘\b’ back space 8 ‘\r’ RC (về đầu dòng) 9 ‘\f’ LF (sang trang) Đ.1 Biến mảng và biểu thức • Kiểu enum Dùng để tạo kiểu dữ liệu dang enum. Cú pháp: enum tk {pt1, pt2, …} tb1, tb2, …; enum tk {pt1, pt2, …} ; enum {pt1, pt2, …} tb1, tb2, …; enum {pt1, pt2, …}; Trong đó: tk là tên kiểu được định nghĩa pt1, pt2, … là tên các phần tử thuộc tk tb1, tb2 là tên biến được khai báo kiểu tk Đ.1 Biến mảng và biểu thức • Biến (Variable) Mọi biến bắt buộc phải khai báo trước khi sử dụng. Cú pháp khai báo biến: kiểu_dự_liệu tên_biến; Biến đơn: int a; int a,b,c; long a1,a2=4523; float x,y=13.1 Biến mảng và biểu thức • Định nghĩa kiểu bằng typedef Ví dụ định nghĩa kiểu nguyen là kiểu dữ liệu int: typedef int nguyen; Từ đây ta dùng nguyen để khai báo biến: nguyen a,b,x,y; Khối lệnh là một dãy các câu lệnh được bao bởi cặp dâu {…}, các khối lệnh có thể lồng nhau.
ví dụ: { int a,b; { float x[10],y[4][3]; a = b + 4; } printf(“a = %d”,a); } Đ.1 Biến mảng và biểu thức • Biến, mảng tự động (local: cục bộ, địa phương) Biến (mảng) được khai báo bên trong các hàm (chương trình con), kể kể hàm main, khi kết thúc các hàm thì vùng nhớ được giải phóng, biến (mảng) khai báo trong hàm nào thì hàm đó được sử dụng. • Biến, mảng ngoài (globle: toàn cục) Biến (mảng) ngoài được khai báo bên ngoài các hàm, chúng sẽ tồn tại trong suốt thời gian làm việc của chương trình.h> long x1,x2; char str1[]=“Hello !”; void main() { int a,b; float x[]= {1,2.1 Biến mảng và biểu thức • Biến, mảng tĩnh (static) Để khai báo biến (mảng) tĩnh ta dùng thêm từ kháo static viết đằng trước kiểu dữ liệu. Ví dụ: static long x1,x2; static char str1[]=“Hello !”; Biến (mảng) tĩnh trong hay ngoài đêu được cấp phép bộ nhớ trong suốt thời gian hoạt động của chương trình. • Toán tử sizeof :Dùng để xác định kích cỡ của của mảng.6, 56, 0}; int n=sizeof(x);//n=4(số phần tử của mảng x) • Biểu thức: là sự kết hợp giữa các phép toán (toán tử) và các sô hạng (toán hạng), ví dụ: p = (a+b+c)/2; s = pi*R*R; Đ.1 Biến mảng và biểu thức • Phép tính số học và logic bit Phép Phép Ý nghĩa V.dụ toán toán + Cộng a+b & VÀ (AND) a+b - Trừ a-b | HOẶC (OR) a|b * Nhân a*b ^ LOẠI TRỪ (XOR) a^b / Chia a/b << Dịch trái a<<4 % Lấy phần dư a%b >> Dịch phải a>>8 ++ Tăng một đ.vị ++n, ~ Đảo bit (NOT) ~a n++ -- Giảm một đ.1 Biến mảng và biểu thức • Phép so sánh và logig quan hệ Phép Phép Ý nghĩa V.dụ toán Toán > Lớn hơn a>b && Quan hệ và (a>b)&&(c>d) >= Lớn hơn a<=b || Quan hệ (a>b)||(c>d) hoặc bằng hoặc < Nhỏ hơn a<b ! Quan hệ đảo !(a>5) <= Lớn hơn a<=b hoặc bằng == Bằng a==b != khác a!=b Đ.1 Biến mảng và biểu thức • Chuyển đổi và ép kiểu dữ liệu Để chuyển đổi giữa các loại dữ liệu qua nhau.1 Biến mảng và biểu thức • Thứ tự ưu tiên các phép tính Đ.2 Vào ra dữ liệu • In dữ liệu ra màn hình (hàm printf()) Cú pháp: printf(“các_đặc_tả”,các_biến_số); Đ.2 Vào ra dữ liệu • Nhập dữ liệu từ bàn phím (hàm scanf()) Cú pháp: scanf(“các_đặc_tả”,địa_chỉ_biến_số); Viết dữ liệu ra máy in.3 Các cấu trúc điều khiển • Toán tử if Cú pháp dạng 1: s điều_kiện ? if(điều_kiện) đ khối_lệnh; khối_lệnh Cú pháp dạng 2: s điều_kiện ? if(điều_kiện) khối_lệnh_1; đ else khối_lệnh_1 khối_lệnh_2 khối_lệnh_2; Đ.3 Các cấu trúc điều khiển • Toán tử else if Cú pháp: if(đk_1) khối_lệnh_1; else if(đk_2) khối_lệnh_2;.
else if(đk_n-1) khối_lệnh_n-1; else khối_lệnh_n; Đ.3 Các cấu trúc điều khiển • Thuật toán else if đk_1? s s s đk_2? đk_n-1? đ đ đ khối_lệnh_1 khối_lệnh_2 khối_lệnh_n-1 khối_lệnh_n Đ.3 Các cấu trúc điều khiển • Toán tử switch Cú pháp: switch (biểu_thức) { case n1: các_lệnh_1; break; Chú ý: case n2: Phần default các_lệnh_2; cuối cùng có break; thể bỏ qua. case nk: các_lệnh_k; break; default: các_lệnh; } Đ.3 Các cấu trúc điều khiển • Toán tử switch Thuật toán Toán tử switch: biểu_thức giá_trị_khác = n1 (default) = n2 = nk các_lệnh_1 các_lệnh_2 .3 Các cấu trúc điều khiển • Toán tử vòng lặp xác định for Cú pháp: for(biểu_thức_1;biểu_thức_2;biểu_thức_3) Cách dung 1: cnt=0 cnt=0 for(cnt=0;cnt<10;++cnt) s { cnt<10 ? khối_lệnh khối_lênh; } đ khối_lệnh cnt=cnt+1 Cách dung 2: for(i=10;i>=0;i=i-2) cnt=cnt+1 đ { cnt<10 ? khối_lênh; s } Đ.3 Các cấu trúc điều khiển • Toán tử vòng lặp không xác định while Cú pháp: while(điều_kiện) s Điều_kiện? { đ khối_lệnh; } khối_lệnh Đ.3 Các cấu trúc điều khiển • Toán tử vòng lặp không xác định do while Cú pháp: do khối_lệnh { khối_lệnh; } đ Điều_kiện? while(điều_kiện) s Lệnh break dùng để thoát ra khỏi các cấu trúc điều khiển Lệnh continue dùng để bắt đầu lại một vòng lặp (khi gặp lệnh này, vòng lặp tiếp theo sẽ bắt đầu thực hiện và bỏ qua các lệnh phía dưới lệnh này trong khối_lệnh thuộc vòng lặp).4 Hàm và cấu trúc chương trình • Cấu trúc chương trình viết cho C main //khai báo thư viện Nội //khai báo hằng dung //khai báo biến thuật //khai báo prototype toán main() mend { //thân chương trình fc1 fc2 fcN //chính Nội Nội Nội } dung dung dung thuật thuật … thuật //các hàm (fc: function) toán toán toán //(chương tình con) ret ret ret Đ.4 Hàm và cấu trúc chương trình • Cấu trúc một hàm con (ctc: chương trình con) //============================== FuncName //Subroutin FuncName //Giải thích chức năng và ý //nghĩa của hàm Nội dung //============================== của thuật kiểu_trả_về FuncName(các_đối_số) toán { //các lệnh của hàm return giá_tri_trả_về; ret } //============================== Đ.4 Hàm và cấu trúc chương trình Ví dụ: tìm hai số lớn nhất của a và b //=========================== //Subroutine TimMax TimMax //Tìm giá trị lớn nhất của a //và b //=========================== a>b ? s float TimMax(float a, float b) đ { float max; max=a max=b //max = (a>b)?a:b; if(a>b) max = a; ret else max = b; return max; Cách thức thực hiện chương } trình của C/C++ (trình bày trên excel) //=========================== Đ.4 Hàm và cấu trúc chương trình Các hình dùng trong thuật toán: Bắt đầu, kết thúc chương trình. Hoặc dùng cho toán tử switch Dùng để nhập dữ liệu từ bàn phím và xuất dữ liệu ra màn hình. Dùng để thực hiện lệnh, công việc, thao tác , … Dùng để kiểm tra điều kiện đúng hay sai.4 Hàm và cấu trúc chương trình • Con trỏ và địa chỉ Địa chỉ (address) Khi làm việc với biến số ta cần biết: Tên biến, kiểu biến, giá trị của biến và địa chỉ của biến, ví dụ: float x = 123.65; địa chỉ của biến x là &x Con trỏ (pointer) Con trỏ là một biến dùng để chứa địa chỉ (con trỏ phải cùng kiểu với biến số cần lấy địa chỉ), cú pháp khai báo con trỏ: kiểu *tên_con_trỏ; , ví dụ: int x,y,n,*px,*c; float z,*pf1,*pf2; px = &x; //con trỏ px chứa đ.chỉ của x c = &y; //con trỏ c chứa đ.chỉ của y pf1 = &z; //con trỏ pf1 chứa đ.chỉ của z pf2 = &n; //Câu lênh này sai Đ.4 Hàm và cấu trúc chương trình • Con trỏ và địa chỉ Sử dụng con trỏ Bà cách viết biểu thức phía dưới là như nhau: y = 3*x + z; //cách viết 1 *py = 3*x + z; //cách viết 2 *py = 3*(*px) + z; //cách viết 3 Đ.4 Hàm và cấu trúc chương trình • Con trỏ và địa chỉ Hàm có đối là con trỏ #include <stdio.h> void main() { float a = 7.5; hoan_vi(&a,&b); printf(“a = %f b = %f”,a,b); } void hoan_vi(float *px, float *py) { float z; z = *px; *px = *py; *py = z; } Sau khi chương trình thực hiện xong: a = ?, b = ? Đ.