Ngôn ngữ lập trình - Chương 1.5 (HUST)

LI
lienhejb
0 téléchargements
32
0

Contenu du document

Page 1

goupee.vn Trường Đại Học Bách Khoa Hà Nội goupee.com Viện: Điện Tử - Viễn Thông Bộ Môn: Điện tử - Kỹ thuật máy tính Ngôn ngữ lập trình C/C++ Chương 1: Ôn tập Ngôn ngữ lập trình C cuu duong than cong . comCấu trúc dữ liệu mảng và con trỏ 1 fb.com/goupee.vn CuuDuongThanCong.com https://fb.com/tailieudientucntt

Page 2

goupee.vn goupee.com Các nội dung chính 1. Kiểu mảng 2. Kiểu con trỏ 3. Mối quan hệ giữa hai kiểu DL 4. Cấp phát bộ nhớ động cuu duong than cong . com 2 fb.com/goupee.vn CuuDuongThanCong.com https://fb.com/tailieudientucntt

Page 3

goupee.vn goupee.com 1. Kiểu mảng 1.1. Giới thiệu Một đối tượng dữ liệu kiểu mảng có các đặc trưng sau:  Số chiều : là một giá trị nguyên dương cố định nên được biểu diễn bằng một hằng số nguyên dương.  Kích thước mỗi chiều : cũng là một giá trị nguyên dương cố định nên cũng được biểu diễn bằng một hằng số nguyên dương.  Kiểu phần tử mảng : là kiểu dữ liệu của mỗi phần tử (kiểu mảng). cuu duong than cong . com 3 fb.com/goupee.vn CuuDuongThanCong.com https://fb.com/tailieudientucntt

Page 4

goupee.vn goupee.com 1. Kiểu mảng Các thao tác cơ bản trên một đối tượng dữ liệu kiểu mảng gồm có:  Khai báo : xác định các đặc trưng của mảng như số chiều, kích thước mỗi chiều, kiểu mảng.  Truy nhập vào các phần tử của mảng: theo một trong hai cách :  Truy nhập gián tiếp: bằng cách sử dụng chỉ số.  Truy nhập trực tiếp: thông qua con trỏ. cuu duong than cong . com 4 fb.com/goupee.vn CuuDuongThanCong.com https://fb.com/tailieudientucntt

Page 5

goupee.vn goupee.com 1. Kiểu mảng 1.2. Mảng một chiều a) Khai báo - Khai báo biến mảng: với cú pháp như sau: kiểu_dữ_liệu tên_biến [N] ; kiểu_dữ_liệu tên_biến [N] = {v1,v2,…,vn}; kiểu_dữ_liệu tên_biến [] = {v1,v2,…,vn}; Trong đó: N phải là một hằng số nguyên dương. v1,v2,…,vn là các giá trị khởi tạo tương ứng cho cáccuu duong than cong . com phần tử của mảng. 5 fb.com/goupee.vn CuuDuongThanCong.com https://fb.com/tailieudientucntt

Page 6

goupee.vn goupee.com 1.Kiểu mảng - Mảng một chiều VD : char s[20]; char s[10] = {‟s‟,‟t‟,‟r‟,‟i‟,‟n‟,‟g‟}; char s[10] = “string”; char s[10] = {‟s‟,‟t‟,‟r‟,‟i‟,‟n‟,‟g‟,‟\0‟}; int a[10] = {1,2,3}; int a[10] = {1,2,3,0,0,0,0,0,0,0}; int a[] = {1,2,3}; int a[3] = {1,2,3};cuu duong than cong . com int a[] ; //error 6 fb.com/goupee.vn CuuDuongThanCong.com https://fb.com/tailieudientucntt

Page 7

goupee.vn goupee.com 1.Kiểu mảng - Mảng một chiều - Khai báo hằng mảng: với cú pháp như sau: const kiểu_dữ_liệu tên_biến [N] = {v1,v2,…,vn}; kiểu_dữ_liệu const tên_biến [] = {v1,v2,…,vn};  Hằng mảng là mảng các hằng số, tức là tất cả các phần tử trong mảng đều là hằng số.  Việc khởi tạo giá trị ban đầu cho các phần tử khi khai báo là bắt buộc. VD: const int a[3] = {1,2,3}; a[1] = 5 ; //errorcuu duong than cong . com 7 fb.com/goupee.vn CuuDuongThanCong.com https://fb.com/tailieudientucntt

Page 8

