Chương 2: Các kiểu dữ liệu cơ bản

Chia sẻ: Le Trang | Ngày: | Loại File: PPT | Số trang:42

0
334
lượt xem
126
download

Chương 2: Các kiểu dữ liệu cơ bản

Mô tả tài liệu
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Nội dung: - Kiểu mảng và chuỗi - Kiểu cấu trúc - Kiểu con trỏ - Kiểu tập tin - Độ phức tạp thuật toán

Chủ đề:
Lưu

Nội dung Text: Chương 2: Các kiểu dữ liệu cơ bản

  1. Chương 2 Các kiểu dữ liệu cơ bản Nội dung 1 Kiểu mảng và chuỗi 2 Kiểu cấu trúc 3 Kiểu con trỏ 4 Kiểu tập tin 5 Độ phức tạp thuật toán
  2. Chương 2 Các kiểu dữ liệu cơ bản Các cấu trúc lưu trữ trên bộ nhớ chính Kiểu chuỗi (String)  Một chuỗi là dãy liên tiếp các ký tự kết thúc bằng ký tự \0 có mã ASCII bằng 0 (NULL character)  Trong C chuỗi có tối đa 65535 ký tự  Các hàm xử lý chuỗi được đặt trong thư viện string.h của C. 12/04/09 www.lhu.edu.vn
  3. Chương 2 Các kiểu dữ liệu cơ bản Các cấểu dữ liưu trữ cấu trúcnhớ chính Các ki u trúc l ệu có trên bộ Kiểu chuỗi (String) Khai báo chuỗi: có thể dùng các cách sau  char S[10]; //Khai báo một chuỗi ký tự S có chiều dài // tối đa 10 (kể cả kí tự kết thúc)  char S[]="ABC";// Khai báo một chuỗi ký tự S có chiều // dài bằng chiều dài của chuỗi "ABC" // và giá trị khởi đầu của S là 12/04/09 www.lhu.edu.vn
  4. Chương 2 Các kiểu dữ liệu cơ bản Các cấểu dữ liưu trữ cấu trúcnhớ chính Các ki u trúc l ệu có trên bộ Kiểu chuỗi (String) Một số thao tác trên chuỗi So sánh 2 chuỗi: strcmp Sao chép chuỗi: strcpy Độ dài chuỗi: strlen Kiểm tra 1 chuỗi nằm trong chuỗi kia: strstr Cắt 1 từ ra khỏi 1 chuỗi: strtok Đổi 1 số ra chuỗi: itoa Đổi 1 chuỗi ra số: atoi, atof, ... Nhập một chuỗi: gets Xuất một chuỗi: puts 12/04/09 www.lhu.edu.vn
  5. Chương 2 Các kiểu dữ liệu cơ bản Các cấểu dữ liưu trữ cấu trúcnhớ chính Các ki u trúc l ệu có trên bộ Kiểu mảng (Array)  Mảng là một tập hợp các biến có cùng tên và kiểu dữ liệu, được lưu trữ liên tiếp trong bộ nhớ  Mỗi phần tử được đánh chỉ số (Index), phần tử đầu tiên có chỉ số là 0  Trong C, một mảng n chiều có thể coi là mảng 1 chiều trong đó mỗi phần tử là 1 mảng n-1 chiều. 12/04/09 www.lhu.edu.vn
  6. Chương 2 Các kiểu dữ liệu cơ bản Các cấểu dữ liưu trữ cấu trúcnhớ chính Các ki u trúc l ệu có trên bộ Kiểu mảng (Array): Khai báo mảng [][]...; Ví dụ, ta có thể khai báo:  Float a[10]; //khai báo mảng 1 chiều có 10 phần tử  int a[100][150];//khai báo mảng 2 chiều  int a[][]={{1, 7, -3, 8, 19},{4, 5, 2, 8, 9},{21, -7, 45, -3, 4}}; 12/04/09 www.lhu.edu.vn
  7. Chương 2 Các kiểu dữ liệu cơ bản Các cấểu dữ liưu trữ cấu trúcnhớ chính Các ki u trúc l ệu có trên bộ Kiểu hợp (Union)  Union là một kiểu dữ liệu đặc biệt trong C, nó tương tự kiểu struct nhưng các phần tử lại dùng chung một vùng nhớ  Cách thức truy xuất đến các thành phần trong kiểu Union giống như kiểu cấu trúc  Dùng kiểu Union khi cần lưu trữ dữ liệu thay đổi theo trạng thái 12/04/09 www.lhu.edu.vn
  8. Chương 2 Các kiểu dữ liệu cơ bản Các cấểu dữ liưu trữ cấu trúcnhớ chính Các ki u trúc l ệu có trên bộ Kiểu hợp (Union): Khai báo kiểu union typedef union { Ví dụ, ta có thể định nghĩa kiểu số sau: ; ; typedef union tagNumber ……… { }[]; int i; long l; }Number; Number N; Khi gán N.l=0xFF09 thì thành phần N.i sẽ nhận giá trị là 9 12/04/09 www.lhu.edu.vn
  9. Chương 2 Các kiểu dữ liệu cơ bản Các cấểu dữ liưu trữ cấu trúcnhớ chính Các ki u trúc l ệu có trên bộ Kiểu cấu trúc (Structure)  Kiểu cấu trúc (hay kiểu mẫu tin) là một tập hợp các biến khác tên và có thể khác nhau về kiểu dữ liệu  Cách thức truy xuất đến các thành phần trong kiểu cấu trúc: Têncấutrúc.Tênthànhphần  Dùng kiểu cấu trúc khi muốn lưu trữ thông tin của các đối tượng phức tạp và đa dạng 12/04/09 www.lhu.edu.vn
  10. Chương 2 Các kiểu dữ liệu cơ bản Các cấểu dữ liưu trữ cấu trúcnhớ chính Các ki u trúc l ệu có trên bộ Kiểu cấu trúc (Structure): Khai báo kiểu cấu trúc typedef struct Ví dụ, ta có thể định nghĩa kiểu cấu { trúc ngày tháng như sau: ; typedef struct ; { ……… int ngay; int thang; }[]; int nam; }Ngaythang; Ngaythang N;//khai báo biến 12/04/09 www.lhu.edu.vn
  11. Chương 2 Các kiểu dữ liệu cơ bản Các cấểu dữ liưu trữ cấu trúcnhớ chính Các ki u trúc l ệu có trên bộ Kiểu cấu trúc (Structure): Truy xuất dữ liệu  Cách thức truy xuất đến các thành phần trong kiểu cấu trúc: Têncấutrúc.Tênthànhphần  Để lấy địa chỉ của một thành phần trong cấu trúc, ta dùng toán tử &: &Têncấutrúc.Tênthànhphần Vd: Ngaythang N,M; printf(“Nhập ngày tháng: ”); scanf(“%d/%d/%d”,&N.ngay,&N.thang,&N.nam); M=N;//gán biến cấu trúc N vào biến M 12/04/09 www.lhu.edu.vn
  12. Chương 2 Các kiểu dữ liệu cơ bản Các cấểu dữ liưu trữ cấu trúcnhớ chính Các ki u trúc l ệu có trên bộ Kiểu cấu trúc (Structure): Hàm và kiểu cấu trúc  Đối của hàm có thể là: - Biến mẫu tin: khi đó tham số thực tương ứng là một giá trị mẫu tin - Tham chiếu mẫu tin: khi đó tham số thực tương ứng là một địa chỉ mẫu tin - Con trỏ mẫu tin: khi đó tham số thực là địa chỉ của biến cấu trúc.  Hàm có thể trả về: - Giá trị mẫu tin: Ngaythang tênhàm(...) - Con trỏ mẫu tin: Ngaythang *tênhàm(....) 12/04/09 www.lhu.edu.vn
  13. Chương 2 Các kiểu dữ liệu cơ bản Các cấểu dữ liưu trữ cấu trúcnhớ chính Các ki u trúc l ệu có trên bộ Kiểu con trỏ (Pointer)  Kiểu con trỏ là một kiểu dữ liệu đặc biệt trong C, có kích thước 2 bytes và dùng để chứa địa chỉ của một biến đã được cấp phát bộ nhớ  Khi biến con trỏ chứa địa chỉ của biến A ta nói nó đang trỏ tới biến (vùng nhớ) A  Nếu con trỏ chứa giá trị NULL nghĩa là nó không trỏ đến vùng nhớ nào hết 12/04/09 www.lhu.edu.vn
  14. Chương 2 Các kiểu dữ liệu cơ bản Các cấểu dữ liưu trữ cấu trúcnhớ chính Các ki u trúc l ệu có trên bộ Kiểu con trỏ (Pointer) Khai báo biến con trỏ  Trực tiếp: *; Vd: int *P,*Q;//khai báo biến  Gián tiếp: typedef *; ; Vd: typedef int *intPointer;//khai báo kiểu intPointer P,Q;//khai báo biến 12/04/09 www.lhu.edu.vn
  15. Chương 2 Các kiểu dữ liệu cơ bản Các cấểu dữ liưu trữ cấu trúcnhớ chính Các ki u trúc l ệu có trên bộ Kiểu con trỏ (Pointer) Khai báo biến con trỏ  Con trỏ void: con trỏ được khai báo kiểu void có thể chứa địa chỉ của bất kỳ kiểu nào. Tuy nhiên trước khi sử dụng phải ép về một kiểu cụ thể Vd: int X; float Y; void *P; P=&X; //P trỏ đến X (float*) P=&Y; //P trỏ đến Y (int*) P=&X; //P trỏ đến X 12/04/09 www.lhu.edu.vn
  16. Chương 2 Các kiểu dữ liệu cơ bản Các cấểu dữ liưu trữ cấu trúcnhớ chính Các ki u trúc l ệu có trên bộ Kiểu con trỏ (Pointer) Các thao tác  Gán địa chỉ một biến cho con trỏ tênbiếncontrỏ = &tênbiếncầnlấyđịachỉ; tênbiếncontrỏ = NULL; Ví dụ:  Chứa địa chỉ của mảng 1 chiều: int *P , A[10]; --> P = A;  Chứa địa chỉ của mảng 2 chiều: float *P, B[3][4]; --> P = (float*) B;  Chứa địa chỉ của 1 biến cấu trúc: struct HocSinh *P, hs; --> P = &hs; 12/04/09 www.lhu.edu.vn
  17. Chương 2 Các kiểu dữ liệu cơ bản Các cấểu dữ liưu trữ cấu trúcnhớ chính Các ki u trúc l ệu có trên bộ Kiểu con trỏ (Pointer) Các thao tác  Truy xuất nội dung 1 biến do biến con trỏ trỏ đến Cú pháp: *tênbiếncontrỏ Lưu ý: toán tử * và & có cùng độ ưu tiên Ví dụ: int X, *P; X=10; P=&X; //P trỏ đến X printf(“Giá trị X là: %d”,X); printf(“Giá trị do P trỏ đến: %d”,*P); 12/04/09 www.lhu.edu.vn
  18. Chương 2 Các kiểu dữ liệu cơ bản Các cấểu dữ liưu trữ cấu trúcnhớ chính Các ki u trúc l ệu có trên bộ Kiểu con trỏ (Pointer) Các phép toán  So sánh địa chỉ chứa trong hai con trỏ, dùng toán tử == hoặc !=  Khi sử dụng con trỏ trên mảng, ta có thể thực hiện các phép toán sau  Cộng địa chỉ con trỏ: pt + i ==>Cộng địa chỉ vùng nhớ lưu trong pt với i*sizeof(T)  Trừ hai con trỏ: pt1-pt2 12/04/09 www.lhu.edu.vn
  19. Chương 2 Các kiểu dữ liệu cơ bản Các cấểu dữ liưu trữ cấu trúcnhớ chính Các ki u trúc l ệu có trên bộ Kiểu con trỏ (Pointer) Con trỏ và mảng 1 chiều  Tên mảng là hằng địa chỉ của phần tử đầu tiên trong mảng, có thể thực hiện phép cộng địa chỉ với tên mảng. Khi đó (A+i) tương ứng với &A[i]  Ta cũng có thể sử dụng con trỏ trên mảng với các phép toán sau  Lấy địa chỉ phần tử thứ i : &A[i]  Cộng địa chỉ Vd: int i, *p, A[3]={10,20,30}; p=A;// hoặc p=&A[0]; for (i=0;i
  20. Chương 2 Các kiểu dữ liệu cơ bản Các cấểu dữ liưu trữ cấu trúcnhớ chính Các ki u trúc l ệu có trên bộ Kiểu con trỏ (Pointer) Con trỏ và mảng 2 chiều  Tên mảng là hằng địa chỉ của phần tử đầu tiên trong mảng, có thể thực hiện phép cộng địa chỉ với tên mảng. Khi đó (A+i) tương ứng với &A[i][0] Vd: float A[3][2]; ta có A ứng với &A[0][0]; (A+1) ứng với &A[1][0]; (A+2) ứng với &A[2][0]  Ta cũng có thể sử dụng con trỏ trên mảng với các phép toán sau  Lấy địa chỉ phần tử A[i][j] : p+i*sốcột+j  Cộng địa chỉ 12/04/09 www.lhu.edu.vn

CÓ THỂ BẠN MUỐN DOWNLOAD

Đồng bộ tài khoản