Struct
Một dữ liệu struct là một nhóm các phần tử có thể có kiểu dữ liệu khác nhau được đặt cùng một tên. Các phần tử dữ liệu này được gọi là các thành viên của struct. Cấu trúc khai báo struct trong C++ như saustruct tên_struct{ type thành_viên_1; type thành_viên_2; … } tên_đối_tượng_struct; |
struct là một từ khóa.
tên_struct là tên kiểu dữ liệu struct mà ta định nghĩa.
thành_viên_1, … là các phân tử thành viên của struct.
tên_đối_tượng_struct: là tên biến thuộc kiểu tên_struct.
Hai cách khai báo sau đây là tương đương.
Ví dụ 1 | Ví dụ 2 |
struct product{ int weight; float price; } product apple; product banana, melon; | struct product{ int weight; float price; }apple, banana, melon; |
Để truy cập đến các thành viên của biến struct, ta sử dụng dấu chấm (.).
apple.weight = 200; apple.price = 2; banana.weight = 150; banana.price = 1; … |
Ví dụ, tôi mua 400gam táo, và 300g chuối. Giá của mỗi 100g táo là 1$, và 100g chuối là 0.7$. Tôi cần tính toán số tiền mà tôi cần trả
Ví dụ |
apple.weight = 400; apple.price = (float)apple.weight*1/100; banana.weight = 300; banana.price = banana.weight*0.7/100; float money = apple.price+banana.price; |
Struct là một kiểu dữ liệu do người dùng định nghĩa (nhờ vào từ khóa struct – từ khóa struct viết thường). Ta cũng có thể khai báo một mảng các phần tử thuộc kiểu struct. Ví dụ sau đây minh họa cho việc mua bán của bạn khi bạn đi siêu thị.
Bài toán: Trong siêu thị, giá táo và chuối được ấn định trên từng sản phẩm tùy thuộc chất lượng của sản phẩm,không phụ thuộc vào khối lượng của nó.
- a. Tính khối lượng hàng hóa (kg) mà người tiêu dùng mua.
- b. Nếu khách hàng mua hàng trị giá trên 10$, thì người tiêu dùng sẽ được khuyến mãi. Hãy kiểm tra xem người tiêu dùng có được khuyến mãi hay không.
Chương trình | Kết quả |
#include #define MAX 10 struct product{ int weight; float price; }apples[MAX], bananas[MAX]; /* Khai báo hàm */ void buyProducts(product pd, string name, int &weight, float &price) { int i = 0; cout<<”Buy “< while (true){ cout<<”weight and price: < cin>>pd[i].weight; cin>>pd[i].price; weight += pd[i].weight; price += pd[i].price; cout<<”Continue to buy “< char yn; cin>>yn; if((yn==’n’)||(yn==’N’)) break; else i++; } } int main() { int weight = 0; float price = 0; buyProducts(apples, “apples”, weight, price); buyProducts(bananas, “bananas”, weight, price); cout<<”Total weight: “<<(float)weight/1000< if(price>10) cout<<”Promotion”; else cout<<”No Promotion”; return 0; } | Buy apples weight and price 100 2 Continue to buy apples (y/n) ?y weight and price 200 3 Continue to buy apples (y/n) ?n Buy bananas weight and price 150 1 Continue to buy bananas (y/n) ?y weight and price 250 3 Continue to buy bananas (y/n) ?n Total weight: 0.7 No Promotion |
Mảng apples và bananas thuộc kiểu dữ liệu product. Hàm buyProducts dùng để tính toán khối lượng và tổng giá hàng hóa mỗi loại mua được. Nếu tham số products trong hàm là apples, thì nó sẽ tính tương ứng với khối lượng tổng cộng và tổng đơn giá của apples. Tương tự cho bananas. Ta sử dụng vòng lặp while vì ta không biết chính xác số lượng hàng hóa mà người dùng lựa chọn. Tuy nhiên, con số tổng không thể vượt hằng số MAX mà ta đã định nghĩa. Biến weight và price được truyền theo tham biến, do đó, trước phép cộng dồn (toán tử cộng đồng nhất +=), ta không cần khởi tạo giá trị 0 cho chúng, ta có thể khởi tạo cho chúng ngay đầu hàm main. Nếu bạn khởi tạo đầu hàm buyProducts, thì bạn chỉ có thể tính được khối lượng và giá của từng loại một mà thôi (khi đó, nếu muốn tính toán cho cả hai sản phẩm, bạn bổ sung thêm biến để lưu lại các giá trị này). Sau khi gọi hàm này hai lần, tương ứng với apples và bananas, thì biến weight lưu lại tổng khối lượng của cả hai sản phẩm, biến price lưu lại giá của cả hai sản phẩm. Khối lượng được quy đổi sang kg, nên ta sẽ chia cho 1000. Nếu bạn nhập vào là đ.v. kg, thì không cần thiết.
Trong phần thực thi chương trình, người tiêu dùng đã mua hai quả táo và hai quả chuối. Quả táo thứ nhất có khối lượng 100g và giá 2$, quả táo thứ hai – 200g và 3$. Quả chuối thứ nhất có khối lượng 150g và giá 1$, quả chuối thứ hai – 250g và 3$.
No comments:
Post a Comment