50 © 2004, HOÀNG MINH SƠN Chương 2: Các yếutố cơ bảncủaC vàC++ Tóm lượcvề cấutrúc(struct) Cấu trúc (struct) ₫ượcsử dụng ₫ể nhóm các dữ liệuliênquan mô tả một ₫ốitượng, các dữ liệucóthể cùng hoặc khác kiểu Định nghĩakiểucấutrúcbằng cách khai báo tên các biến thành viên. Định nghĩakiểucấutrúcchưaphảilà₫ịnh nghĩa các biếncụ thể, vì thế không ₫ược ₫ặt giá trị₫ầuchocácbiến Kích cỡ củacấutrúc>= tổng kích cỡ các thành viên Truy cậpmộ tbiếncấu trúc thông qua tên biến, toán tử (.) và tên biến thành viên Các kiểucấutrúccóthể lồng vào nhau, trong cấutrúccóthể sử dụng mảng, mộtmảng có thể có các phầntử là cấu trúc, v.v Các biến có cùng kiểucấutrúccóthể gán cho nhau, có thể sử dụng ₫ể khởitạo cho nhau (khác hẳnvớimảng) Có thể sử dụng con trỏ₫ểtruy nhậpdữ liệucấu trúc thông qua toán tử (*.) và toán tử (->) Hai kiểuc ấu trúc có khai báo giốngnhauhoàntoànvẫnlàhai kiểucấu trúc khác nhau 51 © 2004, HOÀNG MINH SƠN Chương 2: Các yếutố cơ bảncủaC vàC++ 2.4.2 Hợpnhất enum SignalType {BINARY_8, BINARY_16, ANALOG_1, ANALOG_2}; union SignalValue { unsigned short word; unsigned char byte; float real; double lreal; }; struct Signal { SignalType type; SignalValue value; }; void main() { SignalValue B,W; B.byte = 0x01; W.word = 0x0101; unsigned char b = W.byte; // OK, the lower byte float f = W.real; // meaningless Signal DI1 = {BINARY_8, 0x11}; Signal AI1 = {ANALOG_1,{0}}; Signal AI2; AI2.type = ANALOG_2; AI2.value.lreal = 145.67; } 52 © 2004, HOÀNG MINH SƠN Chương 2: Các yếutố cơ bảncủaC vàC++ Tóm lượcvề hợpnhất Hợpnhất (union) là mộttậphợp (không có cấutrúcchặtchẽ) chứa các biếnsử dụng chung ô nhớ, ở mỗingữ cảnh chỉ sử dụng mộtbiếnriêngbiệt Union thường ₫ượcsử dụng khi dữ liệu ₫ầuvàocóthể có kiểu khác nhau Các thành viên củamột union không liên quan ₫ến nhau, không cùng nhau tạothànhmộtthựcthể thống nhất Kích cỡ củaunion bằng kích cỡ củabiếnlớnnhất Khai báo kiểuunion tương tự như khai báo struct, nhưng ý nghĩa khác hẳn Truy nhậpbiến thành viên cũng tương tự như struct, có thể qua biếntrựctiếphoặcqua biếncon trỏ. Union có thể chứa struct, struct có thể chứa union, union có thể chứamảng, các phầntử củamảng có thể là union. 53 © 2004, HOÀNG MINH SƠN Chương 2: Các yếutố cơ bảncủaC vàC++ 2.5 ĐiềukhiểnCT: phân nhánh Các kiểu phân nhánh – if else: Phân nhánh lựachọnmộthoặchaitrường hợp – switch case: Phân nhánh lựachọnnhiềutrường hợp – break: Lệnh nhảykết thúc (sớm) mộtphạmvi – return: Lệnh nhảyvàkếtthúc(sớm) mộthàm – goto: Lệnh nhảytớimột nhãn (không nên dùng!) 54 © 2004, HOÀNG MINH SƠN Chương 2: Các yếutố cơ bảncủaC vàC++ 2.5.1 Cấutrúcif else Lựachọnmộttrường hợp: sử dụng if if (npoints >= 60) cout << "Passed"; if (npoints >= 80 && npoints <= 90) { grade = ‘A’; cout << grade; } Phân nhánh hai trường hợp: sử dụng if else if (npoints >= 90) cout << ‘A’; else if (npoints >= 80) cout << ‘B’; else if (npoints >= 70) cout << ‘C’; else if (npoints >= 60) cout << ‘D’; else cout << ‘F’; 55 © 2004, HOÀNG MINH SƠN Chương 2: Các yếutố cơ bảncủaC vàC++ Ví dụ: Hàm max() int max1(int a, int b) { int c; if (a > b) c = a; else c = b; return c; } int max2(int a, int b) { int c = a; if (a < b) c = b; return c; } int max3(int a, int b) { if (a < b) a = b; return a; } int max4(int a, int b) { if (a > b) return a; else return b; } int max5(int a, int b) { if (a > b) return a; return b; } int max6(int a, int b) { return (a > b)? a: b; } 56 © 2004, HOÀNG MINH SƠN Chương 2: Các yếutố cơ bảncủaC vàC++ 2.5.2 Cấutrúcswitch case Signal input; int i = 0; while (i++ < 8) { input = readInput(i); // read from input module i switch (input.type) { case BINARY_8: cout << input.value.byte; break; case BINARY_16: cout << input.value.word; break; case ANALOG_1: cout << input.value.real; break; case ANALOG_2: cout << input.value.lreal; break; default: cout << "Unknown signal type"; } } . MINH SƠN Chương 2: C c yếutố c bảncủaC v C+ + Tóm lượcvề c utr c( struct) C u tr c (struct) ₫ượcsử dụng ₫ể nhóm c c dữ liệuliênquan mô tả một ₫ốitượng, c c dữ liệucóthể c ng ho c kh c kiểu . nghĩakiểucấutrúcbằng c ch khai báo tên c c biến thành viên. Định nghĩakiểucấutrúcchưaphảilà₫ịnh nghĩa c c biếncụ thể, vì thế không ₫ư c ₫ặt giá trị₫ầuchocácbiến Kích c c acấutr c& gt;= tổng kích c . HOÀNG MINH SƠN Chương 2: C c yếutố c bảncủaC v C+ + Tóm lượcvề hợpnhất Hợpnhất (union) là mộttậphợp (không c c utrúcchặtchẽ) chứa c c biếnsử dụng chung ô nhớ, ở mỗingữ c nh chỉ sử dụng mộtbiếnriêngbiệt