Hướng Dẫn Khai Báo Mảng Trong C - Chương 11

Khám phá nội dung chương 11 của Htmt và Nnc, cung cấp kiến thức sâu sắc về các khái niệm và ứng dụng quan trọng trong lĩnh vực này.

Người đăng

Ẩn danh

Thể loại

tài liệu
60
5
0

Phí lưu trữ

30 Point

Mục lục chi tiết

11. CHƯƠNG 11: MẢNG

11.1. Khái niệm

11.2. Khai báo mảng

11.2.1. Mảng một chiều

11.2.2. Mảng nhiều chiều

11.3. Khởi động trị của mảng

11.4. Mảng là đối số của hàm, mảng là biến toàn cục

11.5. Các ứng dụng

11.5.1. Sắp xếp mảng

11.5.1.1. Bubble sort
11.5.1.2. Quick sort
11.5.1.3. Select sort

11.5.2. Stack

11.6. Bài tập cuối chương

Tóm tắt

I. Hướng Dẫn Khai Báo Mảng Trong C Tổng Quan Chi Tiết

Mảng là một cấu trúc dữ liệu quan trọng trong ngôn ngữ lập trình C. Nó cho phép lưu trữ nhiều giá trị cùng loại trong một biến duy nhất. Việc khai báo mảng trong C có thể thực hiện với mảng một chiều và mảng đa chiều. Mỗi phần tử trong mảng được truy cập thông qua chỉ số, bắt đầu từ 0. Điều này giúp lập trình viên dễ dàng quản lý và thao tác với dữ liệu.

1.1. Khái Niệm Cơ Bản Về Mảng Trong C

Mảng là một biến cấu trúc có nhiều phần tử cùng kiểu. Mỗi phần tử được xác định bằng chỉ số, cho phép truy cập và thao tác dễ dàng.

1.2. Các Loại Mảng Trong C

Có hai loại mảng chính trong C: mảng một chiều và mảng đa chiều. Mỗi loại có cách khai báo và sử dụng khác nhau.

II. 5 Phương Pháp Khai Báo Mảng Một Chiều Trong C

Khai báo mảng một chiều trong C rất đơn giản. Cú pháp cơ bản là: kiểu tên_mảng[kích_thước];. Kích thước phải là một hằng số nguyên, xác định số lượng phần tử trong mảng. Mảng một chiều có thể chứa các giá trị như số nguyên, số thực, hoặc ký tự.

2.1. Cú Pháp Khai Báo Mảng Một Chiều

Cú pháp khai báo mảng một chiều là: int a[10]; cho phép lưu trữ 10 số nguyên.

2.2. Khởi Tạo Giá Trị Cho Mảng Một Chiều

Có thể khởi tạo giá trị cho mảng ngay khi khai báo, ví dụ: int a[5] = {1, 2, 3, 4, 5};.

III. Ứng Dụng Mảng Đa Chiều Trong C Hướng Dẫn Chi Tiết

Mảng đa chiều cho phép lưu trữ dữ liệu trong nhiều chiều, thường được sử dụng để biểu diễn ma trận. Cú pháp khai báo mảng đa chiều là: kiểu tên_mảng[kích_thước1][kích_thước2];. Mảng đa chiều có thể được sử dụng trong nhiều ứng dụng như xử lý hình ảnh, ma trận toán học.

3.1. Cú Pháp Khai Báo Mảng Đa Chiều

Cú pháp khai báo mảng hai chiều là: int a[3][4]; cho phép lưu trữ 3 hàng và 4 cột.

3.2. Truy Cập Phần Tử Trong Mảng Đa Chiều

Phần tử trong mảng đa chiều được truy cập bằng cách sử dụng chỉ số hàng và cột, ví dụ: a[1][2].

IV. Vấn Đề Thường Gặp Khi Khai Báo Mảng Trong C

Khi khai báo mảng, lập trình viên có thể gặp một số vấn đề như kích thước mảng quá lớn hoặc không đủ bộ nhớ. Điều này có thể dẫn đến lỗi 'Array size too large'. Việc quản lý bộ nhớ là rất quan trọng khi làm việc với mảng.

4.1. Lỗi Kích Thước Mảng Quá Lớn

Khi khai báo mảng với kích thước lớn, có thể gặp lỗi do thiếu bộ nhớ. Cần cân nhắc kích thước hợp lý.

4.2. Quản Lý Bộ Nhớ Khi Sử Dụng Mảng

Sử dụng mảng cần chú ý đến việc cấp phát và giải phóng bộ nhớ để tránh rò rỉ bộ nhớ.

