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

Kiểu dữ liệu


Kiểu dữ liệu


Kiểu dữ liệu T được xác định bởi một bộ <V,O> , với :
 V : tập các giá trị hợp lệ mà một đối tượng kiểu T có thể lưu trữ
 O : tập các thao tác xử lý có thể thi hành trên đối tượng kiểu T



Ví du 1: Giả sử có kiểu dữ liệu mẫu tự = <Vc ,Oc> với
 Vc = { a-z, A-Z}
 Oc
= {lấy


ASCII
thường thành ký tự hoa…}



của



tự,

biến


Là những kiểu dữ liệu đơn giản, không có cấu trúc
thường được các ngôn ngữ lập trình cấp cao xây dựng
sẵn như một thành phần của 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 cơ sở rất đơn giản và không thể hiện rõ sự tổ
chức dữ liệu trong một cấu trúc, thường chỉ được sử̉
dụng làm nền để xây dựng các kiểu dữ̃ liệu phức tạp
khác.
4


Kiểu dữ liệu
 Kiểu dữ liệu có cấu trúc cơ bản




Mảng
Chuỗi ký tự
Cấu trúc


Các thành phần của mảng là tập hợp các biến có cùng kiểu dữ
liệu và cùng tên. Do đó để truy xuất các biến thành phần, ta dùng
cơ chế chỉ mục.


Khai báo mảng
Cách 1: Con trỏ hằng
 Cú pháp:
<Kiểu dữ liệu> <Tên mảng> [<Số phần tử tối đa của mảng>] ;
 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:
<Kiểu dữ liệu> <Tên mảng> [<Kích thước>] = {Giá trị};
Ví dụ: int a[5] = {0};

7


Khai báo mảng
Cách 2: Con trỏ
 Ý nghĩa: Khi ta khai báo một mảng với kiểu dữ liệu bất kì (int, float, char,…) thì
tên của mảng thực chất là một hằng địa chỉ của phần tử đầu tiên.
 Cú pháp:
< Kiểu dữ liệu > *< Tên mảng >;
 Ví dụ :
int *p;
// khai bao con tro p
int b[100];

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 sắp xếp các phần tử lẻ tăng dần.
 19. Viết hàm sắp xếp các phần tử tại vị trí lẻ tăng dần.
 20. Viết hàm xoá phần tử tại vị trí lẻ trong mảng.
 21. Viết hàm xoá phần tử có giá trị lớn nhất trong mảng.
 22. Nhập vào giá trị X. Viết hàm xoá tất cả các phần tử có giá trị nhỏ hơn X.
 23. Nhập vào giá trị X. Viết hàm xoá phần tử có giá trị gần X nhất.
 24. Viết hàm loại bỏ tất cả các phần tử có giá trị trùng nhau (chỉ giữ lại một phần

tử trong số các phần tử trùng)
 25. Viết hàm chèn phần tử có giá trị X vào vị trí đầu tiên của 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 nhất
trong 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ị là số nguyên tố
đầu tiên trong mảng.
10


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 > ] ;

13


Các hàm thư viện – <string.h>
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[]);
 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 – <string.h> (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ự từ điển. Phân biệt
chữ hoa và thường. Trả về:
0 : nếu s1 bằng s2.
>0: nếu s1 lớn hơn s2.


Các hàm thư viện – <string.h> (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 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.

unsigned char ngay;
unsigned char thang;
int nam;
};
typedef struct ttDate DATE;


Truy cập các 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 = 5 ;
// gan ngay bang 5
 Biến con 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 con tro DATE
x -> ngay = 5 ; // gan ngay bang 5
21


 Khai báo đệ qui

struct tên_struct

màn hình.
Tính khoảng cách giữa 2 ngày và so sánh 2 ngày và cho biết kết quả.
57. Viết chương trình khai báo kiểu dữ liệu để biểu diễn một phân số. Hãy viết
hàm thực hiện
những 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ự như mảng một chiều hay ma

trận (Kiểu dữ liệu bây giờ là kiểu 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 nên 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


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status