goupee.vn1.Kiểu mảng goupee.com Mảng một chiều b) Truy nhập Trong phần này chúng ta chỉ xét phương pháp truy nhập gián tiếp thông qua chỉ số. - Chỉ số của một phần tử : Sau khi khai báo một đối tượng dữ liệu mảng, các phần tử trong mảng sẽ có một số hiệu duy nhất được gọi là chỉ số của phần tử đó. Chỉ số này vừa có vai trò tên gọi, vừa có vai trò xác định địa chỉ tương đối của một phần tử trong mảng. - Cách đánh chỉ số: trong C/C++ quy ước phần tử thứ i (1 i N) trong mảng có chỉ số là i-1. Tức là phần tử đầu tiên có chỉ số là 0, phần tử thứ N có chỉ số là N-1. - Truy nhập bằng chỉ số: để truy nhập vào một phần tử có chỉ số i tacuu duong than cong . com dùng cú pháp tên_mảng[i] . 8 fb.com/goupee.vn CuuDuongThanCong.com https://fb.com/tailieudientucntt

Page 9

goupee.vnVD : chương trình sắp xếp một dãy N số theogoupee.com trật tự tăng dần bằng giải thuật sắp xếp nổi bọt main(){ const int N = 200 ; float a[N] ; int i,j ; …Nhập giá trị cho mảng a ; for (i=0;i<N-1;i++) for (j=0;j<N-i-1;j++) if (a[j]>a[j+1]) { float tg = a[j]; a[j]=a[j+1]; cuu duong than cong . coma[j+1] =tg; } …In kết quả } 9 fb.com/goupee.vn CuuDuongThanCong.com https://fb.com/tailieudientucntt

Page 10

goupee.vn goupee.com 1. Kiểu mảng 1.3. Mảng hai chiều a) Khai báo - Khai báo biến mảng : với cú pháp như sau: kiểu_dữ_liệu tên_biến [M][N] ; kiểu_dữ_liệu tên_biến [M][N] = {v1,v2,…,vm*n}; kiểu_dữ_liệu tên_biến [][N] = {v1,v2,…,vm*n}; - Khai báo hằng mảng : tương tự như hằng mảng 1 chiều, việc khai báo hằng mảng hai chiều sẽ phải thêm từ khoácuu duong than cong . comconst và khởi tạo giá trị ban đầu cho các phần tử của mảng. 10 fb.com/goupee.vn CuuDuongThanCong.com https://fb.com/tailieudientucntt

Page 11

goupee.vn goupee.com VD : khai báo mảng 2 chiều char s [2][3]; int a[][3] = {1,2,3,4,5}; int a[2][3] = {1,2,3,4,5,0}; int a[2][3] = {{1,2},{3,4,5}}; int a[2][3] = {{1,2,0},{3,4,5}}; int a[2][] ; //error int a[2][] = {1,2,3,4,5}; //error cuu duong than cong . com 11 fb.com/goupee.vn CuuDuongThanCong.com https://fb.com/tailieudientucntt

Page 12

goupee.vn1. Kiểu mảng goupee.com Mảng hai chiều b) Truy nhập - Việc truy nhập vào các phần tử của mảng hai chiều kích thước MxN cũng sử dụng chỉ số với quy ước về cách đánh chỉ số như sau: phần tử thứ nhất có chỉ số là (0,0) phần tử thứ hai có chỉ số (0,1) … phần tử thứ N có chỉ số (0,N-1) phần tử thứ N+1 có chỉ số (1,0) … phần tử thứ MxN có chỉ số (M-1,N-1) - Để truy nhập vào phần tử có chỉ số (i,j) ta dùng cú phápcuu duong than cong . comtên_mảng[i][j]. - Từ việc khai báo và sử dụng mảng một chiều và hai chiều,chúng ta có thể dễ dàng suy ra cách khai báo và sử dụng các mảng nhiều chiều hơn. 12 fb.com/goupee.vn CuuDuongThanCong.com https://fb.com/tailieudientucntt

Page 13

goupee.vn goupee.com 1. Kiểu mảng 1.4. Tự định nghĩa kiểu dữ liệu mới kiểu mảng Trong C/C++ cho phép người sử dụng có thể tự định nghĩa các kiểu dữ liệu mới dựa trên các kiểu dữ liệu đã có hay định nghĩa lại tên của các kiểu dữ liệu đã có bằng từ khoá typedef (viết tắt của type definition). - Cú pháp của lệnh typedef: typedef định_nghĩa_kiểu tên_kiểu ; - Trong đó: định_nghĩa_kiểu là phần xác định loại, cấu trúc của kiểu dữ liệu mới. Nó thường là định nghĩa cấu trúc các kiểu dữ liệu mới như các cấu trúc mảng, cấu trúc bản ghi (struct)...cuu duong than cong . com 13 fb.com/goupee.vn CuuDuongThanCong.com https://fb.com/tailieudientucntt

