Tải bản đầy đủ (.pptx) (27 trang)

Bài giảng Kỹ thuật lập trình Chương 3 Trần Minh Thái

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.02 MB, 27 trang )

Lập trình C
Chương 3. Kiểu dữ liệu có cấu trúc
(3 tiết)

Trần Minh Thái
Email:
Website: www.minhthai.edu.vn
Cập nhật: 28/02/2017
1


Nội dung

• Khái niệm
• Khai báo
• Cách truy xuất thành phần bên trong cấu trúc
• Xử lý cấu trúc đơn
• Xử lý mảng có cấu trúc
• Bài tập

2


KHÁI NIỆM VÀ KHAI BÁO

3


Khái niệm

Là kiểu dữ liệu (KDL) do lập trình viên tự định nghĩa bằng cách gom nhóm các KDL cơ bản


trong C thành một KDL phức hợp gồm nhiều thành phần

• Khai báo
struct StructName
{
khai báo các thuộc tính;
};
typedef struct StructName NewDataType;

4


Khái niệm

• Ví dụ khai báo kiểu dữ liệu lưu thông tin của ngày:
struct StructDate
{
char thu[10];
int ngay;
int thang;
int nam;
};
typedef struct StructDate Date;

5


TRUY CẬP CÁC THÀNH PHẦN
TRONG CẤU TRÚC


6


Truy cập các thuộc tính cấu trúc

• Biến kiểu cấu trúc

NewDataType variableName;
variableName.atributeName;

• Ví dụ
Date x;
x.ngay = 5;

7


Truy cập các thuộc tính cấu trúc

• Biến con trỏ kiểu cấu trúc

NewDataType *pointerName;
pointerName -> attributeName;
Ví dụ:
Date *x ;
x = (Date*) malloc(sizeof(Date));
x -> ngay = 5 ;

8



Khai báo đệ quy

struct StructName
{
khai báo các thuộc tính;
struct StructName *attributeName;;
};

9


Khai báo đệ quy

• Ví dụ:
struct StructNode
{
int key;
struct StructNode *pNext;
};

10


Ví dụ

Viết chương trình nhập vào toạ độ hai điểm trong mặt phẳng, tính tổng và khoảng cách của
hai toạ độ này

struct StructDiem

{
double x;
double y;
};
typedef struct StructDiem Diem;
void Nhap(Diem &d);
void Xuat(Diem d);
Diem Tong(Diem d1, Diem d2);
double TinhKhoangCach(Diem, Diem);

11


Ví dụ

void Nhap (Diem &d)
{
printf("Hoanh do : ");
scanf("%lf", &d.x);
printf("Tung do : ");
scanf("%lf", &d.y);
}

12


Ví dụ

void Xuat (Diem d)
{

printf("Toa do diem: (%lf, %lf)", d.x, d.y);
}
Diem Tong (Diem d1, Diem d2)
{
Diem temp;
temp.x = d1.x + d2.x ;
temp.y = d1.y + d2.y ;
return temp;
}

13


Ví dụ

double TinhKhoangCach(Diem A, Diem B)
{
return sqrt((A.x-B.x)*(A.x-B.x)+(A.y-B.y)*(A.y-B.y));
}

14


int main()
{
Diem A , B, AB;
double kc;
printf("Nhap vao toa do diem A: ");
Nhap(A);
printf("Toa do diem A: ");

Xuat(A);
printf("\nNhap vao toa do diem B: ");
Nhap(B);
printf("Toa do diem B: ");
Xuat(B);

printf("\n Toa do tong cua A va B: ");
AB = Tong

(A, B);

Xuat (AB);
kc=TinhKhoangCach(A, B);
printf("\nKhoang cach A va B: %lf", kc);

getch();
return 0;
}


BÀI TẬP

16


Bài tập 1

Viết chương trình nhập vào thông tin của một sinh viên có cấu trúc như sau:

• Mã số sinh viên (mssv)

• Họ và tên (hoTen)
• Điểm giữa kỳ (gk)
• Điểm thực hành (th)
• Điểm lý thuyết (lt)
Tính điểm tổng kết môn theo công thức:
gk*10%+th*30%+lt*60%

17


Bài tập 2

Sử dụng KDL có cấu trúc để khai báo và viết chương trình gồm các chức năng sau:

1.

Nhập vào 2 phân số

2.

Tính tổng và tích hai phân số (kết quả phải là phân số tối giản)

3.

Xuất kết quả ra màn hình

18


Bài tập 3


Viết chương trình nhập vào 2 thời gian t1 và t2 (thông tin thời gian gồm: giờ, phút và giây); tính
khoảng cách giữa t1 và t2 (đơn vị tính bằng giây)

19


MẢNG CÓ CẤU TRÚC

20


Mảng cấu trúc

• Cách khai báo tương tự như mảng một chiều (KDL mảng là KDL có cấu trúc)
• Cách truy cập phần tử trong mảng cũng như truy cập trên mảng một chiều. Nhưng do từng
phần tử có kiểu cấu trúc nên phải chỉ định rõ cần lấy thành phần nào (truy cập đến thành
phần cuối cùng có KDL cơ bản)

21


Nguyên tắc lập trình trên mảng cấu trúc

Do kiểu dữ liệu có cấu trúc chứa nhiều thành phần nên khi viết chương trình loại này ta cần:

1.
2.

Xây dựng hàm xử lý cho một kiểu cấu trúc

Muốn xử lý cho mảng cấu trúc, gọi hàm xử lý cho một kiểu cấu trúc bằng cách dùng
vòng lặp

22

22


Ví dụ

Viết hàm nhập vào mảng các phân số

struct StructPhanSo
{
int tu;
int mau;
};
typedef struct StructPhanSo PhanSo;

23


Ví dụ

void Nhap1PhanSo (PhanSo &ps)
{
printf("Nhap tu so: ");
scanf("%d " , &ps.tu);
printf("\nNhap mau so: “);
scanf(“%d”, &ps.mau);

}

24


Ví dụ

void NhapMang (PhanSo dsps[], int n)
{
for(int i=0; i{
printf(”\nNhap vao phan so thu %d: “, i+1);
Nhap1PhanSo (dsps[i]);
}
}

25


×