Struct lồng nhau

Một phần của tài liệu Giáo trình kỹ thuật lập trình cđ kinh tế kỹ thuật TP HCM (Trang 142)

Ví dụ 5: Viết chương trình định nghĩa tâm đường trịn kiểu số thực dạng cấu trúc, nhập và xuất tâm cho người dùng xem.

KHOA CƠNG NGHỆ THƠNG TIN Trang 142

Hình 126: Màn hình giải ví dụ 5 mục 7.2.1.5

Kết quả in ra màn hình

Hình 127: Kết quả chương trình chạy ví dụ 5 mục 7.2.1.5

Ví dụ 6: Viết chương trình định nghĩa đường trịn dạng cấu trúc, nhập và xuất thơng tin đường trịn cho người dùng xem.

#include <cstdlib> #include <iostream> using namespace std; struct diem { float x; float y; };

typedef struct diem DIEM; struct Duongtron

{

DIEM I; //Toa do tâm I float R;//Bán kính duong trịn };

typedef struct Duongtron DUONGTRON; void nhap(DIEM &d)

{

KHOA CƠNG NGHỆ THƠNG TIN Trang 143 cout<<"Toa do: ("<<d.x<<","<<d.y<<")";

}

void nhapdt(DUONGTRON &dt) { cout<<"Nhap tam:\n"; nhap(dt.I); cout<<"Ban kinh R="; cin>>dt.R; } void xuatdt(DUONGTRON dt) {

cout<<"Tam duong tron vua nhap:\n"; xuat(dt.I);

cout<<"\nBan kinh R="<<dt.R; }

int main(int argc, char *argv[]) { DUONGTRON n; nhapdt(n); xuatdt(n); printf("\n");system("PAUSE"); return EXIT_SUCCESS; } Kết quả in ra màn hình

KHOA CƠNG NGHỆ THƠNG TIN Trang 144

Hình 128: Kết quả chương trình chạy ví dụ 6 mục 7.2.1.5 7.2.1.6 Sử dụng mảng các struct

Ngơn ngữ C/C++ khơng giới hạn lập trình viên chỉ được lưu trữ các kiểu dữ liệu đơn giản trong một mảng. Người dùng cĩ thể định nghĩa các cấu trúc đĩng vai trị các phần tử của một mảng.

Ví dụ 7: Viết chương trình định nghĩa thơng tin học sinh gồm họ tên, điểm tốn, điểm lý, điểm hĩa kiểu cấu trúc, nhập và in danh sách học sinh.

#include <cstdlib> #include <iostream> using namespace std; struct hocsinh { char hoten[20]; float toan; float ly; float hoa; };

typedef struct hocsinh HOCSINH; void nhap(HOCSINH hs[],int &n) {

for(int i=0;i<n;i++) {

KHOA CƠNG NGHỆ THƠNG TIN Trang 145 cout<<"nhap diem ly: ";

cin>>l;hs[i].ly=l;

cout<<"nhap diem hoa: "; cin>>h;hs[i].hoa=h; }

}

void xuat(HOCSINH hs[],int n) {

cout<<"Danh sach hoc sinh vua nhap: \n"; for(int i=0;i<n;i++)

{

cout<<"\n"<<i+1<<")"; //puts(hs[i].hoten);

cout<<hs[i].hoten<<"\t\t\tDiem toan: "<<hs[i].toan<<"\tLy: "<<hs[i].ly<<"\tHoa: "<<hs[i].hoa;

} }

int main(int argc, char *argv[]) {

HOCSINH hs[100]; int n;

cout<<"Nhap so hoc sinh: "; cin>>n;

KHOA CƠNG NGHỆ THƠNG TIN Trang 146 xuat(hs,n); printf("\n");system("PAUSE"); return EXIT_SUCCESS; } Kết quả in ra màn hình

Hình 129: Kết quả chương trình chạy ví dụ 7 mục 7.2.1.5 Ví dụ 8: Cải tiến lại ví dụ trên như sau

#include <cstdlib> #include <iostream> using namespace std; struct hocsinh { char hoten[20]; float toan; float ly; float hoa;

KHOA CƠNG NGHỆ THƠNG TIN Trang 147 cout<<"nhap ho ten: ";

fflush(stdin); gets(hs.hoten);

cout<<"nhap diem toan: "; cin>>t;hs.toan=t;

cout<<"nhap diem ly: "; cin>>l;hs.ly=l;

cout<<"nhap diem hoa: "; cin>>h;hs.hoa=h;

return hs; }

