Ôn tập: Mảng động
Thuộc phần Logic và luồng điều khiển trong hành trình C của Coddy. Bài học 37 trên 63.
Thử thách
DễViết chương trình C tạo một mảng động dựa trên đầu vào của người dùng, xử lý dữ liệu và thể hiện cách quản lý bộ nhớ đúng cách. Chương trình của bạn cần:
- Đọc số nguyên
ntừ người dùng, đại diện cho số phần tử cần lưu trữ - Dùng
malloc()cùng vớisizeof()để cấp phát động bộ nhớ cho một mảng gồmnsố nguyên - Kiểm tra xem việc cấp phát bộ nhớ có thành công không. Nếu thất bại, in ra
Memory allocation failed!và kết thúc chương trình - Nếu cấp phát thành công, in ra
Array of size [n] created successfully! - Đọc
ngiá trị số nguyên từ người dùng và lưu vào mảng đã cấp phát - Tính và in tổng của tất cả phần tử theo định dạng:
Sum: [value] - Tìm và in giá trị nhỏ nhất theo định dạng:
Minimum: [value] - Đếm số phần tử lớn hơn giá trị trung bình và in theo định dạng:
Elements above average: [count] - In tổng bộ nhớ đã sử dụng, tính bằng byte, theo định dạng:
Memory used: [bytes] bytes - Dùng
free()để giải phóng bộ nhớ - In
Memory successfully freed!để xác nhận đã dọn dẹp đúng cách
Nhớ thêm tiêu đề <stdlib.h> để dùng malloc() và free(). Thử thách này kiểm tra toàn diện hiểu biết của bạn về quản lý bộ nhớ động, từ cấp phát, sử dụng cho đến dọn dẹp đúng cách.
Ví dụ, nếu đầu vào là:
5
12 8 15 3 20Đầu ra của bạn sẽ là:
Array of size 5 created successfully!
Sum: 58
Minimum: 3
Elements above average: 3
Memory used: 20 bytes
Memory successfully freed!Thử thách toàn diện này minh họa vòng đời đầy đủ của việc quản lý bộ nhớ động, đồng thời thực hiện các thao tác xử lý dữ liệu hữu ích trên mảng đã cấp phát.
Tự làm thử
#include <stdio.h>
#include <stdlib.h>
int main() {
// Đọc số lượng phần tử
int n;
scanf("%d", &n);
// TODO: Viết code của bạn bên dưới
// 1. Dùng malloc() để cấp phát bộ nhớ cho n số nguyên
// 2. Kiểm tra việc cấp phát có thành công không
// 3. Đọc n số nguyên vào mảng
// 4. Tính tổng, tìm giá trị nhỏ nhất, đếm số phần tử lớn hơn giá trị trung bình
// 5. In ra kết quả và giải phóng bộ nhớ
return 0;
}Tất cả bài học trong Logic và luồng điều khiển
1Nền tảng về con trỏ
Con trỏ là gì?Khai báo con trỏToán tử lấy địa chỉ (&)Toán tử giải tham chiếu (*)Con trỏ NULLÔn tập: kiến thức cơ bản về con trỏ4Dự án: Công cụ xử lý văn bản đơn giản
Tổng quan dự ánĐếm ký tự2Con trỏ và mảng
Tên mảng dưới dạng con trỏPhần tử mảng và con trỏPhép toán con trỏSo sánh con trỏÔn tập: duyệt mảng bằng con trỏ5Con trỏ và hàm
Truyền theo giá trịTruyền con trỏ vào hàmSửa đổi biến qua con trỏVí dụ kinh điển: hoán đổiTruyền mảng vào hàmÔn tập: đối số con trỏ hàm3Mảng ký tự và chuỗi
Chuỗi dưới dạng mảng charKý tự kết thúc nullNhập chuỗi bằng scanfDùng strlen()Dùng strcpy()Dùng strcat()Dùng strcmp()Ôn tập: các hàm xử lý chuỗi cơ bản6Quản lý bộ nhớ
Bộ nhớ ngăn xếp và bộ nhớ heapCấp phát động với malloc()Dùng sizeof() để cấp phátKiểm tra lỗi cấp phátGiải phóng bộ nhớ với free()Cấp phát với calloc()Ôn tập: Mảng động9Dự án: Nhập thông tin liên hệ đơn giản
Định nghĩa struct ContactHàm tạo liên hệTự luyện tập: Trình biên dịch C online