1. Trang chủ
  2. » Giáo Dục - Đào Tạo

ktlt_chuong 2_kieudulieucocautruc_new

41 9 0

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 41
Dung lượng 260,54 KB

Nội dung

Cách khai báo tương tự như mảng một chiều (Kiểu dữ liệu bây giờ là kiểu dữ liệu 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.[r]

(1)

CHƯƠNG

(2)

#2

NỘI DUNG

Khái niệm Khai báo

Cách truy xuất thành phần bên cấu trúc Xử lý cấu trúc đơn

(3)

#3

KHÁI NIỆM

Kiểu liệu có cấu trúc kiểu liệu lập trình viên tự định nghĩa bằng cách gom nhóm kiểu liệu có sẵn C thành mợt kiểu liệu phức hợp gồm nhiều thành phần:

Khai báo

struct tên_struct {

khai báo tḥc tính; };

(4)

#4

KHÁI NIỆM

Ví dụ khai báo kiểu liệu lưu thông tin ngày: struct ttDate

{

char thu[10]; int ngay;

int thang; int nam; };

(5)

#5

TRUY CẬP CÁC THUỘC TÍNH CẤU TRÚC

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

TÊNKDL tên_biến;

tên_biến.tên_tḥc_tính;

 Ví dụ

Date x;

(6)

#6

TRUY CẬP CÁC THUỘC TÍNH CẤU TRÚC

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

TÊNKDL *tên_biến_con_trỏ;

tên_biến_con_trỏ -> tên_tḥc_tính; Ví dụ:

Date *x ;

(7)

#7

KHAI BÁO ĐỆ QUY

struct tên_struct {

khai báo tḥc tính;

(8)

#8

KHAI BÁO ĐỆ QUY

Ví dụ:

struct ttNode {

int key;

(9)

#9

VÍ DỤ

Viết chương trình nhập vào toạ độ hai điểm mặt phẳng và tính tổng hai toạ độ này

struct ttDiem {

int x; int y; };

(10)

#10

VÍ DỤ

void Nhap (Diem &d) {

printf(“\nNhap vao toa diem\n”); printf(“Hoanh : “);

(11)

#11

VÍ DỤ

void Xuat (Diem d) {

printf(“\nToa diem : (%d, %d)”, 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;

(12)

#12

VÍ DỤ

int main () {

Diem A , B, AB; //khai bao diem A, B, AB; Nhap (A);

Xuat (A); Nhap (B); Xuat (B);

printf(“\n Tong cua hai diem vua nhap la : ”); AB = Tong (A, B);

(13)

#13

BÀI TẬP 1

Viết chương trình nhập vào thơng tin một sinh viên gồm: Mã số sinh viên

Họ tên

Điểm kỳ (GK) Điểm thực hành (TH) Điểm lý thuyết (LT) Điểm tổng kết

Tính điểm tổng kết mơn theo cơng thức:

(14)

#14

BÀI TẬP 2

Sử dụng kiểu liệu có cấu trúc để khai báo viết chương trình (theo phương pháp thủ tục hàm) gồm chức sau:

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

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

(15)

#15

BÀI TẬP 3

(16)

#16

MẢNG CẤU TRÚC

Cách khai báo tương tự mảng một chiều (Kiểu liệu kiểu liệu có cấu trúc)

(17)

#17

NGUYÊN TẮC LẬP TRÌNH TRÊN MẢNG CẤU TRÚC

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

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

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

(18)

#18

VÍ DỤ

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

typedef struct ttPhanSo {

(19)

#19

VÍ DỤ

void NhapPS(PhanSo &ps) {

printf("Nhap tu so: ");

scanf("%d ”, , &ps.tu);

(20)

#20

VÍ DỤ

void NhapMangPS(PHANSO dsps[], int n) {

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

printf(”\nNhap vao phan so thu %d: “, i+1); NhapPS(dsps[i]);

(21)

#21

BÀI TẬP 4

4.1 Viết chương trình nhập vào mảng phân số, cho biết phân số có giá trị lớn mảng

4.2 Viết chương trình nhập vào danh sách mặt hàng, in mặt hàng có xuất xứ “VietNam”, biết thơng tin mặt hàng gồm:

- Mã mặt hàng - Tên mặt hàng - Đơn giá

(22)

VÕ QUANG HOÀNG KHANG

Email: vqhkhang@gmail.com

CHƯƠNG 2(tt)

(23)

#23

MỘT SỐ LƯU Ý

Khởi tạo cho biến cấu trúc

Truy xuất thành phần bên cấu trúc Gán liệu kiểu cấu trúc

(24)

#24

KHỞI TẠO CHO BIẾN CẤU TRÚC

Cú pháp khai báo

Ví dụ

struct <tên kiểu cấu trúc> {

<kiểu liệu> <tên thành phần 1>;

<kiểu liệu> <tên thành phần n>;

} <tên biến> = {<giá trị 1>,…,<giá trị n>};

struct DIEM {

int x; int y;

(25)

#25

TRUY XUẤT DỮ LIỆU KIỂU CẤU TRÚC

Đặc điểm

 Không thể truy xuất trực tiếp

 Thơng qua tốn tử thành phần cấu trúc hay cịn

gọi tốn tử chấm (dot operation)

Ví dụ

<tên biến cấu trúc>.<tên thành phần>

struct DIEM {

int x; int y; } diem1;

(26)

#26

GÁN DỮ LIỆU KIỂU CẤU TRÚC

Có cách

Ví dụ

<biến cấu trúc đích> = <biến cấu trúc nguồn>;

<biến cấu trúc đích>.<tên thành phần> = <giá trị>;

struct DIEM {

int x, y;

} diem1 = {2912, 1706}, diem2;

diem2 = diem1;

diem2.x = diem1.x;

(27)

#27

CẤU TRÚC PHỨC TẠP

Thành phần cấu trúc cấu trúc khác struct DIEM

{

int x; int y; };

struct HINHCHUNHAT {

struct DIEM traitren; struct DIEM phaiduoi; } hcn1;

(28)

#28

CẤU TRÚC PHỨC TẠP

Thành phần cấu trúc mảng struct SINHVIEN

{

char hoten[30];

float toan, ly, hoa; } sv1;

strcpy(sv1.hoten, “Nguyen Van A”); sv1.toan = 10;

(29)

#29

CẤU TRÚC PHỨC TẠP

Cấu trúc đệ quy (tự trỏ) struct PERSON

{

char hoten[30];

struct PERSON *father, *mother; };

struct NODE

{

int value;

(30)

#30

CẤU TRÚC PHỨC TẠP

Thành phần cấu trúc có kích thước theo bit struct bit_fields

{

int bit_0 : 1;

int bit_1_to_4 : 4;

int bit_5 : 1;

int bit_6_to_15 : 10; };

(31)

#31

KÍCH THƯỚC CỦA STRUCT

Ví dụ struct A

{

int a;

double b; };

sizeof(A) = ??? struct B1

{

int a; int b;

double c; };

sizeof(B1) = ???

struct B2

{

int a;

double c; int b;

};

(32)

#32

Chỉ thị #pragma pack Chỉ thị #pragma pack (n)

 n = 1, 2, 4, 8, 16 (byte)

 Biên lớn thành phần struct  BC n mặc định 1

 VC++ n mặc định 8

 Project settings  Compile Option C/C++  Code

Generation  Structure Alignment

 Canh biên cho cấu trúc

#pragma pack(push, 1)

struct MYSTRUCT { … };

(33)

#33

#pragma pack

Ví dụ: khơng có #pragma pack (1)

struct A { double a; int b;

int c; };

struct B { int b;

double a; int c;

};

struct C { int b; int c;

double a; };

(34)

#34

CÁC LƯU Ý VỀ CẤU TRÚC

Lưu ý

 Kiểu cấu trúc được định nghĩa để làm khuôn dạng

còn biến cấu trúc được khai báo để sử dụng khuôn dạng định nghĩa

 Trong C++, bỏ từ khóa struct khai báo

biến (hoặc sử dụng typedef)

 Khi nhập biến kiểu số thực cấu trúc

phải nhập thông qua một biến trung gian

NMLT - Cấu trúc

struct DIEM { float x, y;} d1;

(35)

#35

MẢNG CẤU TRÚC

Mảng cấu trúc

 Tương tự mảng với kiểu liệu sở (char,

int, float, …)

struct DIEM

{

int x; int y; };

DIEM mang1[20];

(36)

#36

TRUYỀN CẤU TRÚC CHO HÀM

Truyền cấu trúc cho hàm

 Giống truyền kiểu liệu sở

 Tham trị (không thay đổi sau kết thúc hàm)  Tham chiếu

 Con trỏ  Ví dụ

struct DIEM { int x, y; };

void xuat1(int x, int y) { … }; void xuat2(DIEM diem) { … };

(37)

#37

KIỂU UNION

Khái niệm

 Được khai báo sử dụng cấu trúc

 Các thành phần union có chung địa chỉ đầu

(nằm chồng lên bộ nhớ)

Khai báo

union <tên kiểu union> {

<kiểu liệu> <tên thành phần 1>;

(38)

#38

… … … …

SO SÁNH STRUCT VÀ UNION

Ví dụ struct MYSTRUCT { char c; int n; } s;

s.c = 1; s.n = 2;

union MYUNION {

char c; int n; } u;

u.c = 1; u.n = 2;

01 02 00 00 00

c n

… c

n

… … … … … 01

(39)

#39

Ví dụ

struct union union date_tag

{

char full_date[9]; struct part_date_tag {

char month[2];

char break_value1; char day[2];

char break_value2; char year[2];

};

(40)

#40

Ví dụ

union struct struct generic_tag {

char type;

union share_tag {

char c; int i; float f; };

(41)

#41

Ngày đăng: 20/04/2021, 15:08

TÀI LIỆU CÙNG NGƯỜI DÙNG

  • Đang cập nhật ...

TÀI LIỆU LIÊN QUAN