void nhap(HOCSINH hs[],int &n) {

for(int i=0;i<n;i++) {

cout<<"Nhap hoc sinh thu "<<i+1<<endl; hs[i]=newhs();

} }

void xuat(HOCSINH hs[],int n) {

cout<<"Danh sach hoc sinh vua nhap: \n"; for(int i=0;i<n;i++)

KHOA CƠNG NGHỆ THƠNG TIN Trang 148 cout<<"\n"<<i+1<<")";

//puts(hs[i].hoten);

cout<<hs[i].hoten<<"\t\t\tDiem toan: "<<hs[i].toan<<"\tLy: "<<hs[i].ly<<"\tHoa: "<<hs[i].hoa;

} }

int main(int argc, char *argv[]) {

HOCSINH hs[100]; int n;

cout<<"Nhap so hoc sinh: "; cin>>n; nhap(hs,n); xuat(hs,n); printf("\n");system("PAUSE"); return EXIT_SUCCESS; } Kết quả in ra màn hình

KHOA CƠNG NGHỆ THƠNG TIN Trang 149

Hình 130: Kết quả chương trình chạy ví dụ 8 mục 7.2.1.5

Cấu trúc và con trỏ

Cũng giống như với một biến, chúng ta cĩ thể khai báo một con trỏ trỏ tới một cấu trúc và gán địa chỉ mở đầu của cấu trúc cho nĩ. Đoạn mã sau sẽ giúp bạn hiểu về khái niệm này.

Ví dụ 9: Sử dụng con trỏ cấp phát cho danh sách học sinh: Từ ví dụ trên, hiệu chỉnh hàm main lại như sau:

{

//HOCSINH hs[100]; int n;

cout<<"Nhap so hoc sinh: "; cin>>n;

HOCSINH *hs = (HOCSINH*)malloc(n * sizeof(HOCSINH));

nhap(hs,n); xuat(hs,n);

KHOA CƠNG NGHỆ THƠNG TIN Trang 150 return EXIT_SUCCESS;

}

7.2.2 Enum

7.2.2.1 Khái niệm

Một Enumeration (liệt kê) là một tập hợp các hằng số nguyên được đặt tên. Một kiểu enum được khai báo bởi sử dụng từ khĩa enum trong C#.

Các kiểu liệt kê trong C/C++ là kiểu dữ liệu giá trị. Nĩi cách khác, kiểu liệt kê chứa các giá trị của nĩ và khơng thể kế thừa hoặc khơng thể truyền tính kế thừa.

Cú pháp:

enum <tên_enum> {

danh_sách_enum

};

typedef enum <tên_enum> <TÊN_ENUM>;

Trong đĩ:

- tên_enum: xác định tên kiểu liệt kê.

- danh_sách_enum: là danh sách các định danh được phân biệt nhau bởi dấu phẩy.

Chú ý: enum phải viết bằng chữ thường.

Mỗi biến trong danh sách liệt kê này đại diện cho một giá trị nguyên. Theo mặc định, giá trị của biến kiểu liệt kê đầu tiên là 0, biến kế tiếp tăng dần lên 1 đơn vị.

Ví dụ 10: Định nghĩa kiểu enum về các hãng xe

enum e_acomany { Audi, BMW, Cadillac, Ford, Jaguar, Lexus Maybach, RollsRoyce,

KHOA CƠNG NGHỆ THƠNG TIN Trang 151 red=1, orange=2, yellow=3, green, blue=8, indigo=8, violet=16 } ;

typedef enum rainbowcolors RAINBOWCOLORS;

Nếu chúng ta chỉ định một giá trị nguyên cho một giá trị nào đĩ của biến kiểu dữ liệu liệt kê thì các giá trị tiếp theo sẽ là các giá trị nguyên tiếp theo.

7.2.2.3 Các ví dụ