Page 14

goupee.vn1. Kiểu mảng goupee.com Tự định nghĩa kiểu dữ liệu mới kiểu mảng VD: định nghĩa lại kiểu int với tên mới là integer như trong Pascal. typedef int integer ; integer i, j ; - Định nghĩa một kiểu mảng 1 chiều: typedef kiểu_dữ_liệu tên_kiểu[N] ; VD: typedef char ten[30] ; ten t1=”An”,t2=”Binh”,t3; Nếu không sử dụng định nghĩa kiểu mới ta phải khai báo như sau:cuu duong than cong . com char t1[30], t2[30] , t3[30] ; 14 fb.com/goupee.vn CuuDuongThanCong.com https://fb.com/tailieudientucntt

Page 15

goupee.vn1. Kiểu mảng goupee.com Tự định nghĩa kiểu dữ liệu mới kiểu mảng - Định nghĩa một kiểu mảng hai chiều: typedef kiểu_dữ_liệu tên_kiểu[M][N] ; VD: typedef float matran[M][N] ; matran A, B - Kiểu mảng hai chiều có thể được định nghĩa thông qua kiểu mảng một chiều như sau: typedef float f1[N] ; typedef f1 f2[M] ;cuu duong than cong . com 15 fb.com/goupee.vn CuuDuongThanCong.com https://fb.com/tailieudientucntt

Page 16

goupee.vn goupee.com 2. Kiểu con trỏ Giới thiệu Là đối tượng DL mà giá trị của nó là địa chỉ của các đối tượng khác (có thể là chính nó) trong bộ nhớ P A P = &A cuu duong than cong . com 16 fb.com/goupee.vn CuuDuongThanCong.com https://fb.com/tailieudientucntt

Page 17

goupee.vn goupee.com 2. Kiểu con trỏ Vai trò: con trỏ được sử dụng trong một số ứng dụng sau:  Quản lý các đối tượng DL động và cấu trúc lưu trữ động (như CTLT móc nối) để cài đặt lưu trữ các CTDL động như danh sách, cây,…  Định vị, truy nhập vào các thành phần của các kiểu DL có cấu trúc nhằm tăng tốc độ thực hiện và độ linh hoạt trong xử lý. Ta hay dùng con trỏ để truy nhập vào mảng, bản ghi (struct).  Tổ chức các tham số đóng vai trò đầu ra của các chương trình con (hàm con). Trong C, điều này là bắt buộc, còn trong C++ ta có thể dùng con trỏ hoặc kiểu tham chiếu. cuu duong than cong . com 17 fb.com/goupee.vn CuuDuongThanCong.com https://fb.com/tailieudientucntt

Page 18

goupee.vn goupee.com 2. Kiểu con trỏ - Khai báo Khai báo biến con trỏ T * var; T * var1, *var2; Trong đó: T là kiểu DL bất kì, thậm chí là kiểu con trỏ. VD: char * s; int i=20; int * pi = &i, *pj=pi; float * pf[20]; //Mảng các con trỏ kiểu float float (*pf)[20]; //Con trỏ kiểu mảng void * p; cuu duong than cong . com//Con trỏ tổng quát. 18 fb.com/goupee.vn CuuDuongThanCong.com https://fb.com/tailieudientucntt

Page 19

goupee.vn goupee.com 2. Kiểu con trỏ - Khai báo Khai báo hằng con trỏ const T * cons1 = <exp>; //Con trỏ đến một hằng số T * const cons2 = <exp> ; //Hằng con trỏ const T * const cons3 = <exp>; //Hằng con trỏ trỏ đến hằng số const char* pc= “abcd” ; const char* const cpc = “abcd”; char * s = “fgh” ; cpc[1] = “f” ; //error pc[1] = „f‟; //error cpc = “efgh”; //error pc = “efgh”; //OK; cpc = s ; //error pc = s ; //OK char* const cp = “abcd”;cuu duong than cong . com cp[1] = “f” ; //OK cp = “efgh”; //error cp = s ; //error 19 fb.com/goupee.vn CuuDuongThanCong.com https://fb.com/tailieudientucntt

Page 20

goupee.vn goupee.com Các thao tác cơ bản trên kiểu con trỏ  Phép gán  Truy nhập vào đối tượng được trỏ  Phép tăng/giảm địa chỉ cuu duong than cong . com 20 fb.com/goupee.vn CuuDuongThanCong.com https://fb.com/tailieudientucntt

Affichage des 20 premières pages. Téléchargez le document pour le voir en entier.

Commentaires (0)

Se connecter pour rejoindre la discussion

Aucun commentaire pour le moment. Soyez le premier !