1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng lập trình c chương 2 nguyễn minh thành

30 477 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 30
Dung lượng 236,96 KB

Nội dung

Các loại kiểu dữ liệu Kiểu dữ liệu cơ bản Là những kiểu dữ liệu đơn giản, không có cấu trúc thường được các ngôn ngữ lập trình cấp cao xây dựng sẵn như một thành phần của ngôn ngữ để gi

Trang 1

Kiểu dữ liệu

Trang 2

Kiểu dữ liệu

 Kiểu dữ liệu T được xác định bởi một bộ <V,O> , với :

V : tập các giá trị hợp lệ mà một đối tượng kiểu T có thể lưu trữ

O : tập các thao tác xử lý có thể thi hành trên đối tượng kiểu T

Ví du 1: Giả sử có kiểu dữ liệu mẫu tự = <Vc ,Oc> với

 Như vậy, muốn sử dụng một kiểu dữ liệu cần nắm vững cả nội dung

dữ liệu được phép lưu trữ và các xử lý tác động trên đó

Trang 4

Các loại kiểu dữ liệu

 Kiểu dữ liệu cơ bản

Là những kiểu dữ liệu đơn giản, không có cấu trúc thường được các ngôn ngữ lập trình cấp cao xây dựng sẵn như một thành phần của ngôn ngữ để giảm nhẹ công việc cho người lập trình.

 Kiểu có thứ tự rời rạc: số nguyên, ký tự

 Kiểu có thứ tự không rời rạc: số thực

Các kiểu cơ sở rất đơn giản và không thể hiện rõ sự tổ chức dữ liệu trong một cấu trúc, thường chỉ được sử̉ dụng làm nền để xây dựng các kiểu dữ̃ liệu phức tạp khác.

Trang 5

 Kiểu dữ liệu hướng giải quyết vấn đề

Những kiểu dữ liệu có cấu trúc hướng tới vấn đề cần giải quyết được xây dựng bằng cách kết nối các cấu trúc dữ liệu cơ bản

 Danh sách

 Hàng đợi

 Ngăn xếp

 Cấu trúc cây

Nếu dữ liệu được xữ lý theo thứ tự nhập thì hàng đợi được sử dụng Tương tự nếu

dữ liệu cần xữ lý theo thứ tự ngược với thứ tự nhập (tức nhập sau cùng xữ lý

trước) có thể dùng ngăn xếp, … Vì thế cấu trúc dữ liệu hướng vấn đề được xác định bởi thuật toán tương ứng.

Trang 6

Mảng 1 chiều

 Mảng thực chất là một biến được cấp phát bộ nhớ liên tục và bao

gồm nhiều biến thành phần

 Các thành phần của mảng là tập hợp các biến có cùng kiểu dữ

liệu và cùng tên Do đó để truy xuất các biến thành phần, ta dùng

cơ chế chỉ mục

Trang 7

Khởi gán giá trị ban đầu cho mảng:

<Kiểu dữ liệu> <Tên mảng> [<Kích thước>] = {Giá trị};

Ví dụ: int a[5] = {0};

Trang 8

Khai báo mảng

Cách 2: Con trỏ

Ý nghĩa: Khi ta khai báo một mảng với kiểu dữ liệu bất kì (int, float, char,…) thì

tên của mảng thực chất là một hằng địa chỉ của phần tử đầu tiên.

p = b; // p tro vao phan tu 0 cua mang b

 Với cách viết như trên thì ta có thể hiểu các cách viết sau là tương đương

p[i]  *(p + i)  b[i]  *(b+i)

Cấp phát: new

Giải phóng delete

Trang 10

Bài tập thực hành

 18 Viết hàm sắp xếp các phần tử lẻ tăng dần.

 19 Viết hàm sắp xếp các phần tử tại vị trí lẻ tăng dần.

 20 Viết hàm xoá phần tử tại vị trí lẻ trong mảng.

 21 Viết hàm xoá phần tử có giá trị lớn nhất trong mảng.

 22 Nhập vào giá trị X Viết hàm xoá tất cả các phần tử có giá trị nhỏ hơn X.

 23 Nhập vào giá trị X Viết hàm xoá phần tử có giá trị gần X nhất.

24 Viết hàm loại bỏ tất cả các phần tử có giá trị trùng nhau (chỉ giữ lại một phần

tử trong số các phần tử trùng)

 25 Viết hàm chèn phần tử có giá trị X vào vị trí đầu tiên của mảng.

 26 Viết hàm chèn phần tử có giá trị X vào phía sau phần tử có giá trị lớn nhất trong mảng.

 27 Viết hàm chèn phần tử có giá trị X vào trước phần tử có giá trị là số nguyên tố đầu tiên trong mảng.

Trang 11

Ý nghĩa khai báo 1 mảng kiểu ký tự tên là chuoi có 25 phần tử (như vậy tối

đa ta có thể nhập 24 ký tự vì phần tử thứ 25 đã chứa ký tự kết thúc chuỗi

‘\0’ )

Lưu ý: Chuỗi ký tự được kết thúc bằng ký tự ‘\0’ Do đó khi khai báo độ dài