Ví dụ 12: Thực hiện lựa chọn màu cho hoa quả cĩ 3 màu như sau: orange, guava, apple. #include <cstdlib> #include <iostream> using namespace std; enum Fruits{ orange, guava, apple };

typedef enum Fruits FRUITS; int main(int argc, char *argv[]) {

KHOA CƠNG NGHỆ THƠNG TIN Trang 152 FRUITS myFruit;

int i;

cout << "Please enter the fruit of your choice(0 to 2)::"; cin >> i;

switch(i) {

case orange:

cout << "Your fruit is orange"; break;

case guava:

cout << "Your fruit is guava"; break;

case apple:

cout << "Your fruit is apple"; break; } printf("\n");system("PAUSE"); return EXIT_SUCCESS; } Kết quả in ra màn hình

Hình 131: Kết quả chương trình chạy ví dụ 12 mục 7.2.2.3

Ví dụ 13: Viết chương trình nhập xuất biến giá trị kiểu dạng enum cho 2 loại xe Lexus và Maybach.

KHOA CƠNG NGHỆ THƠNG TIN Trang 153 Cadillac=11, Ford=44, Jaguar=45, Lexus, Maybach=55, RollsRoyce=65, Saab=111 };

typedef enum e_acomany E_ACOMANY; int main(int argc, char *argv[])

{ E_ACOMANY e; e=Lexus; cout<<"Lexus: "<<e<<endl; e=Maybach; cout<<"Maybach: "<<e<<endl; printf("\n");system("PAUSE"); return EXIT_SUCCESS; } Kết quả in ra màn hình

KHOA CƠNG NGHỆ THƠNG TIN Trang 154

Hình 132: Kết quả chương trình chạy ví dụ 13 mục 7.2.2.3

7.3 Bài tập

1. Viết chương nhập xuất điểm trong mặt phẳng kiểu số thực, tính khoảng cách giữa 2 điểm, tọa độ trọng tâm giữa 3 điểm.

2. Viết chương trình thực hiện: Nhập vào tạo độ 3 điểm A,B,C trong khơng gian, tính độ dài 3 đoạn thẳng AB, AC, BC và kiểm tra xem A, B, C cĩ thẳng hàng khơng?

3. Viết các hàm thực hiện: Nhập thơng tin SV gồm: họ tên, địa chỉ, tuổi, điểm tốn, lý, hĩa. Tính điểm tổng kết, in thơng tin sinh viên.

4. Viết chương trình nhập vào ngày tháng năm, xuất cho người dùng xem ngày hơm qua.

5. Định nghĩa 1 dãy cấu trúc cĩ thể được dùng làm danh bạ điện thoại, gồm cĩ tên, địa chỉ, số điện thoại, với số mẫu tin tối đa là 40. Viết chương trình với các chức năng sau: nhập thơng mới, tìm kiếm số điện thoại, in danh sách theo quận.

6. Viết chương trình đọc vào tên, địa chỉ, sắp xếp tên và địa chỉ theo thứ tự alphabet, sau đĩ hiển thị danh sách đã được sắp xếp.

7. Viết chương trình nhận vào các thơng tin sau: Tên đội bĩng, số trận thắng, số trận hịa, số trận thua. In ra đội bĩng cĩ số điểm cao nhất (với 1 trận thắng = 3 điểm, 1 trận hịa = 1 điểm và 1 trận thua = 0 điểm).

8. Xây dựng cấu trúc gồm: Họ tên, ngày sinh, trường, số báo danh, điểm thi. Trong đĩ, điểm thi là cấu trúc gồm 3 mơn: Tốn, Lý, Hĩa. Nhập liệu vào khoảng 10 thí sinh, tìm và in ra các thí sinh cĩ tổng điểm 3 mơn >= 15.

9. Viết chương trình tạo lập và tìm kiếm dữ liệu. Nội dung yêu cầu gồm: Nhập họ và tên, địa chỉ (gồm: Quận, phường, tổ), tuổi, lương. Tìm kiếm những người ở Quận 3 cĩ tuổi dưới 30 thu nhập từ 500.000đ trở lên và in ra màn hình.

