intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Bài giảng Kỹ thuật lập trình: Chương 3 - Nguyễn Văn Huy

Chia sẻ: Minh Vũ | Ngày: | Loại File: PDF | Số trang:32

20
lượt xem
2
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Bài giảng "Kỹ thuât lập trình - Chương 3: Mảng, chuỗi và hàm" cung cấp cho người học các kiến thức: Mảng, chuỗi, mảng chuỗi, hàm, đệ quy, hàm và mảng dữ liệu, tổ chức chương trình. Mời các bạn cùng tham khảo nội dung chi tiết.

Chủ đề:
Lưu

Nội dung Text: Bài giảng Kỹ thuật lập trình: Chương 3 - Nguyễn Văn Huy

  1. LOGO Chương III Mảng, Chuỗi và Hàm
  2. www.themegallery.com Nội dung chính 3.1. Mảng 3.2. Chuỗi 3.3. Mảng chuỗi 3.4. Hàm 3.5. Đệ quy 3.6. Hàm và mảng dữ liệu 3.7. Tổ chức chương trình Trường ĐH GTVT TP.HCM - Bài giảng : Kỹ thuật lập trình COMPANY LOGO 2
  3. www.themegallery.com 3.1 Mảng Mảng là tập hợp các phần tử có cùng kiểu dữ liệu được sắp xếp liền kề nhau trong bộ nhớ. A. Mảng một chiều Mảng A A[0] A[1] A[2] A[3] A[4] A[5] A[6] Cú pháp khai báo: • [số thành phần] ; // không khởi tạo • [số thành phần] = { dãy giá trị } ; /* có khởi tạo */ • [ ] = { dãy giá trị } ; // có khởi tạo Cách sử dụng: Để chỉ thành phần thứ i (hay chỉ số i) của một mảng ta viết tên mảng kèm theo chỉ số trong cặp ngoặc vuông []. Trường ĐH GTVT TP.HCM - Bài giảng : Kỹ thuật lập trình COMPANY LOGO 3
  4. www.themegallery.com Ví dụ: Tìm phần tử nhỏ nhất của mảng một chiều #include using namespace std; int main() { float a[100], min;// a chứa tối đa 100 số int i, n; cout> n; for (i = 0; i
  5. www.themegallery.com 3.1 Mảng B. Mảng nhiều chiều Để thuận tiện trong việc biểu diễn các loại dữ liệu phức tạp như ma trận hoặc các bảng biểu có nhiều chỉ tiêu, C++ đưa ra kiểu dữ liệu mảng nhiều chiều. Tuy nhiên, việc sử dụng mảng nhiều chiều rất khó lập trình vì vậy trong mục này chúng ta chỉ bàn đến mảng hai chiều. Trường ĐH GTVT TP.HCM - Bài giảng : Kỹ thuật lập trình COMPANY LOGO 5
  6. www.themegallery.com 3.1 Mảng Hình bên minh họa mảng 0 1 2 3 2 chiều với 3 dòng và 4 cột. 0 A[0][0] A[0][1] A[0][2] A[0][3] Thực chất trong bộ nhớ, 1 A[1][0] A[1][1] A[1][2] A[1][3] tất cả 12 phần tử của mảng được sắp liên tiếp theo từng 2 A[2][0] A[2][1] A[2][2] A[2][3] dòng của mảng như minh hoạ trong hình dưới đây. A[0][0] A[0][1] A[0][2] A[0][3] A[1][0] A[1][1] A[1][2] A[1][3] A[2][0] A[2][1] A[2][2] A[2][3] Dòng 0 Dòng 1 Dòng 2 Trường ĐH GTVT TP.HCM - Bài giảng : Kỹ thuật lập trình COMPANY LOGO 6
  7. www.themegallery.com Mảng hai chiều Cú pháp khai báo: [m][n] ; – m, n là số hàng, số cột của mảng. – Kiểu thành phần là kiểu của m*n phần tử trong mảng. – Trong khai báo cũng có thể được khởi tạo bằng dãy các dòng giá trị, các dòng cách nhau bởi dấu phẩy, mỗi dòng được bao bởi cặp ngoặc {} và toàn bộ giá trị khởi tạo nằm trong cặp dấu {}. Sử dụng: Để truy nhập phần tử của mảng ta sử dụng tên mảng kèm theo 2 chỉ số chỉ vị trí hàng và cột của phần tử. Các chỉ số này có thể là các biểu thức thực, khi đó C++ sẽ tự chuyển kiểu sang nguyên. Trường ĐH GTVT TP.HCM - Bài giảng : Kỹ thuật lập trình COMPANY LOGO 7
  8. www.themegallery.com Ví dụ: Tìm phần tử nhỏ nhất của mảng hai chiều #include using namespace std; int main() { float a[100][100], min;// a chứa tối đa 10000 số int i, j, m, n; cout> m>> n; for (i = 0; i
  9. www.themegallery.com 3.2 Chuỗi Chuỗi hay xâu kí tự là một mảng các kí tự bất kì được kết thúc bằng kí tự ‘\0’. 0 1 2 3 4 5 6 7 T I N H O C \0 T I N \0 H O C \0 \0 T I H O C \0 Hình vẽ trên minh hoạ 3 xâu, mỗi xâu được chứa trong mảng kí tự có độ dài tối đa là 8. Nội dung xâu thứ nhất là “TINHOC" có độ dài thực tế là 6 kí tự, chiếm 7 ô trong mảng (thêm ô chứa kí tự kết thúc '\0'). Xâu thứ hai có nội dung “TIN" với độ dài 3 (chiếm 4 ô) và xâu cuối cùng biểu thị một xâu rỗng (chiếm 1 ô). Chú ý : Mảng kí tự được khai báo với độ dài 8 tuy nhiên các xâu có thể chỉ chiếm một số kí tự nào đó trong mảng này và tối đa là 7 kí tự. Trường ĐH GTVT TP.HCM - Bài giảng : Kỹ thuật lập trình COMPANY LOGO 9
  10. www.themegallery.com 3.2 Chuỗi Khai báo chuỗi: char [độ dài] ; // không khởi tạo char [độ dài] = xâu kí tự ; // có khởi tạo char [] = xâu kí tự ; // có khởi tạo ‒ Độ dài mảng là số kí tự tối đa có thể có trong xâu. Độ dài thực sự của xâu chỉ tính từ đầu mảng đến dấu kết thúc xâu (không kể dấu kết thúc xâu ‘\0’). Do vậy trong khai báo độ dài của mảng cần phải khai báo thừa ra một phần tử. ‒ Cách khai báo thứ hai có kèm theo khởi tạo xâu, đó là dãy kí tự đặt giữa cặp dấu nháy kép. ‒ Cách khai báo thứ 3 tự chương trình sẽ quyết định độ dài của mảng bởi xâu khởi tạo (bằng độ dài xâu + 1). Ví dụ: char thang[] = "Muoi hai" ; // độ dài mảng = 9 Trường ĐH GTVT TP.HCM - Bài giảng : Kỹ thuật lập trình COMPANY LOGO 10
  11. www.themegallery.com 3.2 Chuỗi Cách sử dụng: Sử dụng tương tự như mảng các giá trị số Nhập chuỗi với hàm cin.getline(s, n); Ví dụ: #include using namespace std; int main() { char hoten[25]; cout
  12. www.themegallery.com Một số hàm xử lý chuỗi trong #include • strcpy(s, t) ; Hàm sẽ sao chép toàn bộ nội dung của xâu t (kể cả kí tự kết thúc xâu ‘\0’) vào cho xâu s. Để sử dụng hàm này cần đảm bảo độ dài của mảng s ít nhất cũng bằng độ dài của mảng t. Trong trường hợp ngược lại kí tự kết thúc xâu sẽ không được ghi vào s và điều này có thể gây treo máy khi chạy chương trình. Ví dụ: #include #include using namespace std; int main() { char s[10], t[10]; strcpy(t,"Face");// được, gán "Face" cho t strcpy(s,t);// được, sao chép t sang s cout
  13. www.themegallery.com Một số hàm xử lý chuỗi trong #include • strncpy(s, t, n) ; Sao chép n kí tự của t vào s. Hàm này chỉ làm nhiệm vụ sao chép, không tự động gắn kí tự kết thúc xâu cho s. Do vậy NSD phải thêm lệnh đặt kí tự '\0' vào cuối xâu s sau khi sao chép xong. Ví dụ: #include #include using namespace std; int main() { char s[15], t[20] = "Tin hoc dai cuong"; strncpy(s, t, 3); // copy 3 kí tự "Tin" vào s s[3]=' '; //Gán kí tự khoảng trống cho s[3] strncpy(s+4, t+8, 9); //copy "dai cuong" vào s từ vị trí thứ 4 s[13] = '\0'; // kết thúc xâu s cout
  14. www.themegallery.com Một số hàm xử lý chuỗi trong #include • strcat(s, t); Nối một bản sao của t vào sau s (thay cho phép +). Hiển nhiên hàm sẽ loại bỏ kí tự kết thúc xâu s trước khi nối thêm t. Việc nối sẽ đảm bảo lấy cả kí tự kết thúc của xâu t vào cho s (nếu s đủ chỗ) vì vậy NSD không cần thêm kí tự này vào cuối xâu. Ví dụ: #include #include using namespace std; int main() { char a[100] = "Nam", b[4] = "Bac"; strcat(a, " va "); strcat(a, b); cout
  15. www.themegallery.com Một số hàm xử lý chuỗi trong #include • strncat(s, t, n); Nối bản sao n kí tự đầu tiên của xâu t vào sau xâu s. Hàm tự động đặt thêm dấu kết thúc xâu vào s sau khi nối xong. Tương tự, có thể sử dụng cách viết strncat(s, t+k, n) để nối n kí tự từ vị trí thứ k của xâu t cho s. • strcmp(s, t); Hàm so sánh 2 xâu s và t (thay cho các phép toán so sánh). Giá trị trả lại là hiệu 2 kí tự khác nhau đầu tiên của s và t. Từ đó, nếu s1 < s2 thì hàm trả lại giá trị âm, bằng 0 nếu s1==s2, và dương nếu s1 > s2. Trong trường hợp chỉ quan tâm đến so sánh bằng, nếu hàm trả lại giá trị 0 là 2 xâu bằng nhau và nếu giá trị trả lại khác 0 là 2 xâu khác nhau. Trường ĐH GTVT TP.HCM - Bài giảng : Kỹ thuật lập trình COMPANY LOGO 15
  16. www.themegallery.com Một số hàm xử lý chuỗi trong #include • strncmp(s, t, n) ; Giống hàm strcmp(s, t) nhưng chỉ so sánh tối đa n kí tự đầu tiên của hai xâu. • strcmpi(s, t) ; Như strcmp(s, t) nhưng không phân biệt chữ hoa, thường. • strupr(s); Hàm đổi xâu s thành in hoa, và cũng trả lại xâu in hoa đó. • strlwr(s); Hàm đổi xâu s thành in thường, kết quả trả lại là xâu s. • strlen(s) ; Hàm trả giá trị là độ dài của xâu s. Trường ĐH GTVT TP.HCM - Bài giảng : Kỹ thuật lập trình COMPANY LOGO 16
  17. www.themegallery.com 3.3 Mảng chuỗi Mảng chuỗi là mảng trong đó các phần tử của nó là một chuỗi. Cú pháp khai báo : char Tên_mảng[Kích_thước][độ_dài_chuỗi]; Trong đó : kích_thước là số lượng phần tử tối đa của mảng, độ_dài_chuỗi là kích thước của các phần tử. Để truy cập đến các phần tử ta chỉ cần viết tên mảng kèm chỉ số của nó ở trong cặp dấu [] đầu tiên. Trường ĐH GTVT TP.HCM - Bài giảng : Kỹ thuật lập trình COMPANY LOGO 17
  18. www.themegallery.com Ví dụ về mảng chuỗi #include using namespace std; int main() { char Sinh_vien[10][25]; //Mảng Sinh_vien gồm 10 chuỗi int i; for( i=0; i
  19. www.themegallery.com 3.4 Hàm  Định nghĩa hàm: Kiểu_trả_về tên_hàm (kiểu và danh_sách_tham_số) { /* thân hàm */ Các_câu_lệnh ; return giá_trị ; } Hoặc : #define Tên_hàm(Các_tham_số) Biểu_thức_Giá_trị Lưu ý: C không cho phép các hàm lồng nhau, nghĩa là phần định nghĩa của hàm này phải độc lập hoàn toàn với hàm khác. Trường ĐH GTVT TP.HCM - Bài giảng : Kỹ thuật lập trình COMPANY LOGO 19
  20. www.themegallery.com 3.4 Hàm  Khai báo nguyên mẫu hàm : Khai báo nguyên mẫu hàm sẽ cung cấp cho trình biên dịch mô tả về một hàm sẽ được định nghĩa ở một vị trí nào đó trong chương trình: Kiểu_trả_về tên_hàm (kiểu và danh_sách_tham_số);  Gọi hàm: Tên_hàm (danh_sách_đối_số) ;  Trong danh_sách_đối_số không đưa ra kiểu dữ liệu của đối số. Nếu hàm cần truyền nhiều đối số thì chúng phải tách nhau bởi dấu phẩy. Nếu đối số là mảng thì chỉ cần ghi tên mảng. Trường ĐH GTVT TP.HCM - Bài giảng : Kỹ thuật lập trình COMPANY LOGO 20
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2