Bài giảng Kỹ thuật lập trình Các cấu trúc dữ liệu cơ bản (tiếp) GV. Hà Đại Dương

32 347 0
Bài giảng Kỹ thuật lập trình Các cấu trúc dữ liệu cơ bản (tiếp)  GV. Hà Đại Dương

Đ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

Bài giảng Kỹ thuật lập trình do GV. Hà Đại Dương biên soạn trình bày về nội dung cấu trúc dữ liệu con trỏ (pointer), cấu trúc dữ liệu xâu ký tự (string),... Tài liệu hữu ích để cho các bạn sinh viên ngành Công nghệ thông tin bổ trợ thêm kiến thức lập trình của mình.

9/26/2016 Kỹ thuật lập trình Tuần - Các cấu trúc liệu (tiếp) Giáo viên: Hà Đại Dương duonghd@mta.edu.vn 9/26/2016 Nội dung • Mảng (array) - Bài trước • Con trỏ (pointer) • Xâu ký tự (string) 9/26/2016 9/26/2016 Con trỏ (Pointer) 9/26/2016 Con trỏ • Cho phép quản lý vùng nhớ: Ghi, đọc liệu từ vùng nhớ (như biến) • Biến thông thường int a; float b; char c a,b,c: Biến (thường), lưu giá trị • Biến trỏ (con trỏ): lưu địa vùng nhớ 9/26/2016 9/26/2016 Khai báo • Cú pháp Kiểu * Tên_Biến; • Ví dụ: int *pa; float *pb; char *pc; 9/26/2016 Địa giá trị • Ơ nhớ: Được xác định địa có giá trị • Ví dụ: Địa Giá trị FF01 678 FF02 34.1 … … – Tại địa chỉ: FF01 có giá trị 678 – Tại địac FF02 có giá trị 34.1 9/26/2016 9/26/2016 Địa giá trị … • Biến thường int a; float b; char c Quan tên -> Biết giá trị Địa Giá trị FF01 678 FF02 34.1 … … • Con trỏ: int *pa; float *pb; char *pc; Qua tên -> Biết địa nhớ 9/26/2016 Địa giá trị • Tốn tử &: Tác động đến địa biến (thường) – Cú pháp: &Tên_Biến_Thường – Ví dụ: &a, &b, &c • Tốn tử *: Tác động đến giá trị ô nhớ địa biến trỏ – Cú pháp: *Tên_Biến_Con_trỏ – Ví dụ: *pa, *pb, *pc 9/26/2016 9/26/2016 Ví dụ 9/26/2016 Ví dụ 1… 9/26/2016 10 9/26/2016 Ví dụ 9/26/2016 11 Ví dụ … 9/26/2016 12 9/26/2016 Cấp phát nhớ • Xét chương trình sau: 9/26/2016 13 Cấp phát nhớ … • Khi chạy báo lỗi Sử dụng pa chưa khởi tạo 9/26/2016 14 9/26/2016 Lý • Khi gặp khai báo trỏ -> chương trình chưa dành chỗ (ơ nhớ) để lưu giá trị nên Báo lỗi • Ở ví dụ trước có pa = &a nên *pa=190; Không báo lỗi 9/26/2016 15 Hàm malloc() • Con trỏ: Cho phép quản lý vùng nhớ (Ghi, đọc liệu từ vùng nhớ này) • Hàm malloc(n) – Cú pháp: void * malloc(n) – Trả địa (đầu) vùng nhớ n byte cấp phát (dạng void *) – Ví dụ: pa = (int *) malloc(4); pa = (int *) malloc(sizeof(int)); 9/26/2016 16 9/26/2016 Hàm calloc() • Hàm calloc(k,n) – Cú pháp: void * calloc(k,n) – Trong đó: • k: số phần tử • N: kích thước (byte) phần tử – Trả địa (đầu) vùng nhớ k*n (bytes) cấp phát – Ví dụ: pb = (float*) calloc(5,4) (hàm malloc(), calloc() có thư viện malloc.h ) 9/26/2016 17 Ví dụ 9/26/2016 18 9/26/2016 Ví dụ … 9/26/2016 19 Quản lý mảng trỏ • Trong ví dụ 3, lệnh Cấp phát “ô” nhớ, ô nhớ cho phép lưu trữ giá trị float • Khi pb quản lý danh sách nhớ mảng 9/26/2016 20 10 9/26/2016 Xâu ký tự (string) 9/26/2016 35 Định nghĩa • Xâu ký tự (hay chuỗi ký tự) dãy (hoặc mảng) ký tự liên tiếp kết thúc ký tự ‘\0’ (còn gọi ký tự NULL bảng mã ASCII) • Hằng xâu ký tự dãy ký tự nằm cặp “” • Ví dụ: “Ky thuat lap trinh” “Hoc vien Ky thuat Quan su” 9/26/2016 36 18 9/26/2016 Xâu ký tự … • Trong C++: có kiểu xâu ký tự string • Trong C: xâu cách tổ chức liệu (không phải kiểu) – Xâu mảng ký tự: char Ten[50]; char Ten[] =“Ky thuat lap trinh”; – Xâu trỏ ký tự char * Ten; (Trong phần xem xét khía cạnh of C) 9/26/2016 37 Nhập/Xuất xâu • Hàm puts(s) – Ý nghĩa: In (xuất) xâu ký tự s hình – Cú pháp: puts(s); • Hàm gets(s) – Ý nghĩa: Đọc (nhập) xâu ký tự từ bàn phím – Cú pháp: gets(s); – Ví dụ 9/26/2016 38 19 9/26/2016 9/26/2016 39 Ví dụ • Đến số ký tự trống (space bar) xâu vừa nhập • Hàm strlen(s): trả số ký tự xâu s • Viết chương trình (10 phút) 9/26/2016 40 20 9/26/2016 Ví dụ … 9/26/2016 41 Xâu ký tự • Khi xử lý ký tự -> Xâu mảng ký tự • Hơn thế: Xâu ký tự khơng mảng ký tự: – Các ký tự xâu có quan hệ với (khác với phần tử mảng) – Cộng xâu: “Sinh Vien” “Hoc vien KTQS” để “Sinh Vien Học vien KTQS” (khác với mảng) – … Xâu không mảng ký tự 9/26/2016 42 21 9/26/2016 Các hàm xử lý xâu • Hàm strcat() – Ý nghĩa: Cộng (nối) xâu thành – Cú pháp char *strcat(char *des, const char *source) – Nối xâu vào xâu – Ví dụ 9/26/2016 43 9/26/2016 44 22 9/26/2016 9/26/2016 45 Các hàm xử lý xâu … • Chuyển ký tự thành ký tự hoa – char toupper(char c) • Chuyển xâu thành hoa – char *strupr(char *s) • Chuyển xâu thành in thường – char *strlwr(char *s) • Sao chép (copy) xâu – char *strcpy(char *Des, const char *Source) 9/26/2016 46 23 9/26/2016 Các hàm xử lý xâu … • Sao chép n ký tự – char *strncpy(char *Des, const char *Source, size_t n) • Tìm kiếm nội dung – char *strstr(const char *s1, const char *s2) – Tìm kiếm xuất chuỗi s2 chuỗi s1 – Kết trả hàm trỏ đến phần tử chuỗi s1 có chứa chuỗi s2 giá trị NULL chuỗi s2 khơng có 9/26/2016 47 chuỗi s1 Ví dụ 9/26/2016 48 24 9/26/2016 Các hàm xử lý xâu … • So sánh xâu – int strcmp(const char *s1, const char *s2) – Hàm strcmp trả về: • Số âm: s1 < s2 • Khơng: s1 = s2 • Dương: s1>s2 • … 9/26/2016 49 Ví dụ • Đổi năm dương lịch thành năm âm lịch – Xem lại chương trình viết tuần – Chương trình 9/26/2016 50 25 9/26/2016 Ví dụ … 9/26/2016 51 Ví dụ • Viết chương trình đếm số từ đơn xâu Ví dụ: “Ky thuat lap trinh” có từ đơn • Viết chương trình (10) (Kiểm tra thảo luận) 9/26/2016 52 26 9/26/2016 Ví dụ 10 • Tạo dịng chữ chạy hình • Cách làm ?: Ví dụ với xâu “Ky thuat lap trinh ” – Chạy qua bên trái “Ky thuat lap trinh ” “y thuat lap trinh K” “ thuat lap trinh Ky” “thuat lap trinh Ky ” “huat lap trinh Ky t” … 9/26/2016 53 Ví dụ 10 … 9/26/2016 54 27 9/26/2016 Ví dụ 10 … • Để cảm nhận dịng chữ chạy ngang hình cần viết dòng “Ky thuat lap trinh ” “y thuat lap trinh K” “ thuat lap trinh Ky” vị trí • Lệnh system(“cls”) thư viện stdlib.h; cho phép xố hình đưa trỏ góc bên trái 9/26/2016 55 9/26/2016 56 28 9/26/2016 Ví dụ 10 … • Chưa thêm system(“cls”) • Thêm vào system(“cls”) 9/26/2016 57 Ví dụ 10 … • Để thực tạo hiệu ứng dịng chữ chạy ngang hình cần viết liên tục, liên tục dong “Ky thuat lap trinh ” “y thuat lap trinh K” “ thuat lap trinh Ky” … vị trí • Viết chương trình hồn chỉnh (10 phút) 9/26/2016 58 29 9/26/2016 Ví dụ 10 … 9/26/2016 59 Ví dụ 10 … • Chương trình đến dừng? • Muốn dừng người sử dụng nhấn phím bất kỳ? Làm nào? • Để tốc độ chữ chạy chậm hơn? Làm nào? • Để chữ chạy từ qua phải làm nào? 9/26/2016 60 30 9/26/2016 Bài tập 9/26/2016 61 Bài tập Viết chương trình thể dịng chữ chạy ngang hình từ phải qua trái Chuẩn hoá xâu họ tên người việt Đổi ngày tháng năm thành chữ Ví dụ 27/9/2016 đổi thành dòng chữ “Ngày hai mươi bảy tháng chín năm hai nghìn khơng trăm mười sáu” Nhập vào biểu thức đơn giản gồm toán hạng tốn tử, tính kết biểu thức 9/26/2016 62 31 9/26/2016 Bài tập nhà • Sử dụng hàm scanf() để đọc xâu ký tự có khó khăn gì? • Tìm hiểu làm tập cho tất hàm string.h • Tìm hiểu VS C/C++ làm để biết người sử dụng nhấn phím • Tìm hiểu VS C/C++ làm để giữ chậm khoảng thời gian đó? 9/26/2016 63 32 ... char *s2) – Hàm strcmp trả về: • Số âm: s1 < s2 • Khơng: s1 = s2 • Dương: s1>s2 • … 9/26/2016 49 Ví dụ • Đổi năm dương lịch thành năm âm lịch – Xem lại chương trình viết tuần – Chương trình 9/26/2016... 44 22 9/26/2016 9/26/2016 45 Các hàm xử lý xâu … • Chuyển ký tự thành ký tự hoa – char toupper(char c) • Chuyển xâu thành hoa – char *strupr(char *s) • Chuyển xâu thành in thường – char *strlwr(char... chương trình chuyển số nhị phân, bát phân, thập lục phân dạng thập phân Viết chương trình tính ma trận tổng C = A + B Viết chương trình tính ma trận tích C = A * B 9/26/2016 33 Bài tập nhà • Biểu

Ngày đăng: 16/05/2017, 16:13

Từ khóa liên quan

Tài liệu cùng người dùng

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

Tài liệu liên quan