V. Kết Luận Về Khai Báo Mảng Trong C

Khai báo mảng trong C là một kỹ năng cơ bản nhưng rất quan trọng. Việc hiểu rõ cách khai báo và sử dụng mảng sẽ giúp lập trình viên phát triển các ứng dụng hiệu quả hơn. Mảng không chỉ giúp tổ chức dữ liệu mà còn tối ưu hóa hiệu suất chương trình.

5.1. Tương Lai Của Mảng Trong Lập Trình C

Mảng sẽ tiếp tục là một phần quan trọng trong lập trình C, đặc biệt trong các ứng dụng yêu cầu xử lý dữ liệu lớn.

5.2. Khuyến Nghị Khi Sử Dụng Mảng

Nên sử dụng mảng một cách hợp lý và kết hợp với các cấu trúc dữ liệu khác để tối ưu hóa hiệu suất.

Tóm tắt và mô tả trên trang này được tạo với sự hỗ trợ của AI. Nếu bạn thấy nội dung không chính xác hoặc có vấn đề, vui lòng Báo lỗi nội dung.

15/07/2025

Trích đoạn nội dung tài liệu

CHÖÔNG 11 MAÛNG CHÖÔNG 11 MAÛNG 11.2 Khai baùo maûng 11.3 Khôûi ñoäng trò cuûa maûng 11.4 Maûng laø ñoái soá cuûa haøm maûng laø bieán toaøn cuïc 11.5 Caùc öùng duïng Baøi taäp cuoái chöông CHÖÔNG 11 MAÛNG 11.1 KHAÙI NIEÄM Maûng laø moät bieán caáu truùc trong ñoù coù nhieàu phaàn töû cuøng kieåu, moãi phaàn töû laø moät bieán thaønh phaàn cuûa maûng. Moãi bieán thaønh phaàn naøy laø moät bieán bình thöôøng vaø coù cöôùc soá (subscript) ñeå phaân bieät giöõa phaàn töû naøy vaø phaàn töû kia. Nhö vaäy, ñeå truy xuaát moät phaàn töû cuûa maûng, ta caàn bieát ñöôïc cöôùc soá cuûa noù. Trong boä nhôù, caùc phaàn töû cuûa maûng ñöôïc caáp phaùt oâ nhôù coù ñòa chæ lieân tieáp nhau.

CHÖÔNG 11 MAÛNG 11.1 KHAÙI NIEÄM C cuõng cho pheùp laäp trình vieân khai baùo vaø laøm vieäc treân maûng moät chieàu (singledimensional array) vaø maûng nhieàu chieàu (multidimensional array). Soá phaàn töû treân moät chieàu ñöôïc goïi laø kích thöôùc cuûa chieàu ñoù. CHÖÔNG 11 MAÛNG 11.2 KHAI BAÙO MAÛNG 1- Maûng moät chieàu Cuù phaùp khai baùo maûng moät chieàu nhö sau: kieåu teân_maûng [kích_thöôùc]; Vôùi kích_thöôùc laø moät haèng soá nguyeân cuï theå, cho bieát soá phaàn töû trong chieàu ñang xeùt. Trong C, cöôùc soá caùc phaàn töû cuûa maûng luoân ñi töø 0 trôû ñi, neân maûng moät chieàu coù n phaàn töû thì cöôùc soá caùc phaàn töû cuûa maûng laø 0,.

