Bài giảng lập trình c chương 2 nguyễn minh thành

30 476 0
Bài giảng lập trình c  chương 2   nguyễn minh thành

Đ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

Kiểu liệu Kiểu liệu  Kiểu liệu T xác định , với :  V : tập giá trị hợp lệ mà đối tượng kiểu T lưu trữ  O : tập thao tác xử lý thi hành đối tượng kiểu T  Ví du 1: Giả sử có kiểu liệu mẫu tự = với  Vc = { a-z, A-Z}  Oc = {lấy mã ASCII thường thành ký tự hoa…}  ký tự, biến đổi ký tự Ví dụ 2: Giả sử có kiểu liệu số nguyên = với  Vi = { -32768 32767}  Oi = { +, -, *, /, %}  Như vậy, muốn sử dụng kiểu liệu cần nắm vững nội dung liệu phép lưu trữ xử lý tác động Kiểu liệu Các thuộc tính KDL bao gồm:  Tên KDL  Miền giá trị  Kích thước lưu trữ  Tập toán tử tác động lên KDL Các loại kiểu liệu Kiểu liệu Là kiểu liệu đơn giản, cấu trúc thường ngôn ngữ lập trình cấp cao xây dựng sẵn thành phần ngôn ngữ để giảm nhẹ công việc cho người lập trình    Kiểu có thứ tự rời rạc: số nguyên, ký tự Kiểu có thứ tự không rời rạc: số thực Các kiểu sở đơn giản rõ tổ chức liệu cấu trúc, thường sử̉ dụng làm để xây dựng kiểu dữ̃ liệu phức tạp khác Kiểu liệu  Kiểu liệu có cấu trúc    Mảng Chuỗi ký tự Cấu trúc  Kiểu liệu hướng giải vấn đề Những kiểu liệu có cấu trúc hướng tới vấn đề cần giải xây dựng cách kết nối cấu trúc liệu     Danh sách Hàng đợi Ngăn xếp Cấu trúc Nếu liệu xữ lý theo thứ tự nhập hàng đợi sử dụng Tương tự liệu cần xữ lý theo thứ tự ngược với thứ tự nhập (tức nhập sau xữ lý trước) dùng ngăn xếp, … Vì cấu trúc liệu hướng vấn đề xác định thuật toán tương ứng Mảng chiều   Mảng thực chất biến cấp phát nhớ liên tục bao gồm nhiều biến thành phần Các thành phần mảng tập hợp biến có kiểu liệu tên Do để truy xuất biến thành phần, ta dùng chế mục Khai báo mảng Cách 1: Con trỏ  Cú pháp: [] ;  Ví dụ: int a[100]; //Khai bao mang so nguyen a gom 100 phan tu float b[50]; //Khai bao mang so thuc b gom 50 phan tu  Khởi gán giá trị ban đầu cho mảng: [] = {Giá trị}; Ví dụ: int a[5] = {0}; Khai báo mảng Cách 2: Con trỏ  Ý nghĩa: Khi ta khai báo mảng với kiểu liệu (int, float, char,…) tên mảng thực chất địa phần tử  Cú pháp: < Kiểu liệu > *< Tên mảng >;  Ví dụ : int *p; // khai bao tro p int b[100]; p = new int [100]; p = b;// p tro vao phan tu cua mang b  Với cách viết ta hiểu cách viết sau tương đương p[i]  *(p + i)  b[i]  *(b+i)  Cấp phát: new  Giải phóng delete Các thao tác        Nhập / xuất Tìm kiếm Sắp xếp  Tăng dần, giảm dần  Số lẻ tăng (giảm) dần Kiểm tra Đếm  Phần tử x, Số nguyên tố, Mảng tăng (giảm) Thêm / xóa Tính tổng, giá trị trung bình, … Bài tập thực hành  18 Viết hàm xếp phần tử lẻ tăng dần  19 Viết hàm xếp phần tử vị trí lẻ tăng dần  20 Viết hàm xoá phần tử vị trí lẻ mảng  21 Viết hàm xoá phần tử có giá trị lớn mảng  22 Nhập vào giá trị X Viết hàm xoá tất phần tử có giá trị nhỏ X  23 Nhập vào giá trị X Viết hàm xoá phần tử có giá trị gần X  24 Viết hàm loại bỏ tất phần tử có giá trị trùng (chỉ giữ lại phần tử số phần tử trùng)  25 Viết hàm chèn phần tử có giá trị X vào vị trí mảng  26 Viết hàm chèn phần tử có giá trị X vào phía sau phần tử có giá trị lớn mảng  27 Viết hàm chèn phần tử có giá trị X vào trước phần tử có giá trị số nguyên tố mảng 10 Các hàm thư viện – (tt) So sánh n ký tự s1 s2, giá trị trả tương tự hàm strcmp() int strncmp(char s1[],char s2[], int n);  So sánh chuỗi s1 s2 không phân biệt hoa thường, giá trị trả tương tự hàm strcmp() int stricmp(char s1[],char s2[]);  So sánh n ký tự s1 s2 không phân biệt hoa thường, giá trị trả tương tự hàm strcmp() int strnicmp(char s1[],char s2[], int n);  16 Các hàm thư viện – (tt) Tìm xuất ký tư c chuỗi s Trả về: NULL: Địa c: tìm thấy char *strchr(char s[], char c);  Tìm xuất chuỗi s2 chuỗi s1 Trả về: NULL: Ngược lại: Địa bắt đầu chuỗi s2 s1 char *strstr(char s1[], char s2[]);  17 Các hàm thư viện – (tt)  Tách chuỗi:  Nếu s2 có xuất s1: Tách chuỗi s1 thành hai chuỗi: Chuỗi đầu ký tự gặp chuỗi s2 đầu tiên, chuỗi sau ký tự lại s1 sau bỏ chuỗi s2 xuất s1  Nếu s2 không xuất s1 kết chuỗi tách s1 char *strtok(char s1[], char s2[]); 18 Bài tập       19 28 Đếm có khoảng trắng chuỗi 29 Nhập vào chuỗi, loại bỏ khoảng trắng thừa chuỗi 30 Nhập vào hai chuỗi s1 s2, nối chuỗi s2 vào s1 Xuất chuỗi s1 hình 31 Đổi tất ký tự có chuỗi thành chữ thường (không dùng hàm strlwr) 32 Đổi tất ký tự chuỗi sang chữ in hoa (không dùng hàm struppr) 33 Viết chương trình đổi ký tự từ thành chữ in hoa Kiểu liệu có cấu trúc Cấu trúc thực chất kiểu dữ liệu người dùng định nghĩa cách gom nhóm kiểu dữ liệu có sẵn C thành kiểu dữ liệu phức hợp nhiều thành phần  Khai báo struct tên_struct { khai báo thuộc tính; }; typedef struct tên_struct tên_kiểu;  20 Ví dụ: struct ttDate { char thu[5]; unsigned char ngay; unsigned char thang; int nam; }; typedef struct ttDate DATE; Truy cập thuộc tính cấu trúc  Biến kiểu cấu trúc tên_kiểu tên_biến; tên_biến.tên_thuộc_tính; Ví dụ: DATE x ; // khai bao bien x kieu DATE x.ngay = ; // gan bang  Biến trỏ kiểu cấu trúc tên_kiểu *tên_biến_con_trỏ; tên_biến_con_trỏ->tên_thuộc_tính; Ví dụ: DATE *x ; // khai bao bien x kieu tro DATE x -> = ; // gan bang 21  Khai báo đệ qui struct tên_struct { khai báo thuộc tính; struct tên_struct *tên_thuộc_tính_đệ_qui; };  Ví dụ: struct ttNode { int key; struct ttNode *pNext; }; 22 Bài tập  55 Viết chương trình sử dụng kiểu liệu cấu trúc để hiển thị giờ, phút, giây          23 hình Tính khoảng cách mốc thời gian so sánh mốc thời gian cho biết kết 56 Viết chương trình sử dụng kiểu liệu cấu trúc thể ngày, tháng, năm hình Tính khoảng cách ngày so sánh ngày cho biết kết 57 Viết chương trình khai báo kiểu liệu để biểu diễn phân số Hãy viết hàm thực công việc sau: • Tính tổng, hiệu, tích, thương hai phân số • Rút gọn phân số • Qui đồng hai phân số • So sánh hai phân số Mảng cấu trúc  Cách khai báo tương tự mảng chiều hay ma trận (Kiểu liệu kiểu liệu có cấu trúc)  Cách truy cập phần tử mảng truy cập mảng chiều hay ma trận Nhưng phần tử có kiểu cấu trúc nên phải định rõ cần lấy thành phần nào, tức phải truy cập đến thành phần cuối có kiểu liệu (xem lại bảng kiểu liệu bản) 24 Nguyên tắc lập trình mảng cấu trúc Do kiểu dữ liệu có cấu trúc thường chứa nhiều thành phần nên viết chương trình loại ta cần lưu ý:  Xây dựng hàm xử lý cho kiểu cấu trúc  Muốn xử lý cho mảng cấu trúc, ta gọi lại hàm xử lý cho kiểu cấu trúc đã xây dựng cách dùng vòng lặp 25 Mảng chiều Mảng hai chiều thực chất mảng chiều phần tử mảng mảng chiều, truy xuất hai số dòng cột  Từ khái niệm ta đưa khái niệm mảng nhiều chiều sau: mảng có từ hai chiều trở lên gọi mảng nhiều chiều  26 Khai báo Cách 1: Con trỏ < Kiểu liệu > < Tên mảng > [< Số dòng tối đa>][];  Ví dụ: int A[10][10]; // Khai báo mảng chiều kiểu int gồm 10 dòng, 10 cột float b[10][10]; // Khai báo mảng chiều kiểu float gồm 10 dòng, 10 cột Cách : Con trỏ < Kiểu liệu > **;  Ví dụ : int **A ; // Khai báo mảng động chiều kiểu int float **B ; // Khai báo mảng động chiều kiểu float 27 Truy xuất Để truy xuất thành phần mảng hai chiều ta phải dựa vào số dòng số cột Ví dụ: int A[3][4] = { {2,3,9,4} , {5,6,7,6} , {2,9,4,7} }; Với khai báo ta có: A[0][0] = 2; A[0][1] = 3; A[1][1] = 6; A[1][3] = 6; 28 Các thao tác        29 Nhập/ xuất Tìm kiếm Đếm Tính tổng/ trung bình Sắp xếp dòng/ cột Xóa dòng/ cột Chèn thêm dòng/ cột Ma trận vuông Đường chéo chính: số dòng = số cột  Đường chéo phụ: số cột + số dòng = kích thước -  30 [...]... dữ liệu c c u tr c)  C ch truy c p phần tử trong mảng c ng như truy c p trên mảng một chiều hay ma trận Nhưng do từng phần tử c kiểu c u tr c nên phải chỉ định rõ c n lấy thành phần nào, t c là phải truy c p đến thành phần cuối c ng c kiểu là dữ liệu c bản (xem lại bảng c c kiểu dữ liệu c bản) 24 Nguyên t c lập trình trên mảng c u tr c Do kiểu dữ liệu c c u tr c thường chứa rất nhiều thành phần... 33 Viết chương trình đổi những ký tự đầu tiên c a mỗi từ thành chữ in hoa Kiểu dữ liệu c c u tr c Cấu tr c th c chất là một kiểu dữ liệu do người dùng định nghĩa bằng c ch gom nhóm c c kiểu dữ liệu c bản c sẵn trong C thành một kiểu dữ liệu ph c hợp nhiều thành phần  Khai báo struct tên_struct { khai báo c c thu c tính; }; typedef struct tên_struct tên_kiểu;  20 Ví dụ: struct ttDate { char thu[5];... nguồn[]);  Chép n ký tự từ chuỗi nguồn sang chuỗi đích Nếu chiều dài nguồn < n thì hàm sẽ điền khoảng trắng cho đủ n ký tự vào đích strncpy(char đích[], char nguồn[], int n);  14 C c hàm thư viện – (tt) Nối chuỗi s2 vài chuỗi s1 strcat(char s1[],char s2[]);  Nối n ký tự đầu tiên c a chuỗi s2 vào chuỗi s1 strncat(char s1[],char s2[],int n);  So sánh 2 chuỗi s1 và s2 theo nguyên t c thứ tự... c Ngư c lại: Địa chỉ bắt đầu chuỗi s2 trong s1 char *strstr(char s1[], char s2[]);  17 C c hàm thư viện – (tt)  Tách chuỗi:  Nếu s2 c xuất hiện trong s1: Tách chuỗi s1 thành hai chuỗi: Chuỗi đầu là những ký tự cho đến khi gặp chuỗi s2 đầu tiên, chuỗi sau là những ký tự c n lại c a s1 sau khi đã bỏ đi chuỗi s2 xuất hiện trong s1  Nếu s2 không xuất hiện trong s1 thì kết quả chuỗi tách... bang 5 21  Khai báo đệ qui struct tên_struct { khai báo c c thu c tính; struct tên_struct *tên_thu c_ tính_đệ_qui; };  Ví dụ: struct ttNode { int key; struct ttNode *pNext; }; 22 Bài tập  55 Viết chương trình sử dụng kiểu dữ liệu c u tr c để hiển thị giờ, phút, giây ra          23 màn hình Tính khoảng c ch giữa 2 m c thời gian và so sánh 2 m c thời gian và cho biết kết quả 56 Viết chương trình. .. độ dài c a chuỗi luôn luôn khai báo dư 1 phần tử để chứa ký tự ‘\0’ 11 Khai báo  12 C ch 2: Con trỏ char *< Tên chuỗi >; Ví dụ : char *chuoi; Nhập cin.getline(chuoi, số ký tự tối đa);  Ví dụ: char *str; str = new char [30]; cin.getline(str, 30);  13 C c hàm thư viện – Tính độ dài c a chuỗi s int strlen(char s[]);  Sao chép nội dung chuỗi nguồn vào chuỗi đích strcpy(char đích[], char nguồn[]);... tách vẫn là s1 char *strtok(char s1[], char s2[]); 18 Bài tập       19 28 Đếm c bao nhiêu khoảng trắng trong chuỗi 29 Nhập vào một chuỗi, hãy loại bỏ những khoảng trắng thừa trong chuỗi 30 Nhập vào hai chuỗi s1 và s2, nối chuỗi s2 vào s1 Xuất chuỗi s1 ra màn hình 31 Đổi tất c c c ký tự c trong chuỗi thành chữ thường (không dùng hàm strlwr) 32 Đổi tất c c c ký tự trong chuỗi sang chữ in hoa (không... khi viết chương trình loại này ta c n lưu ý:  Xây dựng hàm xử lý cho một kiểu c u tr c  Muốn xử lý cho mảng c u tr c, ta gọi lại hàm xử lý cho một kiểu c u tr c đã đư c xây dựng bằng c ch dùng vòng lặp 25 Mảng 2 chiều Mảng hai chiều th c chất là mảng một chiều trong đó mỗi phần tử c a mảng là một mảng một chiều, và đư c truy xuất bởi hai chỉ số dòng và c t  Từ khái niệm trên ta c thể đưa...Chuỗi ký tự Chuỗi ký tự là một dãy c c phần tử, mỗi phần tử c kiểu ký tự  Khai báo:   C ch 1: Con trỏ hằng char < Tên chuỗi > [ < Số ký tự tối đa c a chuỗi > ] ; Ví dụ: char chuoi [25 ];  Ý nghĩa khai báo 1 mảng kiểu ký tự tên là chuoi c 25 phần tử (như vậy tối đa ta c thể nhập 24 ký tự vì phần tử thứ 25 đã chứa ký tự kết th c chuỗi ‘\0’ )  Lưu ý: Chuỗi ký tự đư c kết th c bằng ký tự... s1[],char s2[]);  So sánh n ký tự đầu tiên c a s1 và s2 nhưng không phân biệt hoa thường, giá trị trả về tương tự hàm strcmp() int strnicmp(char s1[],char s2[], int n);  16 C c hàm thư viện – (tt) Tìm sự xuất hiện đầu tiên c a ký tư c trong chuỗi s Trả về: NULL: nếu không c Địa chỉ c: nếu tìm thấy char *strchr(char s[], char c) ;  Tìm sự xuất hiện đầu tiên c a chuỗi s2 trong chuỗi s1 Trả ... Nối chuỗi s2 vài chuỗi s1 strcat(char s1[],char s2[]);  Nối n ký tự chuỗi s2 vào chuỗi s1 strncat(char s1[],char s2[],int n);  So sánh chuỗi s1 s2 theo nguyên t c thứ tự từ điển Phân biệt chữ... NULL: Ngư c lại: Địa bắt đầu chuỗi s2 s1 char *strstr(char s1[], char s2[]);  17 C c hàm thư viện – (tt)  Tách chuỗi:  Nếu s2 c xuất s1: Tách chuỗi s1 thành hai chuỗi: Chuỗi đầu... rõ c n lấy thành phần nào, t c phải truy c p đến thành phần cuối c kiểu liệu (xem lại bảng kiểu liệu bản) 24 Nguyên t c lập trình mảng c u tr c Do kiểu dữ liệu c c u tr c thường chứa nhiều thành

Ngày đăng: 03/12/2015, 18:22

Từ khóa liên quan

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

Tài liệu liên quan