mang pascalchương 5 mảng con trỏ tham chiếubài tập kiểu mảng 1 chiều pascalchương trình phát thanh măng non tháng 5các bài tập về mảng 1 chiều pascalxóa các phần tử trùng nhau trong mảng 1 chiều pascalđếm số nguyên tố trong mảng 1 chiều pascalsắp xếp mảng tăng dần pascal
NGÔN NGỮ C Chương 5: KiỂU MẢNG (ARRAY TYPE) Giáo viên: Tạ Thúc Nhu Khoa CNTT trường ĐH Lạc Hồng I- Tổng Quan: • Mảng tập hợp nhiều biến nhớ có kiểu, gọi kiểu phần tử mảng, cấp phát vị trí liên tục nhớ • Mỗi phần tử (biến nhớ) mảng xác định dựa tên mảng số xác định vị trí phần tử mảng • Chỉ số phần tử mảng số ngun khơng âm • Số lượng số dùng để xác định phần tử mảng gọi số chiều mảng Khai báo mảng N chiều: [S1][S2]…[Sn]; Mã hóa II-MẢNG MỘT CHIỀU Mã hóa 1- Khái niệm: • Mảng chiều tập biến nhớ kiểu, phần tử xác định tên mảng số trở • Ví dụ: Mảng A có phần tử thuộc kiểu số nguyên: A Chỉ số phần tử Tên phần tử 2 1 A[0] A[1] A[2] A[3] A[4] A[5] Mã hóa 2- Khai Báo Mảng Chiều: a) Khai báo trực tiếp: [] = {gt1, , gtn} ; • Nếu số giá trị khởi đầu < số phần tử phần tử lại gán giá trị khởi đầu = b) Khai báo gián tiếp: – Định nghĩa kiểu mảng chiều mới: typedef []; – Khai báo mảng chiều thuộc kiểu mảng định nghĩa: = {gt1, , gtn} ; Mã hóa 3- Một Số Thao Tác Trên Mảng Chiều: Mã hóa 3.1 Địa vùng nhớ phần tử mảng chiều là: Cách 1: Dùng phép toán lấy địa &TênMảng[ chỉsố] Cách 2: Dùng phép toán cộng địa TênMảng + chỉsố • Tên mảng chứa địa phần tử mảng Nhập giá trị cho phần tử mảng ta sử dụng cách sau: – scanf("mã định dạng", &TênMảng[ chỉsố ] ); – scanf("mã định dạng", TênMảng + chỉsố ); Mã hóa 3.2 Duyệt qua phần tử mảng: Sử dụng vòng lặp thay đổi số: • Từ đến N-1 • Hoặc từ N-1 giảm đến Ví dụ: Viết chương trình nhập N số thực (N A[ i ] thay cs = i Phần tử cs có giá trị A[cs] nhỏ End 10 Mã hóa 2- Khai báo mảng hai chiều: a) Khai báo trực tiếp: TênMảng[SoDong][SoCot] = {giá trị phần tử}; Ví dụ: float B[4][5] = {{9, 5, 2, 2}, {5, 1, 8, 1}, {9, 7, 5, 7} }; – B mảng chiều – B có phần tử B[0], ,B[3] – Mỗi phần tử B[d] mảng chiều có phần tử B[d][0], B[d][1], B[d][2], B[d][3], B[d][4] biến thuộc kiểu số thực • Có thể khai báo khơng định tổng số dòng: Khi tổng số dòng phụ thuộc vào số dòng gán TênMảng[ ] [SoCot]= {giá trị phần tử}; 23 Mã hóa 2- Khai báo mảng hai chiều: (tt) b) Khai báo gián tiếp: • Định nghĩa kiểu mảng chiều: typedef Tênkiểumảng[SốDòng][SốCột]; • Khai báo mảng thuộc kiểu định nghĩa: TênKiểuMảng TênMảng ; Ví dụ: Khai báo kiểu mảng chiều có dòng, cột chứa 20 biến số thực typedef float BangThuc[4][5]; BangThuc B = {{9, 5, 2, 2}, {5, 1, 8, 1}, {9, 7, 5, 7} }; 24 Mã hóa 3- Duyệt qua phần tử mảng chiều: for ( d = 0; d < SD; d++) 2 7 { for (c = 0; c < SC; c++) { Xử lý phần tử B[ d ][ c ] } } 25 Mã hóa Ví dụ: Nhập In mảng chiều for ( d = 0; d < SD; d++) for (c = 0; c < SC; c++) { printf(“PT[%d][%d]=“, c, d); scanf(“%f”, &B[ d ][ c ] ); } #include #include #define SoDong 20 #define SoCot 10 //Khai bao kieu mang chieu printf("Bang so da nhap:\n"); typedef float BangThuc[SoDong][SoCot]; for ( d = 0; d < SD; d++) { void main() { BangThuc B; int SD, SC; int d, c; for (c = 0; c < SC; c++) printf(“ %f “, B[d] [c]); printf("\n"); printf("\nNhap So dong va so cot :"); } scanf("%d %d", &SD, &SC); } printf("Nhap gia tri cac phan tu:\n"); 26 Mã hóa 4- Hàm có tham số mảng chiều: Khai báo tham số hình thức mảng chiều: Cách 1: Khai báo trực tiếp KiểuHàm TênHàm( KiểuPT TênMảng[ ][SoCot], ) Chú ý: Không cần khai báo số dòng, số cột phải với số cột mảng thực khai báo nơi gọi hàm Cách 2: Khai báo gián tiếp qua kiểu mảng: typedef KiểuPT TênKiểuMảng[SoDong][SoCot]; KiểuHàm TênHàm( TênKiểuMảng TênMảng, ) Gọi hàm truyền mảng: Tham số thực phải tên mảng: TênHàm( TênMảng, ) 27 Mã hóa Ví dụ: Viết chương trình cộng ma trận MxN (M, N