CHÖÔNG 11 MAÛNG 11.2 KHAI BAÙO MAÛNG 1- Maûng moät chieàu Ví dụ: Cho khai báo sau: int a[10], x; Như vậy mảng a có 10 phần tử int, các phần tử đó là a[0], a[1], …, a[9]. Các phần tử này được cấp phát vị trí trong bộ nhớ như hình 12. CHÖÔNG 11 MAÛNG 11.2 KHAI BAÙO MAÛNG 1- Maûng moät chieàu Lệnh a[5] = a[3] + 1; có mã LC-3 như sau: ADD R0, R5, #-9 ; R0 = &a[0]: địa chỉ của a[0] LDR R1, R0, #3 ; R1 = a[3] ADD R1, R1, #1 ; tăng 1 STR R1, R0, #5 ; a[5] = R1, tức a[5] = a[3] + 1. CHÖÔNG 11 MAÛNG 11.2 KHAI BAÙO MAÛNG 1- Maûng moät chieàu Lệnh a[5] = 7; có mã LC-3 như sau: AND R0, R0, #0 ADD R0, R0, #7 ; R0 = 7 ADD R1, R5, #-9 ; R1 = &a[0]: địa chỉ của phần tử a[0] STR R0, R1, #5 ; a[5] = R0 CHÖÔNG 11 MAÛNG 11.2 KHAI BAÙO MAÛNG 1- Maûng moät chieàu Còn lệnh a[x+1] = a[x] + 2; với x là biến đang chứa trị là chỉ số nào đó cần làm việc, có mã LC-3 như sau: LDR R0, R5, #-10 ; R0 = x ADD R1, R5, #-9 ; R1 = &a[0] ADD R1, R0, R1 ; R1 = &a[x] LDR R2, R1, #0 ; R2 = a[x] ADD R2, R2, #2 ; cộng thêm 2 CHÖÔNG 11 MAÛNG 11.2 KHAI BAÙO MAÛNG 1- Maûng moät chieàu LDR R0, R5, #-10 ; R0 = x ADD R0, R0, #1 ; R0 = x+1 ADD R1, R5, #-9 ; R1 = &a[0] ADD R1, R0, R1 ; R1 = &a[x+1] STR R2, R1, #0 ; a[x+1] = R2 CHÖÔNG 11 MAÛNG 11.2 KHAI BAÙO MAÛNG 1- Maûng moät chieàu Ví duï : Vieát chöông trình nhaäp moät daõy caùc soá nguyeân, tìm soá lôùn nhaát trong daõy soá ñoù.h> main() { int i, n, max, vtmax; int a[100]; clrscr(); CHÖÔNG 11 MAÛNG 11.2 KHAI BAÙO MAÛNG printf ("Chuong trinh thu mang \n"); printf ("Moi ban nhap so phan tu cua mang: "); scanf ("%d", &n); printf ("Moi nhap cac phan tu cua mang:"); for (i = 0; i < n; i++) scanf ("%d", &a[i]); max = a[0]; vtmax = 0; for (i = 1; i < n; i++) if (max < a[i]) { max = a[i]; vtmax = i; } printf ("Phan tu %d co tri lon nhat la %d\n", vtmax, max); getch() } CHÖÔNG 11 MAÛNG 11.2 KHAI BAÙO MAÛNG 2- Maûng nhieàu chieàu Cuù phaùp khai baùo maûng nhieàu chieàu nhö sau: kieåu teân_maûng [kích_thöôùc_chieàu1] [kích_thöôùc_chieàu2] [.]; Khi dòch C baùo loãi Array size too large ? CHÖÔNG 11 MAÛNG 11.2 KHAI BAÙO MAÛNG 2- Maûng nhieàu chieàu Ví duï: Khai baùo maûng hai chieàu a int a[4][3]; Nhö vaäy maûng a coù 4x3 phaàn töû int, caùc phaàn töû ñoù laø a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2] a[2][0] a[2][1] a[2][2] a[3][0] a[3][1] a[3][2] CHÖÔNG 11 MAÛNG 11.2 KHAI BAÙO MAÛNG 2- Maûng nhieàu chieàu Caùc phaàn töû naøy ñöôïc saép trong boä nhôù theo thöù töï a[0][0], a[0][1], a[0][2], a[1][0], a[1][1], a[1][2], a[2][0], a[2][1], a[2][2],.