của chuỗi luôn luôn khai báo dư 1 phần tử để chứa ký tự ‘\0’.

Trang 12

Khai báo

 Cách 2: Con trỏ

char *< Tên chuỗi >;

Trang 14

Các hàm thư viện – <string.h>

 Tính độ dài của chuỗi s

int strlen(char s[]);

 Sao chép nội dung chuỗi nguồn vào chuỗi đích

strcpy(char đích[], char nguồn[]);

 Chép n ký tự từ chuỗi nguồn sang chuỗi đích Nếu chiều dài nguồn

< n thì hàm sẽ điền khoảng trắng cho đủ n ký tự vào đích

strncpy(char đích[], char nguồn[], int n);

Trang 15

Các hàm thư viện – <string.h> (tt)

 Nối chuỗi s2 vài chuỗi s1

strcat(char s1[],char s2[]);

 Nối n ký tự đầu tiên của chuỗi s2 vào chuỗi s1

strncat(char s1[],char s2[],int n);

So sánh 2 chuỗi s1 và s2 theo nguyên tắc thứ tự từ điển Phân biệt

Trang 16

Các hàm thư viện – <string.h> (tt)

 So sánh n ký tự đầu tiên của s1 và s2, giá trị trả về tương tự hàmstrcmp()

int strncmp(char s1[],char s2[], int n);

 So sánh chuỗi s1 và s2 nhưng không phân biệt hoa thường, giá trịtrả về tương tự hàm strcmp()

int stricmp(char s1[],char s2[]);

 So sánh n ký tự đầu tiên của s1 và s2 nhưng không phân biệt hoathường, giá trị trả về tương tự hàm strcmp()

int strnicmp(char s1[],char s2[], int n);

Trang 17

Các hàm thư viện – <string.h> (tt)

 Tìm sự xuất hiện đầu tiên của ký tư c trong chuỗi s Trả về:

NULL: nếu không có

Địa chỉ c: nếu tìm thấy

char *strchr(char s[], char c);

 Tìm sự xuất hiện đầu tiên của chuỗi s2 trong chuỗi s1 Trả về:

NULL: nếu không có

Ngược lại: Địa chỉ bắt đầu chuỗi s2 trong s1

char *strstr(char s1[], char s2[]);

Trang 18

Các hàm thư viện – <string.h> (tt)

 Tách chuỗi:

 Nếu s2 có xuất hiện trong s1: Tách chuỗi s1 thành hai chuỗi: Chuỗi đầu là những ký tự cho đến khi gặp chuỗi s2 đầu tiên, chuỗisau là những ký tự còn lại của s1 sau khi đã bỏ đi chuỗi s2 xuất hiện trong s1

 Nếu s2 không xuất hiện trong s1 thì kết quả chuỗi tách vẫn là s1

char *strtok(char s1[], char s2[]);

Trang 19

Bài tập

 28 Đếm có bao nhiêu khoảng trắng trong chuỗi

 29 Nhập vào một chuỗi, hãy loại bỏ những khoảng trắng thừa trong chuỗi

 30 Nhập vào hai chuỗi s1 và s2, nối chuỗi s2 vào s1 Xuất chuỗi s1

Trang 20

Kiểu dữ liệu có cấu trúc

Cấu trúc thực chất là một kiểu dữ liệu do người dùng định nghĩa bằng cách gom nhóm các kiểu dữ liệu cơ bản có sẵn trong C thành một kiểu dữ liệu phức hợp nhiều thành phần

unsigned char ngay;

unsigned char thang;

int nam;

Trang 21

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

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

Trang 22

 Khai báo đệ qui

struct tên_struct

{

khai báo các thuộc tính;

struct tên_struct *tên_thuộc_tính_đệ_qui; };

Trang 23

 Tính khoảng cách giữa 2 ngày và so sánh 2 ngày và cho biết kết quả.

 57 Viết chương trình khai báo kiểu dữ liệu để biểu diễn một phân số Hãy viết hàm thực hiện

 những công việc sau:

 • Tính tổng, hiệu, tích, thương hai phân số.

 • Rút gọn phân số.

Trang 25

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 thường chứa rất nhiều thành phần nên khiviết chương trình loại này ta cần lưu ý:

 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, ta gọi lại hàm xử lý cho một kiểucấu trúc đã được xây dựng bằng cách dùng vòng lặp

Trang 26

Mảng 2 chiều

 Mảng hai chiều thực chất là mảng một chiều trong đó mỗi phần tử của mảng là một mảng một chiều, và được truy xuất bởi hai chỉ số dòng và cột

 Từ khái niệm trên ta có thể đưa ra một khái niệm về mảng nhiều

chiều như sau: mảng có từ hai chiều trở lên gọi là mảng nhiều

chiều.

Trang 27

int **A ; // Khai báo mảng động 2 chiều kiểu int

float **B ; // Khai báo mảng động 2 chiều kiểu float

Trang 30

Ma trận vuông

Đường chéo chính: chỉ số dòng = chỉ số cột

Đường chéo phụ: chỉ số cột + chỉ số dòng = kích thước - 1

Ngày đăng: 03/12/2015, 18:22

TỪ KHÓA LIÊN QUAN

w