Ôn tập: Mảng các struct
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 62 trên 63.
Thử thách
DễTạo một chương trình C quản lý hệ thống kiểm kê sản phẩm bằng mảng các struct. Chương trình cần:
- Định nghĩa một
structcó tênProductvới các thành viên sau:- Một mảng ký tự
namecó kích thước 30 - Một số thực
price - Một số nguyên
stock
- Một mảng ký tự
- Viết hàm có tên
findMostExpensiveđể:- Nhận một mảng
struct Productvà một số nguyênsizelàm tham số - Trả về một số nguyên biểu thị chỉ số của sản phẩm có giá cao nhất
- Dùng vòng lặp để duyệt qua tất cả sản phẩm và so sánh giá của chúng
- Trả về chỉ số của sản phẩm đầu tiên có giá cao nhất được tìm thấy
- Nhận một mảng
- Viết hàm có tên
calculateTotalValueđể:- Nhận một mảng
struct Productvà một số nguyênsizelàm tham số - Trả về một số thực biểu thị tổng giá trị hàng tồn kho
- Tính tổng giá trị bằng cách cộng (giá × số lượng tồn kho) của từng sản phẩm
- Nhận một mảng
- Viết hàm có tên
findLowStockđể:- Nhận một mảng
struct Product, một số nguyênsizevà một số nguyênthresholdlàm tham số - Trả về một số nguyên biểu thị số lượng sản phẩm có lượng tồn kho thấp hơn ngưỡng
- Dùng vòng lặp để đếm số sản phẩm có lượng tồn kho nhỏ hơn giá trị ngưỡng
- Nhận một mảng
- Trong hàm main:
- Tạo một mảng gồm 3
struct Productcó têninventory - Nhập dữ liệu cho từng sản phẩm theo thứ tự sau: tên, giá, lượng tồn kho
- Đưa dữ liệu đầu vào vào mảng
- In thông tin của từng sản phẩm theo đúng định dạng sau:
Product [index]: [name] - Price: [price], Stock: [stock] - Gọi hàm
findMostExpensivevà in kết quả theo đúng định dạng sau:Most expensive product: [name] - Gọi hàm
calculateTotalValuevà in kết quả với đúng 2 chữ số thập phân theo định dạng sau:Total inventory value: [total_value] - Nhập một số nguyên biểu thị ngưỡng lượng tồn kho thấp
- Gọi hàm
findLowStockvới ngưỡng đó và in kết quả theo đúng định dạng sau:Products with low stock: [count] - Kiểm tra xem sản phẩm có giá cao nhất có lượng tồn kho lớn hơn 10 hay không:
- Nếu có: in
Most expensive product is well stocked - Nếu không: in
Most expensive product needs restocking
- Nếu có: in
- Tạo một mảng gồm 3
Thử thách này kiểm tra khả năng làm việc với mảng các struct, triển khai các hàm xử lý mảng struct, cũng như thực hiện nhiều phép tính và so sánh trên dữ liệu có cấu trúc. Bạn sẽ luyện tập cách truy cập phần tử mảng struct bằng chỉ số, thiết kế hàm để xử lý dữ liệu và kết hợp nhiều thao tác để phân tích thông tin hàng tồn kho.
Tự làm thử
#include <stdio.h>
#include <string.h>
// TODO: Định nghĩa struct Product ở đây
// TODO: Triển khai hàm findMostExpensive ở đây
// TODO: Triển khai hàm calculateTotalValue ở đây
// TODO: Triển khai hàm findLowStock ở đây
int main() {
// Tạo mảng gồm 3 sản phẩm
struct Product inventory[3];
// Đọc đầu vào cho từng sản phẩm
for (int i = 0; i < 3; i++) {
scanf("%s", inventory[i].name);
scanf("%f", &inventory[i].price);
scanf("%d", &inventory[i].stock);
}
// TODO: In ra thông tin của từng sản phẩm
// TODO: Tìm và in ra sản phẩm đắt nhất
// TODO: Tính và in ra tổng giá trị hàng tồn kho
// Đọc ngưỡng tồn kho thấp
int threshold;
scanf("%d", &threshold);
// TODO: Tìm và in ra các sản phẩm có tồn kho thấp
// TODO: Kiểm tra sản phẩm đắt nhất có đủ hàng tồn kho hay không
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