CHÖÔNG 11 MAÛNG 11.2 KHAI BAÙO MAÛNG 2- Maûng nhieàu chieàu Ví duï: Vieát chöông trình taïo vaø in ra maøn hình ma traän coù daïng sau: 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 CHÖÔNG 11 MAÛNG 11.2 KHAI BAÙO MAÛNG 2- Maûng nhieàu chieàu #include <stdio.h> #define MAX 20 main() { int i, j; int a[MAX][MAX]; int n; clrscr(); printf ("Chuong trinh thu mang \n"); printf ("Moi ban nhap cap cua ma tran: "); CHÖÔNG 11 MAÛNG 11.2 KHAI BAÙO MAÛNG 2- Maûng nhieàu chieàu scanf ("%d", &n); for (i = 0; i < n; i++) for (j = 0; j < n; j++) if (i == j) a[i][i] = 1; else a[i][j] = 0; printf ("Ma tran duoc tao la: \n"); for (i = 0; i < n; i++) { for (j = 0; j < n; j++) printf ("%d", a[i][j]); printf(“\n”);} getch () } } CHÖÔNG 11 MAÛNG 11.2 KHAI BAÙO MAÛNG 2- Maûng nhieàu chieàu Ví duï : Cho các khai báo sau #define MAX 4 int a[MAX][MAX]; int n = 3;/* cấp thực sự cần làm việc của ma trận */ int i, j; /* biến là chỉ số mảng */ /* Nhập trị cho mảng*/ for (i = 0; i < n; i++) for (j = 0; j < n; j++) scanf (“%d”, &a[i][j]); CHÖÔNG 11 MAÛNG 11.2 KHAI BAÙO MAÛNG 2- Maûng nhieàu chieàu Giả sử trị nhập vào là: 0 1 2 3 4 5 6 7 8 9 10 11 Mảng a[3][3], là một phần của ma trận a[MAX][MAX] CHÖÔNG 11 MAÛNG 11.2 KHAI BAÙO MAÛNG 2- Maûng nhieàu chieàu a[0][0] a[0][1] a[0][2] a[0][3] a[1][0] a[1][1] a[1][2] a[1][3] a[2][0] a[2][1] a[2][2] a[2][3] a[3][0] a[3][1] a[3][2] a[3][3] CHÖÔNG 11 MAÛNG 11.2 KHAI BAÙO MAÛNG 2- Maûng nhieàu chieàu Ví duï : Coù khai baùo int a[10]; maø ta laïi thöïc hieän leänh for (i = 0; i<= 10; i++) a[i] = i; thì trong thöïc teá khoâng coù phaàn töû a[10], nhöng vieäc gaùn cuõng ñöôïc thöïc hieän, vaø oâ nhôù keá tieáp phaàn töû a[9] ñöôïc gaùn trò. CHÖÔNG 11 MAÛNG 11.2 KHAI BAÙO MAÛNG 2- Maûng nhieàu chieàu C khoâng coù söï phaân bieät giöõa moät bieán chuoãi vaø moät maûng caùc kyù töï. Caû hai tröôøng hôïp ñeàu ñöôïc khai baùo char teân [chieàu_daøi]; Ñieåm khaùc bieät? CHÖÔNG 11 MAÛNG 11.2 KHAI BAÙO MAÛNG 2- Maûng nhieàu chieàu Haøm gets() cho pheùp nhaäp moät chuoãi coù teân ñeå trong ñoái soá haøm naøy. Ví duï : char s[20]; gets (s); CHÖÔNG 11 MAÛNG 11.2 KHAI BAÙO MAÛNG 2- Maûng nhieàu chieàu Haøm puts() cho pheùp xuaát moät chuoãi coù teân ñeå trong ñoái soá haøm naøy ra maøn hình.

Ví duï : char s[20]; puts (s); Caû hai gets() vaø puts() ñeàu coù prototype naèm trong file stdio. CHÖÔNG 11 MAÛNG 11.2 KHAI BAÙO MAÛNG 2- Maûng nhieàu chieàu Ví duï : Chöông trình truy xuaát chuoãi duøng haøm chuaån cuûa C. CHÖÔNG 11 MAÛNG 11.2 KHAI BAÙO MAÛNG 2- Maûng nhieàu chieàu #include <stdio.h> main() { char s[100]; clrscr(); printf ("Moi nhap mot chuoi: "); gets (s); printf ("Chuoi da nhap la: "); puts (s); getch(); } CHÖÔNG 11 MAÛNG 11.3 KHÔÛI ÑOÄNG TRÒ CUÛA MAÛNG Khi khai baùo maûng laø bieán toaøn cuïc hoaëc tónh thì maûng coù theå ñöôïc khôûi ñoäng trò baèng caùc giaù trò haèng. Ví duï : int a[5] = {1, 3, 5, 7, 9}; int b[10] = {1, 2, 3, 4, 5}; Neáu soá trò ít hôn soá phaàn töû maûng thì caùc phaàn töû coøn laïi khoâng ñöôïc khôûi ñoäng trò, coù nghóa caùc phaàn töû naøy coù trò laø 0.

