Sử dụng Struct trong C và C++ - Tài liệu hỗ trợ lập trình C/C++.pdf

10 1.7K 12
Sử dụng Struct trong C và C++ - Tài liệu hỗ trợ lập trình C/C++.pdf

Đang tải... (xem toàn văn)

Thông tin tài liệu

Giới thiệu cách dùng cấu trúc struct trong ngôn ngữ lập trình C và C++ cho các sinh viên ngành công nghệ thông tin

TÀI LIỆU HỖ TRỢ LẬP TRÌNH C / C++ struct struct 2014 2 Tài liệu hỗ trợ học lập trình C/C++ Struct trong C/C++ 1. Giới thiệu. Struct là cấu trúc mà người lập trình tự xây dựng ra các kiểu dữ liệu khác ngoài các kiểu dữ liệu nguyên thủy, có sẵn trong ngôn ngữ lập trình như int, float, double, char,…. Với những dữ liệu về một thực thể thường nó không chỉ chứa một trường dữ liệu kiểu nguyên thủy mà có thể có nhiều trường dữ liệu. Ví dụ thông tin của một Sinh viên, thông tin của một hình cơ bản, thông tin của một phân số,… Gặp tình huống như vậy người ta thường có xu thế muốn gộp chúng thành một để khai báo xử lý cho dễ. Đó cũng là tư tưởng của việc dùng struct trong C C++. Giả sử như thông tin về 1 điểm trong hệ trục tọa độ xOy, 1 điểm có 2 thành phần tọa độ là x, y. Khi làm việc với một điểm thì ta có thể dùng 2 biến x y để sử dụng. Nhưng khi số điểm lên tới hàng trăm hàng nghìn thì thao tác xử lý có vẻ đã thấy nhiều vấn đề. Struct trong C C++ cho phép ta coi cả 2 dữ liệu x y thành một kiểu dữ liệu mới. Ta sẽ xem xét bây giờ. 2. Khai báo. Để khai báo một struct trong C ta làm như sau. struct point { float x; float y; }; typedef struct point Point; // Hoac khai bao nhu sau typedef struct { float x; float y; } Point; // Hai cach khai bao tren la tuong duong nhau struct 2014 3 Tài liệu hỗ trợ học lập trình C/C++ Để khai báo struct trong C++ ta có thể làm như sau. struct Point { float x; float y; }; Sau các cách khai báo trên ta có thể sử dụng Point như là một kiểu dữ liệu mới. Nó có chứa hai trường x, y. Thể hiện tọa độ của một điểm trong hệ trục xOy. 3. Sử dụng. Sau khi định nghĩa struct ta có thể sử dụng chúng như sau. Sử dụng như là một biến. // Voi C Point A; A.x = 0.0; A.y = 1.0; printf(“(%f , %f)\n”, B.x, B.y) ; // Voi C // Voi C++ Point B; cout << “Nhap x, y:”; cin >> B.x >> B.y; cout << B.x << “ “ << B.y << endl; // Voi C++ Sử dụng như là một con trỏ. // Voi C Point *pA; // Xin cap phat vung nho pA = (Point*) malloc(sizeof(Point)); printf("Nhap toa do diem A: "); scanf("%f %f", &(pA->x), &(pA->y)); printf("%f %f\n", pA->x, pA->y); free(pA); // Giai phong vung nho cap phap // Voi C++ Point *pB; struct 2014 4 Tài liệu hỗ trợ học lập trình C/C++ pB = new Point; cout << “Nhap toa do diem B: “; cin >> pB->x >> pB->y; cout << pB->x << “ ” << pB->y << endl; delete pB; Sử dụng như là một mảng tĩnh. // Voi C Point arr[100]; int n, i; printf("Nhap so diem:"); scanf("%d", &n); for (i = 0; i < n; i++) { printf("Nhap toa do diem %d : ", i + 1); scanf("%f %f", &(arr[i].x), &(arr[i].y)); } for (i = 0; i < n; i++) { printf("(%f, %f), ", arr[i].x, arr[i].y); } // Voi C++ Point a[100]; int n; cout << "Nhap so diem:"; cin >> n; for (int i = 0; i < n; i++) { cout << "Nhap toa do diem " << i + 1 << " : "; cin >> a[i].x >> a[i].y; } cout << "Cac diem vua nhap la: "; for (int i = 0; i < n; i++) { cout << "(" << a[i].x << ", " << a[i].y << "), "; } struct 2014 5 Tài liệu hỗ trợ học lập trình C/C++ Sử dụng như là một mảng động. // Voi C Point *p; int n, i; printf("Nhap so diem:"); scanf("%d", &n); p = (Point*) calloc(n, sizeof(Point)); for (i = 0; i < n; i++) { printf("Nhap toa do diem %d : ", i + 1); scanf("%f %f", &(p[i].x), &(p[i].y)); } for (i = 0; i < n; i++) { printf("(%f, %f), ", p[i].x, p[i].y); } free(p); // Voi C++ Point *p; int n; cout << "Nhap so diem:"; cin >> n; p = new Point[n]; for (int i = 0; i < n; i++) { cout << "Nhap toa do diem " << i + 1 << " : "; cin >> p[i].x >> p[i].y; } cout << "Cac diem vua nhap la: "; for (int i = 0; i < n; i++) { cout << "(" << p[i].x << ", " << p[i].y << "), "; } delete []p; 4. Mở rộng. Bạn có thể viết các hàm khởi tạo cho struct, viết các hàm cho struct, quá tải các toán tử để struct của bạn được linh hoạt hơn, giống với các kiểu dữ liệu nguyên thủy hơn. struct 2014 6 Tài liệu hỗ trợ học lập trình C/C++ Ví dụ với struct PhanSo sau như của mình. // PhanSo.cpp // Cuong Pc 2013 #include <iostream> #include <conio.h> using namespace std; int ucln(int a, int b); struct PhanSo { int tu; int mau; // Cac ham khoi tao PhanSo(); PhanSo(int _a, int _b); // Mot so phuong thuc void rutgon(); // Qua tai mot so toan tu thong thuong PhanSo& operator+ (PhanSo& a); PhanSo& operator* (PhanSo& a); PhanSo& operator- (PhanSo& a); PhanSo& operator/ (PhanSo& a); }; // Qua tai toan tu nhap xuat istream& operator>> (istream &is, PhanSo &n); ostream& operator<< (ostream &os, PhanSo &n); int main() { PhanSo psA(1, 2); // Ham khoi tao PhanSo(1, 2); PhanSo psB(3, 4); // cout << "Phan so A: " << psA << endl; struct 2014 7 Tài liệu hỗ trợ học lập trình C/C++ // Dung duoc do da qua tai toan tu xuat << cout << "Phan so B: " << psB << endl; cout << "A + B = " << (psA + psB) << endl; cout << "A - B = " << (psA - psB) << endl; cout << "A * B = " << (psA * psB) << endl; cout << "A / B = " << (psA / psB) << endl; PhanSo psC; cout << "Nhap 1 phan so:"; cin >> psC; // Co the dung do da qua tai toan tu nhap >> cout << "Phan so vua nhap: " << psC << endl; getch(); return 0; } // Ham tim uoc chung lon nhat int ucln(int a, int b) { int tmp; if (a < 0) a = -a; if (b < 0) b = -b; if (a < b) { tmp = a; a = b; b = tmp; } while(a % b != 0) { tmp = b; b = a % b; a = tmp; } return b; } struct 2014 8 Tài liệu hỗ trợ học lập trình C/C++ // Ham khoi tao co tham so PhanSo::PhanSo(int _a, int _b) { if (_b == 0) { tu = 0; mau = 1; cout << "Nhap mau bang 0, chuyen thanh phan so = 0" << endl; } else { tu = _a; mau = _b; rutgon(); } } // Ham khoi tao khong tham so PhanSo::PhanSo() { tu = 0; mau = 1; } // Rut gon phan so void PhanSo::rutgon() { if (mau < 0) { tu = -tu; mau = -mau; } int uc = ucln(tu, mau); tu /= uc; mau /= uc; } // Qua tai toan tu xuat ostream& operator<< (ostream &os, PhanSo &n) { os << n.tu << " / " << n.mau; return os; } struct 2014 9 Tài liệu hỗ trợ học lập trình C/C++ // Qua tai toan tu nhap istream& operator>> (istream &is, PhanSo &n) { is >> n.tu >> n.mau; return is; } // Qua tai toan tu cong(+) PhanSo& PhanSo::operator+ (PhanSo&a) { PhanSo *result = new PhanSo; result->tu = tu * a.mau + a.tu * mau; result->mau = a.mau * mau; result->rutgon(); return *result; } // Qua tai toan tu nhan(*) PhanSo& PhanSo::operator* (PhanSo& a) { PhanSo *result = new PhanSo; result->tu = tu * a.tu; result->mau = a.mau * mau; result->rutgon(); return *result; } // Qua tai toan tu tru (-) PhanSo& PhanSo::operator- (PhanSo& a) { PhanSo *result = new PhanSo; result->tu = tu * a.mau - a.tu * mau; result->mau = a.mau * mau; result->rutgon(); return *result; } // Qua tai toan tu chia (/) PhanSo& PhanSo::operator/ (PhanSo& a) { PhanSo *result = new PhanSo; result->tu = tu * a.mau; result->mau = mau * a.tu; struct 2014 10 Tài liệu hỗ trợ học lập trình C/C++ result->rutgon(); return *result; } Ngoài ra, từ struct trong C C++ ta có thể xây dựng các cấu trúc dữ liệu đặc biệt như Danh sách liên kết (đơn, kép), Ngăn xếp, Hàng đợi, Cây,… Mình sẽ trình bày trong các bài viết sau. Hi vọng phần nào có thể giúp đỡ các bạn hiểu về struct hơn. Cảm ơn các bạn.  system(“PAUSE”); . TÀI LIỆU HỖ TRỢ LẬP TRÌNH C / C+ + struct struct 2014 2 Tài liệu hỗ trợ h c lập trình C/ C++ Struct trong C/ C++ 1. Giới thiệu. Struct là c u tr c mà người lập trình. c thể viết c c hàm khởi tạo cho struct, viết c c hàm cho struct, quá tải c c toán tử để struct c a bạn đư c linh hoạt hơn, giống với c c kiểu dữ liệu nguyên thủy hơn. struct 2014 6 Tài. h c lập trình C/ C++ Để khai báo struct trong C+ + ta c thể làm như sau. struct Point { float x; float y; }; Sau c c cách khai báo trên ta c thể sử dụng Point như là một kiểu dữ liệu

Ngày đăng: 07/04/2014, 19:56

Tài liệu cùng người dùng

Tài liệu liên quan