Danh mục tài liệu

Bài giảng Bài 6a: Mảng và con trỏ

Số trang: 54      Loại file: pdf      Dung lượng: 446.25 KB      Lượt xem: 20      Lượt tải: 0    
Xem trước 6 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

"Bài giảng Bài 6a: Mảng và con trỏ" được biên soạn nhằm cung cấp các kiến thức về mảng trong C; mảng một chiều; mảng nhiều chiều; khai báo và sử dụng biến con trỏ; con trỏ và mảng; con trỏ và tham số hình thức của hàm.
Nội dung trích xuất từ tài liệu:
Bài giảng Bài 6a: Mảng và con trỏ Bài 6a - MẢNG VÀ CON TRỎNội dung bài học I. Mảng 1. Mảng trong C 2. Mảng một chiều 3. Mảng nhiều chiều II. Con trỏ 1. Khai báo và sử dụng biến con trỏ 2. Con trỏ và mảng 3. Con trỏ và tham số hình thức của hàm III. Tóm tắt nội dung bài họcI. Mảng1. Mảng trong CMảng là một tập hợp các phần tử cố định có cùng một kiểu, gọi là kiểu phần tử.Kiểu phần tử có thể là: ký tự, số, chuỗi ký tự;Ta có thể chia mảng làm 2 loại: mảng 1 chiều và mảng nhiều chiều.2. Mảng một chiềuMảng 1 chiều là một dãy các phần tử có cùng tên gọi, có 1 chỉ số để chỉ thứ tự củaphần tử đó trong dãy. Mảng một chiều còn có thể hiểu như một Vector.Khai báo mảng với số phần tử xác định (khai báo tường minh)Cú pháp: [n]Trong đó: - Tên mảng: đây là một cái tên đặt đúng theo quy tắc đặt tên của danh biểu; - n: là một hằng số nguyên, cho biết số lượng phần tử tối đa trong mảng là bao nhiêu (hay nói khác đi kích thước của mảng là gì); - Kiểu: mỗi phần tử của mảng có dữ liệu thuộc kiểu gì; - Ở đây, ta khai báo một biến mảng gồm có n phần tử, phần tử thứ nhất là tên mảng [0], phần tử cuối cùng là tên mảng[n -1];Ví dụ: int a[10]; /* Khai báo biến mảng tên a, phần tử thứ nhất là a[0], phần tử cuối cùng làa[9].*/Ta có thể coi mảng a là một dãy liên tiếp các phần tử trong bộ nhớ như sau: Vị trí 0 1 2 3 4 5 6 7 8 9 Tên phần tử a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] Hình 1: Hình ảnh mảng a trong bộ nhớKhai báo mảng với số phần tử không xác định (khai báo không tường minh)Cú pháp: Khi khai báo, không cho biết rõ số phần tử của mảng, kiểu khai báo này thườngđược áp dụng trong các trường hợp: vừa khai báo vừa gán giá trị, khai báo mảng làtham số hình thức của hàm.Vừa khai báo vừa gán giá trịCú pháp: []= {Các giá trị cách nhau bởi dấu phẩy}Nếu vừa khai báo vừa gán giá trị thì mặc nhiên C sẽ hiểu số phần tử của mảng là sốgiá trị mà chúng ta gán cho mảng trong cặp dấu {}. Chúng ta có thể sử dụng hàmsizeof() để lấy số phần tử của mảng như sau: Số phần tử=sizeof(tên mảng)/ sizeof(kiểu)Truy xuất từng phần tử của mảngMỗi phần tử của mảng được truy xuất thông qua Tên biến mảng theo sau là chỉ sốnằm trong cặp dấu ngoặc vuông [ ]. Chẳng hạn a[0] là phần tử đầu tiên của mảng ađược khai báo ở trên. Chỉ số của phần tử mảng là một biểu thức mà giá trị là kiểusố nguyên.Ví dụ 1: int a[10];Trong khai báo này, việc truy xuất các phần tử được chỉ ra trong hình 1. Chẳng hạnphần tử thứ 2 (có vị trí 1) là a[1]… 2Ví dụ 2: Vừa khai báo vừa gán trị cho 1 mảng 1 chiều các số nguyên. In mảng sốnguyên này lên màn hình.#include #include int main(){ int n,i,j,tam; int dayso[]={66,65,69,68,67,70}; n=sizeof(dayso)/sizeof(int); /*Lay so phan tu*/ printf( Noi dung cua mang ); for (i=0;i0); printf(Dang nhi phan la: ); for(i=K-1;i>=0;i--) 3 printf(%d,NhiPhan[i]); getch(); return 0;}Ví dụ 4: Nhập vào một dãy n số và sắp xếp các số theo thứ tự tăng. Có rất nhiềugiải thuật sắp xếp. Một trong số đó được mô tả như sau: Đầu tiên đưa phần tử thứnhất so sánh với các phần tử còn lại, nếu nó lớn hơn một phần tử đang so sánh thìđổi chỗ hai phần tử cho nhau rồi tiếp tục so sánh. Sau đó tiếp tục so sánh phần tửthứ hai với các phần tử từ thứ ba trở đi ... cứ tiếp tục như vậy cho đến phần tử thứn-1.#include#includeint main(){ int b[20], N, i,j,t;/* 1. Nhap so phan tu cua mang*/ printf(So phan tu thuc te cua mang N= ); scanf(%d,&N);/* 2. Nhap gia tri cac pha tu cua mang*/ for(i=0; i< N; i++) { printf(Phan tu thu %d: ,i);scanf(%d,&b[i]); }/* 3. Sap xep giam dan*/ for(i=0;i /* 4. In ket qua sau khi sap xep*/ printf(Mang SAU khi sap xep: ); for (i=0; i a[i]=a[j]; a[j]=t; }}int main(){ int b[20], N; printf(So phan tu thuc te cua mang N= ); scanf(%d,&N); Nhap(b,N); printf(Mang vua nhap: ); InMang(b,N); SapXep(b,N); /* G?i hàm s?p x?p*/ printf(Mang sau khi sap xep: ); InMang(b,N); getch(); return 0;}3. Mảng nhiều chiềuMảng nhiều chiều là mảng có từ 2 chiều trở lên. Người ta thường sử dụng mảngnhiều chiều để lưu các ma trận, các tọa độ 2 chiều, 3 chiều…Khai báo mảng 2 chiều tường minhCú pháp: Ví dụ: Người ta cần lưu trữ thông tin của một ma trận gồm các số thực. Lúc này tacó thể khai báo một mảng 2 chiều như sau: float m[8][9]; /* Khai báo mảng 2 chiều có 8*9 phần tử là số thực*/Trong trường hợp này, ta đã khai báo cho một ma trận có tối đa là 8 dòng, mỗid ...