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

Ngôn Ngữ Lập Trình C Dữ Liệu Kiểu Cấu Trúc

55 332 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 55
Dung lượng 448,51 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Cấu trúc Khái niệm, định nghĩa  Khai báo cấu trúc  Đặt tên kiểu dữ liệu  Thao tác trên biến cấu trúc  Truyền biến cấu trúc cho hàm... Khái niệm, định nghĩa Cấu trúc: có thể thuộc n

Trang 1

NGÔN NGỮ LẬP TRÌNH C

Dữ liệu kiểu cấu trúc

Ninh Thị Thanh Tâm Khoa CNTT – HV Quản lý Giáo dục

Trang 3

Nội dung

 Cấu trúc

Trang 4

Cấu trúc

 Khái niệm, định nghĩa

 Khai báo cấu trúc

 Đặt tên kiểu dữ liệu

 Thao tác trên biến cấu trúc

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

Trang 5

Khái niệm, định nghĩa

 Cấu trúc:

có thể thuộc nhiều kiểu dữ liệu khác nhau

Trang 6

Khai báo cấu trúc

 Khai báo kiểu dữ liệu cấu trúc:

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

Trang 7

Ví dụ

struct sinhvien { char ho_ten[30]; float diemtb;

};

struct diem {

float x,y;

};

Trang 8

Khai báo cấu trúc (2)

 Khai báo biến cấu trúc:

struct <tên c ấu trúc> <tên biến cấu trúc>;

Ví dụ:

struct sinhvien sv, dssv[100];

struct diem p, q, dsdiem[50];

Trang 9

Khai báo cấu trúc (3)

 Khai báo đồng thời cấu trúc và biến cấu trúc:

struct [<tên c ấu trúc>] {

<khai báo các thành phần>

} <danh sách biến cấu trúc>;

Trang 10

phần là biến cấu trúc bên trong một cấu trúc lớn hơn

Trang 11

Đặt tên kiểu dữ liệu

 Từ khóa typedef

typedef <tên ki ểu đã có> <tên mới>;

<tên kiểu đã có> là kiểu dữ liệu muốn thêm

tên

<tên mới> là tên mới muốn đặt

hợp thành một tên duy nhất để dễ dàng khi viết

Trang 12

Ví dụ

typedef unsigned char byte;

đương với unsigned char

kiểu dữ liệu khác

Trang 14

Sử dụng typedef với cấu trúc

typedef struct sinhvien sv;

typedef struct sinhvien *ptr_sv;

 Cấu trúc struct sinhvien sẽ là sv

 Định nghĩa một kiểu con trỏ cấu trúc có tên là ptr_sv

 Khi đó:

 sv sv1, sv2, dssv[100]; ~ struct sinhvien sv1, sv2, dssv[100];

 ptr_sv ptrsv; ~ struct sinhvien *ptrsv;

Trang 15

Thao tác trên biến cấu trúc

 Truy cập thành phần trong cấu trúc

 Truy cập tới thành phần cấu trúc từ con trỏ cấu trúc

 Nhập dữ liệu cho biến cấu trúc

Trang 16

Truy cập thành phần trong cấu trúc

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

 Dấu chấm (.) là toán tử truy cập thành phần cấu trúc

 Nếu có nhiều cấu trúc lồng nhau thì sử dụng nhiều dấu (.) tương ứng

 p.x = 0; p.y = 5;

 dg1.dsdinh[10].x = 0; dg1.n = 10;

Trang 17

Truy cập thành phần cấu trúc từ con trỏ cấu trúc

 Nếu ptr là con trỏ cấu trúc, có 2 cách để truy cập tới thành phần của nó

(*ptr).<tên thành phần>

ptr-><tên thành phần>

Trang 18

Nhập dữ liệu cho biến cấu trúc

 Nhập dữ liệu qua biến trung gian

 Gán các giá trị nhập được cho các thành phần cần nhập

Trang 19

float temp;

clrscr();

Trang 21

// printf("DS Sv nhan hoc bong");

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

Trang 22

Phép gán giữa các biến cấu trúc

 Gán nội dung của một biến cấu trúc cho một biến cấu trúc khác cùng kiểu

Trang 23

}

Trang 24

Kết quả

Trang 25

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

 Truyền biến cấu trúc bằng tham trị

thực được sao chép sang vùng nhớ dành cho tham số hình thức

 Truyền biến cấu trúc bằng tham biến

Trang 26

Ví dụ

 Khai báo hai cấu trúc

tung độ

có kiểu điểm

nào

Trang 27

float dientich(tamgiac);

Trang 28

printf("Canh CA:%f\n", canh(tg.C,tg.A));

printf("Canh AB:%f\n", canh(tg.A,tg.B));

Trang 29

void nhap(tamgiac *temp){ float t;

printf("Nhap dinh A\n"); printf("x=");

Trang 30

float canh(diem p, diem q){

return (sqrt(pow(p.x-q.x,2.0)+pow(p.y-q.y,2.0)));}

float canhbp(diem p, diem q){

Trang 34

Ví dụ - LIFO

 Tạo danh sách móc nối gồm 100 số tự nhiên đầu tiên; in lại danh sách.

Trang 35

#include <stdio.h>

#include <conio.h> typedef struct mn { int so;

struct nn *next; } mn;

Trang 36

mn *ptmoi(int k){

mn *p;

p = (mn *)malloc(sizeof(mn)); p->so = k;

Trang 37

void inds(){

mn *p;

for (p=ds; p; p=p->next)

printf("%5d",p->so); puts("");

}

Trang 40

Ví dụ - LIFO

 Tạo ngẫu nhiên một dãy gồm 10 số

nguyên, các số nằm trong khoảng từ 0 đến 100, đưa vào một danh sách móc nối

 Sắp lại danh sách theo thứ tự giảm dần

 Xóa tất cả các số chẵn

Trang 41

p->next = ds;

ds = p;

}

}

Trang 42

void sapxep(){

mn *p, *t;

int x;

p = ds;

for (p = ds; p->next; p = p->next)

for (t = p->next; t; t=t->next)

if (p->so < t->so){

x = p->so;

p->so = t->so;t->so = x;

}}

Trang 43

void xoasau(mn *p){

if (p->next)

p->next = (p->next)->next; else

printf("Khong hop le"); }

Trang 44

Kết quả

Trang 45

Ví dụ - FIFO

 Đưa vào một danh sách móc nối thông tin tên và điểm của từng học sinh; nhập điểm chuẩn:

Trang 46

#include <stdio.h>

#include <alloc.h>

#include <stdlib.h> typedef struct {

char ten[20];

float diem;

} hocsinh;

typedef struct mn{ hocsinh hs;

struct mn *next; } ptr;

ptr *ds;

Trang 48

}

Trang 49

void inds(){

ptr *p;

for (p=ds; p; p=p->next)

printf("%s %6.1f\n",p->hs.ten,p->hs.diem); getch();

Trang 50

Cây tìm kiếm nhị phân

 Ví dụ:

Trang 53

void them(float x, node *p){

if (x==p->k) return;

if (x<p->k){

if (p->left)

them(x,p->left); else p->left = nutmoi(x); }

else{

if(p->right)

them(x,p->right); else p->right = nutmoi(x); }

}

Trang 54

}

Ngày đăng: 14/12/2016, 10:33

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w