10. Viết chương trình nhập vào kiểu cấu trúc phân số kiểu số thực, tính tổng, hiệu, tích, thương và rút gọn 2 phân số. Xuất kết quả cho người dùng xem.

KHOA CƠNG NGHỆ THƠNG TIN Trang 155 [4] Phạm Văn Ất, Giáo trình kỹ thuật lập trình C – Căn bản và Nâng cao, Giao thơng vận tải, 2006

[5] Nguyễn Ngọc Cương, Giáo trình ngơn ngữ lập trình C/C++, Thơng tin và truyền thơng, 2015

[6] https://voer.edu.vn/c/bien-va-bieu-thuc-trong-c/ab1e3116/b7247bc1, truy cập 2/6/2016 [7] http://www.oktot.com/category/lap-trinh/cc/, truy cập ngày 2/6/2016

[8] http://www.bcdonline.net, truy cập ngày 25/7/2016

[9] http://vietjack.com/csharp/enum_trong_csharp.jsp, truy cập ngày 6/8/2016

KHOA CƠNG NGHỆ THƠNG TIN Trang 156

Phụ lục

Chú thích hình ảnh

Hình 1: Khởi động ứng dụng Dev-C++ ... 20

Hình 2: Màn hình đặt tên project ... 20

Hình 3: Màn hình sau khi khởi động thành cơng ... 21

Hình 4: Màn hình giải ví dụ 1 mục 3.2.1.1 ... 32

Hình 5: Kết quả chương trình chạy ví dụ 1 mục 3.2.1.1 ... 33

Hình 6: Màn hình giải ví dụ 2 mục 3.2.1.1 ... 34

Hình 7: Kết quả chương trình chạy ví dụ 2 mục 3.2.1.1 ... 34

Hình 8: Màn hình giải ví dụ 3 mục 3.2.1.2 ... 36

Hình 9: Kết quả chương trình chạy ví dụ 3 mục 3.2.1.2 ... 37

Hình 10: Màn hình giải ví dụ 4 mục 3.2.1.2 ... 38

Hình 11: Kết quả chương trình chạy ví dụ 4 mục 3.2.1.2 ... 39

Hình 12: Màn hình giải ví dụ 5 mục 3.2.1.3 ... 41

Hình 13: Kết quả chương trình chạy ví dụ 5 mục 3.2.1.3 ... 41

Hình 14: Màn hình giải ví dụ 6 mục 3.2.1.3 ... 43

Hình 15: Kết quả chương trình chạy ví dụ 6 mục 3.2.1.3 ... 43

Hình 16: Màn hình giải ví dụ 7 mục 3.2.1.3 ... 45

Hình 17: Kết quả chương trình chạy ví dụ 7 mục 3.2.1.3 ... 45

Hình 18: Màn hình giải ví dụ 8 mục 3.2.1.4 ... 47

Hình 19: Kết quả chương trình chạy ví dụ 8 mục 3.2.1.4 ... 47

Hình 20: Màn hình giải ví dụ 9 mục 3.2.1.4 ... 48

Hình 21: Kết quả chương trình chạy ví dụ 9 mục 3.2.1.4 ... 48

Hình 22: Màn hình giải ví dụ 10 mục 3.2.1.4 ... 49

Hình 23: Kết quả chương trình chạy ví dụ 10 mục 3.2.1.4 ... 49

Hình 24: Màn hình giải ví dụ 11 mục 3.2.1.4 ... 50

Hình 25: Kết quả chương trình chạy ví dụ 11 mục 3.2.1.4 ... 50

Hình 26: Màn hình giải ví dụ 12 mục 3.2.1.4 ... 51

Hình 27: Kết quả chương trình chạy ví dụ 12 mục 3.2.1.4 ... 52

KHOA CƠNG NGHỆ THƠNG TIN Trang 157

Hình 36: Màn hình giải ví dụ 17 mục 3.2.2.1 ... 58

Hình 37: Kết quả chương trình chạy ví dụ 17 mục 3.2.2.1 ... 58

Hình 38: Màn hình giải ví dụ 19 mục 3.2.2.1 ... 59

Hình 39: Kết quả chương trình chạy ví dụ 19 mục 3.2.2.1 ... 59

Hình 40: Màn hình giải ví dụ 20 mục 3.2.2.1 ... 60

