230 likes | 395 Views
CÂU HỎI : Cho biết kết quả thực thi chương trình sau:. void main() { int a=5, b=9; int* p1=&a; int* p2=&b; cout<<*p1<<“ “<<*p2; p2=p1; p1=&b; cout<<*p1<<“ “<<*p2; getch(); }. CHÖÔNG 7. POINTER. Nội dung : Định nghĩa -Khai báo. Các thao tác trên biến con trỏ.
E N D
CÂU HỎI: Cho biết kết quả thực thi chương trình sau: void main() { int a=5, b=9; int* p1=&a; int* p2=&b; cout<<*p1<<“ “<<*p2; p2=p1; p1=&b; cout<<*p1<<“ “<<*p2; getch(); }
CHÖÔNG 7 POINTER
Nội dung: • Định nghĩa -Khai báo. • Các thao tác trên biến con trỏ. • Con trỏ và mảng. • Thông số hình thức kiểu con trỏ. • Cấp phát động.
III. CON TRỎ VÀ MẢNG: 1. Truy xuất phần tử mảng thông qua biến con trỏ: Ví dụ: int a[4]; int* p=&a[0]; a[i] tương đương với *(p+i)
III. CON TRỎ VÀ MẢNG: 2. Tên biến mảng là hằng con trỏ: có trị bằng địa chỉ của phần tử đầu. Ví dụ: int a[4]; int i=2; khi đó a[i] tương đương *(a+i)
III. CON TRỎ VÀ MẢNG: 3. Tên thông số hình thức mảng tương đương biến con trỏ đối với hàm. Ví dụ: void nhap(int a[], int &n); giống: void nhap(int *a, int &n);
IV. THAY ĐỔI THÔNG SỐ THỰC BẰNG THÔNG SỐ HÌNH THỨC CON TRỎ: Ví dụ: void swap(int*pa, int* pb) { int tam; tam=*pa; *pa=*pb; *pb=tam; }
V. CẤP PHÁT ĐỘNG: 1. Khái niệm: • Biến đã học được đặt trong vùng nhớ tĩnh gọi là stack • Con trỏ có thể được cấp phát vùng nhớ trong lúc chương trình đang chạy ở trong heap 2. Toán tử new Cú pháp: biến_con_trỏ=new tên_kiểu[N]; Ý nghĩa: Cấp phát vùng nhớ đủ để lưu N biến kiểu tên_kiểu. Mặc định N=1 (khi không có N). 3. Toán tử delete Cú pháp: delete biến_con_trỏ; delete [] biến_con_trỏ; Ý nghĩa: Thu hồi vùng nhớ đã cấp phát cho biến_con_trỏ bằng new.
V. CẤP PHÁT ĐỘNG: Ví dụ: int * a; a=new int; int *p; p=new int[100]; .... delete a; delete [] p;
Ví dụ: Sử dụng mảng cấp phát động void main() { int *a,n; cin>>n; a=new int[n]; ... }
CHÖÔNG 8 STRING – STRUCT (CHUỖI & CẤU TRÚC) A. STRING
I. CƠ BẢN VỀ CHUỖI: 1. Chuỗi là mảng ký tự với phần tử cuối là ký tự ‘\0’ Ví dụ: char s[]={‘T’,’h’,’u’,’\0’}; 2. Hằng chuỗi là dãy ký tự đặt giữa cặp “..”, đã được cấp phát vùng nhớ. Ví dụ: char *s=“Thu”; char name[]=“Thu”;
II. TRUY XUẤT CHUỖI: Cách 1. Truy xuất giống mảng ký tự. Ví dụ: char s[]={‘T’,’h’,’u’,’\0’}; int i=0; while (s[i]!=‘\0’) cout<<s[i]; Cách 2. Sử dụng hàm chuỗi.
II. TRUY XUẤT CHUỖI: 1. Nhập chuỗi: Hàm cin.getline(char*s, int len, char kthúc=‘\n’) Ví dụ: char s[50]; cin.getline(s,50);
II. TRUY XUẤT CHUỖI: 2. Xóa đệm nhập: Hàm cin.ignore(int len, int kthúc=EOF) Ví dụ: cin.ignore(100,’\n’);
II. TRUY XUẤT CHUỖI: 3. Các hàm khác trong string.h: • strlen : chiều dài chuỗi • strcpy: sao chép chuỗi • strcmp: so sánh chuỗi • strstr, strchr: tìm chuỗi con • ...
II. TRUY XUẤT CHUỖI: 4. Các hàm khác trong ctype.h: • int islower(char) • char tolower(char) • ...
I. KHÁI NIỆM: B. STRUCT • Struct là kiểu có nhiều thành phần khác kiểu. • Mỗi thành phần gọi là field.
II. KHAI BÁO STRUCT: Cú pháp: struct [tên_kiểu_str] { ds_thành_phần } [ds_biến]; Ý nghĩa: Khai báo (define) kiểu cấu trúc, hoặc/và khai báo các biến kiểu cấu trúc Mỗi thành phần được viết giống kbáo biến.
II. KHAI BÁO STRUCT: Ví dụ: //Khai báo kiểu SinhVien struct SinhVien { int NamSinh; char HoTen[40]; float toan,ly,hoa; }; //Khai báo biến sv1kiểu SinhVien SinhVien sv1; SinhVien sv[200];
III. TRUY XUẤT STRUCT: - Được phép gán cấu trúc cho cấu trúc. • Thao tác đọc ghi khác chỉ thực hiện được trên từng field. Cú pháp: Tên_biến.tên_field Ví dụ: cin>>sv1.NamSinh; cin.getline(sv1.HoTen,40); cin>>sv1.toan; ...
IV. ĐỊNH NGHĨA KIỂU typedef Cú pháp: typedef mô_tả_kiểu tên_kiểu; Ý nghĩa: Định nghĩa kiểu tên_kiểu Ví dụ 1: typedef int age; age a; //a là biến kiểu int Ví dụ 2: typedef struct { float TuSo, MauSo; } PhanSo; PhanSo p;
ÔN THI TRẮC NGHIỆM: Toàn bộ nội dung của môn PPLT. ÔN THI THỰC HÀNH: Thuật toán trên mảng 1 chiều: 1. Liệt kê tất cả giá trị hoặc vị trí phần tử thoả điều kiện gì đó. 2. Tìm kiếm phần tử đầu tiên thỏa điều kiện. 3. Xóa các phần tử thỏa điều kiện. 4. Sắp xếp.