CHÖÔNG 11 MAÛNG 11.3 KHÔÛI ÑOÄNG TRÒ CUÛA MAÛNG Ví duï: double a[] = {1.34}; char s[30] = “I go to school \n”; char ch[] = “Hello, World!”; CHÖÔNG 11 MAÛNG 11.3 KHÔÛI ÑOÄNG TRÒ CUÛA MAÛNG Ví duï: Cho khai báo mảng và khởi động trị như sau: int a[][3] = { { 11, 12, 13}, { 21, 22, 23}, { 31, 32, 33} }; Với khai báo này, mảng a sẽ có 9 phần tử trong 3 hàng CHÖÔNG 11 MAÛNG 11.3 KHÔÛI ÑOÄNG TRÒ CUÛA MAÛNG Ví duï : Chuoãi char s[] = “Hello”; H e l l o \0 char ch[] = {'H', 'e', 'l', 'l', 'o'}; H e l l o CHÖÔNG 11 MAÛNG 11.4 MAÛNG LAØ ÑOÁI SOÁ CUÛA HAØM MAÛNG LAØ BIEÁN TOAØN CUÏC Khi khai baùo ñoái soá cuûa haøm laø maûng, kích thöôùc cuûa chieàu ñaàu tieân cuûa maûng khoâng caàn xaùc ñònh cuï theå. Tuy nhieân töø chieàu thöù hai trôû ñi, kích thöôùc maûng phaûi xaùc ñònh. Teân maûng chính laø ñòa chæ cuûa maûng, neân vieäc truyeàn teân maûng cho haøm chính laø truyeàn ñòa chæ thöïc cuûa maûng neân moïi thay ñoåi treân maûng trong haøm cuõng chính laø thay ñoåi treân maûng thaät (truyeàn theo kieåu tham soá bieán). CHÖÔNG 11 MAÛNG 11.4 MAÛNG LAØ ÑOÁI SOÁ CUÛA HAØM MAÛNG LAØ BIEÁN TOAØN CUÏC Ví duï 12.16 (SGT) CHÖÔNG 11 MAÛNG 11.4 MAÛNG LAØ ÑOÁI SOÁ CUÛA HAØM MAÛNG LAØ BIEÁN TOAØN CUÏC Ví dụ 12.17: Xét chương trình tính trung bình của các số như sau: #include <stdio.h> #define MAX 10 int Average (int values[]); main() { int index; int mean; int a[MAX]; CHÖÔNG 11 MAÛNG 11.4 MAÛNG LAØ ÑOÁI SOÁ CUÛA HAØM MAÛNG LAØ BIEÁN TOAØN CUÏC printf (“Mời nhập %d số nguyên: ”, MAX); // Nhập trị cho mảng for (index = 0; index < MAX; index++) scanf (“%d”, &a[index]); mean = Average (a); printf (“Trung bình của các số này là %d.\n”, mean); } CHÖÔNG 11 MAÛNG 11.4 MAÛNG LAØ ÑOÁI SOÁ CUÛA HAØM MAÛNG LAØ BIEÁN TOAØN CUÏC int Average (int values[]) { int index; int sum = 0; for (index = 0; index < MAX; index++) sum += values[index]; return (sum/MAX); } CHÖÔNG 11 MAÛNG 11.4 MAÛNG LAØ ÑOÁI SOÁ CUÛA HAØM MAÛNG LAØ BIEÁN TOAØN CUÏC CHÖÔNG 11 MAÛNG 11.4 MAÛNG LAØ ÑOÁI SOÁ CUÛA HAØM MAÛNG LAØ BIEÁN TOAØN CUÏC #include <stdio.h> #define MAX 10 int Average (int values[], int number); main() { int index; int mean; int n; int a[MAX]; CHÖÔNG 11 MAÛNG 11.4 MAÛNG LAØ ÑOÁI SOÁ CUÛA HAØM MAÛNG LAØ BIEÁN TOAØN CUÏC // Nhập số số nguyên cần làm việc do { printf (“Bạn muốn làm việc với bao nhiêu số nguyên? (0 < n <= 10): ”); scanf (“%d”, &n); if (n <= 0 || n > 10) printf (“Sai trị.\n”); } while (n <= 0 || n > 10); printf (“Mời nhập %d số nguyên: ”, n); CHÖÔNG 11 MAÛNG 11.4 MAÛNG LAØ ÑOÁI SOÁ CUÛA HAØM MAÛNG LAØ BIEÁN TOAØN CUÏC // Nhập trị cho mảng for (index = 0; index < n; index++) scanf (“%d”, &a[index]); mean = Average (a, n); printf (“Trung bình của các số này là %d.\n”, mean); } CHÖÔNG 11 MAÛNG 11.4 MAÛNG LAØ ÑOÁI SOÁ CUÛA HAØM MAÛNG LAØ BIEÁN TOAØN CUÏC int Average (int values[], int number) { int index; int sum = 0; for (index = 0; index < number; index++) sum + = values[index]; return (sum/number); } CHÖÔNG 11 MAÛNG 11.5 CAÙC ÖÙNG DUÏNG 11.

Nội dung được bảo vệ bản quyền — Tải xuống đầy đủ