Hình 41: Kết quả chương trình chạy ví dụ 20 mục 3.2.2.1 ... 60

Hình 42: Màn hình giải ví dụ 21 mục 3.2.2.2 ... 62

Hình 43: Kết quả chương trình chạy ví dụ 21 mục 3.2.2.2 ... 62

Hình 44: Màn hình giải ví dụ 21 mục 3.2.2.2 ... 63

Hình 45: Kết quả chương trình chạy ví dụ 21 mục 3.2.2.2 ... 63

Hình 46: Màn hình giải ví dụ 22 mục 3.2.2.2 ... 64

Hình 47: Kết quả chương trình chạy ví dụ 22 mục 3.2.2.2 ... 64

Hình 48: Màn hình giải ví dụ 23 mục 3.2.2.3 ... 65

Hình 49: Kết quả chương trình chạy ví dụ 23 mục 3.2.2.3 ... 66

Hình 50: Màn hình giải ví dụ 24 mục 3.2.2.3 ... 67

Hình 51: Kết quả chương trình chạy ví dụ 24 mục 3.2.2.3 ... 67

Hình 52: Màn hình giải ví dụ 25 mục 3.2.2.4 ... 67

Hình 53: Kết quả chương trình chạy ví dụ 25 mục 3.2.2.4 ... 68

Hình 54: Màn hình giải ví dụ 26 mục 3.2.2.4 ... 68

Hình 55: Kết quả chương trình chạy ví dụ 26 mục 3.2.2.4 ... 69

Hình 56: Màn hình giải ví dụ 27 mục 3.2.2.5 ... 69

Hình 57: Kết quả chương trình chạy ví dụ 27 mục 3.2.2.5 ... 70

KHOA CƠNG NGHỆ THƠNG TIN Trang 158

Hình 59: Kết quả chương trình chạy ví dụ 28 mục 3.2.2.6 ... 71

Hình 60: Màn hình giải ví dụ 29 mục 3.2.2.6 ... 71

Hình 61: Kết quả chương trình chạy ví dụ 29 mục 3.2.2.6 ... 71

Hình 62: Màn hình giải ví dụ 30 mục 3.2.2.6 ... 72

Hình 63: Kết quả chương trình chạy ví dụ 30 mục 3.2.2.6 ... 72

Hình 64: Màn hình giải ví dụ 1 mục 4.2.1.3 ... 80

Hình 65: Kết quả chương trình chạy ví dụ 1 mục 4.2.1.3 ... 81

Hình 66: Màn hình giải ví dụ 2 mục 4.2.1.3 ... 82

Hình 67: Kết quả chương trình chạy ví dụ 2 mục 4.2.1.3 ... 82

Hình 68: Màn hình giải ví dụ 3 mục 4.2.1.3 ... 83

Hình 69: Kết quả chương trình chạy ví dụ 3 mục 4.2.1.3 ... 83

Hình 70: Màn hình giải ví dụ 5 mục 4.2.3.3 ... 86

Hình 71: Kết quả chương trình chạy ví dụ 5 mục 4.2.3.3 ... 86

Hình 72: Màn hình giải ví dụ 6 mục 4.2.3.3 ... 87

Hình 73: Kết quả chương trình chạy ví dụ 6 mục 4.2.3.3 ... 87

Hình 74: Màn hình giải ví dụ 7 mục 4.2.4 ... 88

Hình 75: Màn hình giải ví dụ 8 mục 4.2.4 ... 88

Hình 76: Kết quả chương trình chạy ví dụ 8 mục 4.2.4 ... 89

Hình 77: Màn hình giải ví dụ 11 mục 4.2.5.2 ... 91

Hình 78: Kết quả chương trình chạy ví dụ 11 mục 4.2.5.2 ... 91

Hình 79: Kết quả chương trình chạy ví dụ 12 mục 4.2.5.2 ... 93

Hình 80: Kết quả chương trình chạy ví dụ 13 mục 4.2.5.2 ... 94

Hình 81: Màn hình giải ví dụ 3 mục 5.2.1.3 ... 98

Hình 82: Kết quả chương trình chạy ví dụ 3 mục 5.2.1.3 ... 98

Hình 83: Màn hình giải ví dụ 4 mục 5.2.1.3 ... 99

Hình 84: Kết quả chương trình chạy ví dụ 4 mục 5.2.1.3 ... 99

Hình 85: Màn hình giải ví dụ 5 mục 5.2.1.3 ... 100

Hình 86: Kết quả chương trình chạy ví dụ 5 mục 5.2.1.3 ... 100

Hình 87: Màn hình giải ví dụ 10 mục 5.2.1.5 ... 104

KHOA CƠNG NGHỆ THƠNG TIN Trang 159

Hình 96: Kết quả chương trình chạy ví dụ 15 mục 5.2.2.2 ... 111

Hình 97: Màn hình giải ví dụ 16 mục 5.2.2.2 ... 112

Hình 98: Kết quả chương trình chạy ví dụ 16 mục 5.2.2.2 ... 112

Hình 99: Màn hình giải ví dụ 17 mục 5.2.2.2 ... 112

Hình 100: Kết quả chương trình chạy ví dụ 17 mục 5.2.2.2 ... 113

Hình 101: Màn hình giải ví dụ 18 mục 5.2.2.3 ... 114

Hình 102: Kết quả chương trình chạy ví dụ 18 mục 5.2.2.3 ... 114

Hình 103: Màn hình giải ví dụ 1 mục 6.2.1.4 ... 121

Hình 104: Kết quả chương trình chạy ví dụ 1mục 6.2.1.4 ... 122

Hình 105: Màn hình giải ví dụ 2 mục 6.2.1.4 ... 122

Hình 106: Kết quả chương trình chạy ví dụ 2 mục 6.2.1.4 ... 123

Hình 107: Màn hình giải ví dụ 5 mục 6.2.2.1 ... 125

Hình 108: Kết quả chương trình chạy ví dụ 5 mục 6.2.2.1 ... 126

Hình 109: Màn hình giải ví dụ 6 mục 6.2.2.1 ... 126

Hình 110: Kết quả chương trình chạy ví dụ 6 mục 6.2.2.1 ... 126

Hình 111: Màn hình giải ví dụ 7 mục 6.2.2.2 ... 128

Hình 112: Kết quả chương trình chạy ví dụ 7 mục 6.2.2.2 ... 128

Hình 113: Màn hình giải ví dụ 8 mục 6.2.2.2 ... 129

Hình 114: Kết quả chương trình chạy ví dụ 8 mục 6.2.2.2 ... 130

Hình 115: Màn hình giải ví dụ 9 mục 6.2.2.3 ... 130

Hình 116: Kết quả chương trình chạy ví dụ 9 mục 6.2.2.3 ... 131

Hình 117: Màn hình giải ví dụ 10 mục 6.2.2.3 ... 131

KHOA CƠNG NGHỆ THƠNG TIN Trang 160

Hình 119: Màn hình giải ví dụ 11 mục 6.2.2.3 ... 132

Hình 120: Kết quả chương trình chạy ví dụ 11 mục 6.2.2.3 ... 133

Hình 121: Màn hình giải ví dụ 12 mục 6.2.2.4 ... 134

Hình 122: Kết quả chương trình chạy ví dụ 12 mục 6.2.2.4 ... 135

Hình 123: Màn hình giải ví dụ 3 mục 7.2.1.3 ... 138

Hình 124: Kết quả chương trình chạy ví dụ 3 mục 7.2.1.3 ... 138

Hình 125: Kết quả chương trình chạy ví dụ 4 mục 7.2.1.3 ... 140

Hình 126: Màn hình giải ví dụ 5 mục 7.2.1.5 ... 142

Hình 127: Kết quả chương trình chạy ví dụ 5 mục 7.2.1.5 ... 142

Hình 128: Kết quả chương trình chạy ví dụ 6 mục 7.2.1.5 ... 144

Hình 129:Kết quả chương trình chạy ví dụ 7 mục 7.2.1.5 ... 146

Hình 130: Kết quả chương trình chạy ví dụ 8 mục 7.2.1.5 ... 149

Một phần của tài liệu Giáo trình kỹ thuật lập trình cđ kinh tế kỹ thuật TP HCM (Trang 142)