CHNG 5 KIU CON TR V KIU CU





![Địa chỉ và phép toán & Ví dụ: string st="hello"; float a[]={5. 0, 4. Địa chỉ và phép toán & Ví dụ: string st="hello"; float a[]={5. 0, 4.](https://slidetodoc.com/presentation_image_h/b6a045d6f548cf26084e2c6ae0e0fd8c/image-6.jpg)







![Các phép toán trên con trỏ Ví dụ: int a[5]={1, 2, 3, 4, 5}; Các phép toán trên con trỏ Ví dụ: int a[5]={1, 2, 3, 4, 5};](https://slidetodoc.com/presentation_image_h/b6a045d6f548cf26084e2c6ae0e0fd8c/image-14.jpg)



















![Con trỏ cấu trúc struct Sinhvien { char Hoten[30], Gioitinh[5]; float Diem; } lop[50]; Con trỏ cấu trúc struct Sinhvien { char Hoten[30], Gioitinh[5]; float Diem; } lop[50];](https://slidetodoc.com/presentation_image_h/b6a045d6f548cf26084e2c6ae0e0fd8c/image-34.jpg)










![Con trỏ và mảng một chiều Ví dụ: int a[100]; int i, n, *p; Con trỏ và mảng một chiều Ví dụ: int a[100]; int i, n, *p;](https://slidetodoc.com/presentation_image_h/b6a045d6f548cf26084e2c6ae0e0fd8c/image-45.jpg)




![5. 6 Mảng con trỏ Khai báo mảng con trỏ kiểudữliệu *tênmảng[sốphầntử]; Tác dụng: 5. 6 Mảng con trỏ Khai báo mảng con trỏ kiểudữliệu *tênmảng[sốphầntử]; Tác dụng:](https://slidetodoc.com/presentation_image_h/b6a045d6f548cf26084e2c6ae0e0fd8c/image-50.jpg)
![5. 6 Mảng con trỏ Ví dụ: char *Hoten[35]; int i, n; cout<<"Nhap so 5. 6 Mảng con trỏ Ví dụ: char *Hoten[35]; int i, n; cout<<"Nhap so](https://slidetodoc.com/presentation_image_h/b6a045d6f548cf26084e2c6ae0e0fd8c/image-51.jpg)





- Slides: 56

CHƯƠNG 5: KIỂU CON TRỎ VÀ KIỂU CẤU TRÚC n Mục tiêu q Giới thiệu các kiến thức về kiểu Con trỏ và kiểu Cấu trúc: khái niệm, cách định nghĩa, khai báo biến con trỏ, biến cấu trúc, cách truy xuất dữ liệu bằng con trỏ và thao tác với từng thành phần của cấu trúc. Ngôn ngữ Lập trình C ++ 1/56

CHƯƠNG 5: KIỂU CON TRỎ VÀ KIỂU CẤU TRÚC n Nội dung q Kiểu con trỏ q Kiểu cấu trúc q Cấu trúc tự trỏ q Mảng cấu trúc q Con trỏ và mảng q Mảng con trỏ Ngôn ngữ Lập trình C ++ 2/56

5. 1 Kiểu Con trỏ - Địa chỉ và phép toán & - Khai báo biến con trỏ - Các phép toán trên con trỏ - Cấp phát và giải phóng bộ nhớ cho con trỏ Ngôn ngữ Lập trình C ++ 3/56


Địa chỉ và phép toán & Trường hợp, đối tượng là một biến, ta viết &Tenbien \Lấy địa chỉ của biến Yêu cầu: Xác định địa chỉ của đối tượng nếu là mảng, chuỗi ký tự? Ngôn ngữ Lập trình C ++ 5/56
![Địa chỉ và phép toán Ví dụ string sthello float a5 0 4 Địa chỉ và phép toán & Ví dụ: string st="hello"; float a[]={5. 0, 4.](https://slidetodoc.com/presentation_image_h/b6a045d6f548cf26084e2c6ae0e0fd8c/image-6.jpg)
Địa chỉ và phép toán & Ví dụ: string st="hello"; float a[]={5. 0, 4. 0, 3. 0, 2. 0, 1. 0}; int i; char b[1]={'a'}; cout<<&st<<endl; for (i=0; i<=4; i++) cout<<&a[i]<<endl; cout<<&a<<endl; cout<<&b<<endl; cout<<b[0]<<endl; Ngôn ngữ Lập trình C ++ 6/56

Khai báo biến con trỏ - Con trỏ là một biến chứa địa chỉ của biến khác. - Giả sử P là con trỏ chứa địa chỉ của biến x thì ta gọi p trỏ tới x hay x được trỏ bởi p. - Thông qua con trỏ, ta có thể làm việc được với nội dung của ô nhớ mà con trỏ đến. Ngôn ngữ Lập trình C ++ 7/56

Khai báo biến con trỏ - Cú pháp: kiểu_dữ_liệu *tên_biến_con_trỏ; Trong đó: - Kiểu_dữ_liệu là kiểu dữ liệu của ô nhớ mà ta muốn con trỏ tới. - Dấu (*) nhằm báo cho trình biên dịch biết đang làm việc với kiểu dữ liệu là kiểu con trỏ - tên_biến_con_trỏ cũng được đặt theo quy tắc đặt tên => Khai báo con trỏ có tên_biến_con_trỏ tới ô nhớ chứa dữ liệu có kiểu_dữ_liệu Ngôn ngữ Lập trình C ++ 8/56

Khai báo biến con trỏ - Sử dụng con trỏ Để con trỏ có tênbiếncontrỏ đến biến (ô nhớ) có kiểudữliệu ta cần pha i gán con trỏ tênbiếncontrỏ cho địa chỉ của biến(ô nhớ) cần trỏ đến: tênbiếncontrỏ = địa chỉ của ô nhớ (biến) cần trỏ tới Lưu ý: Không thể gán một hằng địa chỉ cụ thể cho biếncontrỏ Để lấy nội dung ô nhớ mà con trỏ tới ta sử dụng phép toán *. Ngôn ngữ Lập trình C ++ 9/56

Khai báo biến con trỏ Ví dụ: Ngôn ngữ Lập trình C ++ float a[]={5. 2, 4. 3, 3. 1, 2. 25, 1. 0}; int i=9, *q; float *p, *p 1; p=a; p 1=&a[3]; cout<<a<<endl; cout<<p 1<<endl; cout<<a[3]<<endl; cout<<*p 1<<endl; cout<<*p+*p<<endl; q=&i; cout<<q<<endl; 10/56

Các phép toán trên con trỏ + Phép gán: - Gán con trỏ với địa chỉ một biến - Gán các con trỏ với nhau (phải cùng kiểu) Ngôn ngữ Lập trình C ++ 11/56

Các phép toán trên con trỏ Ví dụ: int i=9, j=4, *p, *q; p=&i; q=&j; cout<<p<<endl; cout<<q<<endl; cout<<*p<<endl; cout<<*q<<endl; p=q; cout<<p<<endl; cout<<q<<endl; cout<<*p<<endl<<*q<<endl; Ngôn ngữ Lập trình C ++ 12/56

Các phép toán trên con trỏ + Phép tăng giảm địa chỉ: p+n: Con trỏ đến thành phần thứ n sau p p-n: Con trỏ đến thành phần thứ n trước p Một đơn vị tăng của con trỏ bằng kích thước của biến được trỏ. Chẳng hạn, biến có kiểu nguyên thì khi con trỏ tăng hay giảm một đơn vị tương đương với 2 bytes Ngôn ngữ Lập trình C ++ 13/56
![Các phép toán trên con trỏ Ví dụ int a51 2 3 4 5 Các phép toán trên con trỏ Ví dụ: int a[5]={1, 2, 3, 4, 5};](https://slidetodoc.com/presentation_image_h/b6a045d6f548cf26084e2c6ae0e0fd8c/image-14.jpg)
Các phép toán trên con trỏ Ví dụ: int a[5]={1, 2, 3, 4, 5}; int *p, i; p=a; cout<<p<<endl; cout<<*p<<endl; for (i=0; i<5; i++) { cout<<p+i<<endl; cout<<*(p+i)<<endl; } Ngôn ngữ Lập trình C ++ 14/56

Các phép toán trên con trỏ + Phép toán tự tăng, giảm: p++, p--, ++p, --p + Hiệu 2 con trỏ: p – q + Phép toán so sánh: <, <=, >, >=… Các phép toán này thường áp dụng cho các con trỏ đến các phần tử của cùng một mảng dữ liệu Ngôn ngữ Lập trình C ++ 15/56

Cấp phát và giải phóng bộ nhớ cho con trỏ - Cấp phát bộ nhớ: sử dụng toán tử new + Cấp phát tĩnh + Cấp phát động Cú pháp: p = new kieugiatri; p = new kieugiatri[so_phan_tu] Ngôn ngữ Lập trình C ++ 16/56

Cấp phát và giải phóng bộ nhớ cho con trỏ - Giải phóng bộ nhớ: sử dụng toán tử delete Cú pháp: delete p; delete[] p; Ngôn ngữ Lập trình C ++ 17/56

Cấp phát và giải phóng bộ nhớ cho con trỏ Ví dụ: int *p; cout<<"Nhap mot so nguyen : "; cin>>*p; cout<<*p<<endl; Ngôn ngữ Lập trình C ++ int *p; cout<<"Nhap mot so nguyen : "; p = new int; cin>>*p; cout<<*p<<endl; 18/56

Cấp phát và giải phóng bộ nhớ cho con trỏ Bài 1. Viết chương trình khai báo biến con trỏ kiểu nguyên. Sau đó, nhập vào một dãy gồm 10 số nguyên. Hiển thị dãy đó ra màn hình: - Theo thứ tự nhập vào - Theo thứ tự ngược lại Bài 2. Sử dụng con trỏ để nhập vào một dãy gồm n số thực. Sau đó: - Hiển thị dãy vừa nhập ra màn hình sau khi đã sắp xếp Ngôn ngữ Lập trình C ++ 19/56

5. 2 Kiểu cấu trúc - Kiểu cấu trúc là gì? - La m thê na o đê đi nh nghi a mô t câ u tru c? - Cách khai báo biê n cấu trúc? - La m thê na o đê la m viê c vơ i ca c tha nh phâ n cu a câ u tru c? Ngôn ngữ Lập trình C ++ 20/56

Khái niệm - Kiểu cấu trúc là kiểu dữ liệu bao gồm nhiều thành phần có kiểu khác nhau, mỗi thành phần được gọi là một trường (field) - Chă ng ha n, Sinh viên gô m nhiê u trươ ng: ma sinh viên, ho tên, nga y tha ng năm sinh, giơ i ti nh, quê qua n, … Ngôn ngữ Lập trình C ++ 21/56

Định nghĩa cấu trúc - Xác định các kiểu dữ liệu đơn giản của các biến thành phần được nhóm lại trong cấu trúc đó. - Cần chỉ ra: tên của cấu trúc và các thành phần của nó. Phân biệt thành phần này với thành phần khác thông qua kiểu dữ liệu, tên biến và kết thúc bằng dấu chấm phẩy (; ). Các thành phần của cấu trúc được đặt trong cặp dấu móc nhọn ({}) và dùng dấu chấm phẩy (; ) để kết thúc việc định nghĩa một cấu trúc. Ngôn ngữ Lập trình C ++ 22/56

Định nghĩa cấu trúc Cú pháp tổng quát để định nghĩa một kiểu cấu trúc như sau: struct Tên_kiểu_cấu_trúc { /*Bắt đầu một cấu trúc*/ <Kiểudl> <Biến 1>; <Kiểudl> <Biến 2>; ……. . <Kiểudl> <Biến n>; }; /*Kết thúc một cấu trúc Ngôn ngữ Lập trình C ++ 23/56

Định nghĩa cấu trúc Ví dụ: struct Ngaythang { unsigned int Ngay; unsigned int Thang; unsigned int Nam; }; Ngôn ngữ Lập trình C ++ //struct lồng nhau struct Sinhvien { char MSSV[10]; char Hoten[40]; struct Ngaythang Ngaysinh; char Gioitinh[5]; char Diachi[40]; }; 24/56

Khai báo biến cấu trúc Cú pháp khai báo biến kiểu cấu trúc: Tên_kiểu_cấu_trúc <Biến 1>, <Biến 2>, …; struct Ngaythang { unsigned int Ngay; unsigned int Thang; unsigned int Nam; }; Ngaythang Ngay_den, Ngay_di Ngôn ngữ Lập trình C ++ //Vừa định nghĩa vừa khai báo biến struct Ngaythang { unsigned int Ngay; unsigned int Thang; unsigned int Nam; }Ngay_den, Ngay_di; 25/56

Khai báo biến cấu trúc Lưu ý: - Có thể vừa khai báo vừa khởi tạo giá trị cho biến kiểu cấu trúc - Không được phép gán trực tiếp một bộ giá trị cụ thể cho một biến cấu trúc. Ngôn ngữ Lập trình C ++ 26/56

Khai báo biến cấu trúc Ví dụ: struct Ngaythang { unsigned int Ngay, Thang, Nam; }; Ngaythang Ngay_den={20, 04, 2010}; cout<<Ngay_den. Ngay<<endl; cout<<Ngay_den. Thang<<endl; cout<<Ngay_den. Nam<<endl; Ngôn ngữ Lập trình C ++ 27/56

Khai báo biến cấu trúc Ví dụ: struct Ngaythang { unsigned int Ngay, Thang, Nam; }; Ngaythang Ngay_den; Ngay_den={20, 04, 2010}; cout<<Ngay_den. Ngay<<endl; cout<<Ngay_den. Thang<<endl; cout<<Ngay_den. Nam<<endl; Ngôn ngữ Lập trình C ++ 28/56

Phạm vi của cấu trúc - Nê u kiểu struct được khai báo trước tất cả các hàm, nó có hiệu lực trong toàn bộ chương trình có sử dụng nó. - Nê u nó đặt bên trong một hàm, thì chỉ có hàm đó được dùng nó. - Thông thường kiểu cấu trúc được khai báo trong tệp tiêu đê (. h) và được sử dụng trong chương trình bằng lệnh #include. Ngôn ngữ Lập trình C ++ 29/56

Truy cập thành phần của cấu trúc - Nê u biê n cấu trúc là thành phần trực tiê p của một cấu trúc, ta truy cập theo cú pháp: Tên_biê n_cấu_trúc. tên_thành_phần - Nếu biến cấu trúc là thành phần trực tiếp của một cấu trúc mà bản thân cấu trúc này lại là thành phần của một cấu trúc khác lớn hơn, ta truy cập theo cú pháp: Tên_biến_cấu_trúc. tên_thành_ phần Tên_biến_cấu_trúc. tên_biến_cấu_tr úc. tên_thành_phần - Để làm việc với một biến cấu trúc, ta cần phải thao tác trên từng thành phần của nó. Ngôn ngữ Lập trình C ++ 30/56

Truy cập thành phần của cấu trúc Lưu y : Đối với cấu trúc, ta có thể gán 2 giá trị biến cấu trúc cho nhau. Phép gán này cũng tương đương với việc gán từng thành phần của cấu trúc Ngôn ngữ Lập trình C ++ 31/56

Truy cập thành phần của cấu trúc Ví dụ: struct Diem { int Mon 1, Mon 2, Mon 3; } sv, hs; cout<<"Nhap diem cho sinh vien!"<<endl; cout<<"Mon 1 : "; cin>>sv. Mon 1; cout<<"Mon 2 : "; cin>>sv. Mon 2; cout<<"Mon 3 : "; cin>>sv. Mon 3; hs = sv; cout<<“Tong diem : "<<sv. Mon 1+sv. Mon 2+sv. Mon 3<<endl; cout<<“Tong diem : "<<hs. Mon 1+hs. Mon 2+hs. Mon 3<<endl; Ngôn ngữ Lập trình C ++ 32/56

Con trỏ cấu trúc - Con trỏ cấu trúc là con trỏ chứa địa chỉ của một biến cấu trúc hoặc một vùng nhớ có kiểu cấu trúc nào đó. - Cách khởi tạo một con trỏ cấu trúc: + Gán địa chỉ của một biến cấu trúc cho một thành phần của mảng + Con trỏ được khởi tạo bằng việc sử dụng toán tử new để cấp phát bộ nhớ + Đối với con trỏ p trỏ đến mảng a, ta có thể truy cập đến các thành phần của phần tử mảng: p[i]. Hoten; (p+i)->Hoten; *(p+i). Hoten; Ngôn ngữ Lập trình C ++ 33/56
![Con trỏ cấu trúc struct Sinhvien char Hoten30 Gioitinh5 float Diem lop50 Con trỏ cấu trúc struct Sinhvien { char Hoten[30], Gioitinh[5]; float Diem; } lop[50];](https://slidetodoc.com/presentation_image_h/b6a045d6f548cf26084e2c6ae0e0fd8c/image-34.jpg)
Con trỏ cấu trúc struct Sinhvien { char Hoten[30], Gioitinh[5]; float Diem; } lop[50]; Sinhvien *p; cout<<"Nhap ho ten sinh vien thu 11: "; cin. getline(lop[10]. Hoten, 30); cout<<"Nhap gioi tinh : "; cin. getline(lop[10]. Gioitinh, 5); cout<<"Nhap diem : "; cin>>lop[10]. Diem; p = lop; cout<<p[10]. Hoten<<endl; cout<<(p+10)->Gioitinh<<endl; cout<<"Diem : "<<(*(p+10)). Diem<<endl; Ngôn ngữ Lập trình C ++ 34/56

Địa chỉ của các thành phần cấu trúc - Các thành phần của cấu trúc cũng giống như các biến. Do đó, việc lấy địa chỉ của các thành phần này cũng tương tự như với biến. Chẳng hạn: &Sinhvien. Hoten; &Lop[10]. Gioitinh; &(p->Diem); Ngôn ngữ Lập trình C ++ 35/56

5. 3 Cấu trúc tự trỏ Cách 1: typedef struct { struct Têncấutrúc tênbiếncấutrúc; Têncấutrúc các thành phần; tênbiếncấutrúc *contrỏ; }; Ngôn ngữ Lập trình C ++ 36/56

5. 3 Cấu trúc tự trỏ Cách 2: struct Têncấutrúc { các thành phần; Têncấutrúc *contrỏ; }; typedef Ngôn ngữ Lập trình C ++ Têncấutrúc tênbiếncấutrúc; 37/56

5. 3 Cấu trúc tự trỏ Cách 3: typedef struct tênbiếncấutrúc { các thành phần; tênbiếncấutrúc *contrỏ; }; Ngôn ngữ Lập trình C ++ 38/56

5. 3 Cấu trúc tự trỏ Cách 4: struct tênbiếncấutrúc { các thành phần; tênbiếncấutrúc *contrỏ; }; Ngôn ngữ Lập trình C ++ 39/56

5. 3 Cấu trúc tự trỏ Ví dụ: typedef struct SV sinhvien; SV struct SV { { char Hoten[30]; Diem; char Hoten[30]; float Diem; SV *tiep; sinhvien *tiep; }; Ngôn ngữ Lập trình C ++ }; typedef SV sinhvien; 40/56

5. 3 Cấu trúc tự trỏ Ví dụ: typedef struct sinhvien; { struct sinhvien { char Hoten[30]; float Diem; sinhvien *tiep; }; Ngôn ngữ Lập trình C ++ sinhvien *tiep; }; 41/56

5. 4 Mảng cấu trúc - Mảng cấu trúc là mảng mà kiểu phần tử của nó là kiểu cấu trúc. Ví dụ: ta xét khai báo sau struct sinhvien { ÞXây dựng danh sách sinh viên của lớp gồm n sinh viên. Ngôn ngữ Lập trình C ++ char Hoten[30]; float Diem; }; sinhvien SV[60]; 42/56

5. 5 Con trỏ và mảng - Con trỏ và mảng một chiều - Con trỏ và xâu ký tự Ngôn ngữ Lập trình C ++ 43/56

Con trỏ và mảng một chiều - Con trỏ có thể trỏ đến một biến hoặc một mảng. - Khi đó, địa chỉ của mảng chính là địa chỉ của phần tử đầu tiên của mảng a[0]. a+i là địa chỉ thành phần thứ i của mảng a. - Nếu cho con trỏ *p trỏ đến mảng a ta gán: p=a hoặc p=&a - Khi đó, giá trị dữ liệu của phần tử a[0] là *p=a[0], phần tử thứ i là *(p+i)=a[i]=*(a+i) Chú ý: ta có thể viết *(p+1), *(a+1), *(p++) nhưng không thể viết *(a++). Ngôn ngữ Lập trình C ++ 44/56
![Con trỏ và mảng một chiều Ví dụ int a100 int i n p Con trỏ và mảng một chiều Ví dụ: int a[100]; int i, n, *p;](https://slidetodoc.com/presentation_image_h/b6a045d6f548cf26084e2c6ae0e0fd8c/image-45.jpg)
Con trỏ và mảng một chiều Ví dụ: int a[100]; int i, n, *p; cout<<"Nhap so phan tu cua mang n= "; cin>>n; for (i=0; i<n; i++) { cout<<"a["<<i<<"]= "; cin>>a[i]; } cout<<"In cac gia tri vua nhap "<<endl; for (i=0; i<n; i++) cout<<a[i]; cout<<endl; for (p=a; p<a+n; p++) cout<<*p; cout<<endl; for (p=a, i=0; i<n; i++) cout<<*(p+i); cout<<endl; for (i=0; i<n; i++) cout<<*(a+i); cout<<endl; Ngôn ngữ Lập trình C ++ 45/56

Con trỏ và xâu ký tự Một con trỏ ký tự có thể xem như một xâu ký tự, trong đó xâu chính là tất cả các ký tự kể từ byte con trỏ đầu tiên đến byte “ ” gặp đầu tiên. Vì vậy, có thể khai báo các xâu dưới dạng con trỏ ký tự như sau: char *st; char *st 1=“Hello”; Ngôn ngữ Lập trình C ++ 46/56

Con trỏ và xâu ký tự Các hàm trên xâu vẫn được áp dụng như khai báo nó dưới dạng mảng ký tự. Tuy nhiên, ta có thể gán trực tiếp 2 xâu dưới dạng con trỏ. Ví dụ: char *st; *s=“Hello”; st = s; Ngôn ngữ Lập trình C ++ 47/56

Con trỏ và xâu ký tự Khi khai báo xâu dạng con trỏ, thì nó vẫn chưa cấp phát bộ nhớ cụ thể. Do đó, ta phải sử dụng toán tử new để xin cấp phát bộ nhớ cho xâu với độ dài cần thiết. Ví dụ 1: char *st, *s = new char[30]; strcpy(s, “Hello”); st = s; Ví dụ 2: char *st, *s = new char[30]; strcpy(s, “Hello”); st = new char[30]; strcpy(st, s); Ngôn ngữ Lập trình C ++ 48/56

5. 6 Mảng con trỏ Khái niệm chung - Mảng con trỏ là mảng mà các phần tử của nó là các con trỏ có cùng kiểu. - Do phần tử của mảng con trỏ là một con trỏ đến một mảng nào đó -> cho phép quản lý nhiều mảng dữ liệu cùng kiểu. Ngôn ngữ Lập trình C ++ 49/56
![5 6 Mảng con trỏ Khai báo mảng con trỏ kiểudữliệu tênmảngsốphầntử Tác dụng 5. 6 Mảng con trỏ Khai báo mảng con trỏ kiểudữliệu *tênmảng[sốphầntử]; Tác dụng:](https://slidetodoc.com/presentation_image_h/b6a045d6f548cf26084e2c6ae0e0fd8c/image-50.jpg)
5. 6 Mảng con trỏ Khai báo mảng con trỏ kiểudữliệu *tênmảng[sốphầntử]; Tác dụng: khai báo mảng con trỏ có số phần tử và kiểu dữ liệu được chỉ ra. Chú ý: mảng xâu ký tự là trường hợp riêng của mảng con trỏ nói chung, trong đó kiểu dữ liệu là kiểu char Ngôn ngữ Lập trình C ++ 50/56
![5 6 Mảng con trỏ Ví dụ char Hoten35 int i n coutNhap so 5. 6 Mảng con trỏ Ví dụ: char *Hoten[35]; int i, n; cout<<"Nhap so](https://slidetodoc.com/presentation_image_h/b6a045d6f548cf26084e2c6ae0e0fd8c/image-51.jpg)
5. 6 Mảng con trỏ Ví dụ: char *Hoten[35]; int i, n; cout<<"Nhap so sinh vien n= "; cin>>n; cin. ignore(); for (i=0; i<n; i++) { Hoten[i] = new char[40]; cin. getline(Hoten[i], 40); } cout<<"Xuat gia tri vua nhap: "<<endl; for (i=0; i<n; i++) cout<<Hoten[i]<<endl; Ngôn ngữ Lập trình C ++ 51/56

BÀI TẬP THỰC HÀNH 1. Cho p, q là các con trỏ đến ký tự c. Gán *p = *q + 1. Khi đó, có thể khẳng định *q = *p – 1? 2. Cho p, q là 2 con trỏ đến biến nguyên x = 10. Gán *p = *q + 5. Lúc này, giá trị của *p và *q là bao nhiêu? 3. Cho p, q, r, s là các con trỏ đến biến nguyên x = 5. Gán *q = *p + 1; *r = *q + 1; *s = *r + 1. *q = *s – 2. Hỏi giá trị của biến x là bao nhiêu? 4. Không dùng mảng, hãy nhập vào một dãy số nguyên sau đó xuất dãy ra màn hình theo thứ tự ngược lại. 5. Không dùng mảng, hãy nhập vào một dãy số nguyên sau đó in ra màn hình dãy đã được sắp xếp dãy theo chiều tăng (hoặc giảm) dần? Ngôn ngữ Lập trình C ++ 52/56

BÀI TẬP THỰC HÀNH 6. Dùng con trỏ, nhập giá trị vào cho một dãy các số thực. Sau đó, tìm và xuất ra màn hình phần tử lớn nhất và bé nhất có trong dãy. 7. Sử dụng con trỏ, nhập vào một dãy ký tự. Sau đó, tìm và thay thế các ký tự ‘a’ bằng ký tự ‘b’. Hiển thị ra màn hình dãy ký tự trước và sau khi thay thế. 8. Xây dựng hàm nhập, xuất, sắp xếp mảng bất kỳ bằng cách sử dụng biến con trỏ làm tham số hình thức của hàm. Sử dụng các hàm trên để viết chương trình nhập các giá trị vào cho mảng sau đó xuất ra màn hình các giá trị của mảng trước và sau khi sắp xếp 9. Sử dụng con trỏ để xây dựng hàm tính tổng 2 mảng. Sau đó, xuất ra màn hình kết quả tính được. Ngôn ngữ Lập trình C ++ 53/56

BÀI TẬP THỰC HÀNH 10. Sử dụng con trỏ, nhập vào một xâu ký tự. Sau đó, đếm và xuất ra màn hình tần suất xuất hiện các ký tự trong xâu. 11. Sử dụng con trỏ, nhập vào một xâu ký tự. Sau đó, đếm và xuất ra màn hình các từ có trong xâu. 12. Tính số ngày đã qua kể từ đầu năm cho đến ngày hiện tại. Quy ước ngày được khai báo dưới dạng cấu trúc. 13. Nhập một ngày tháng năm dưới dang cấu trúc. Tính chính xác (kể cả năm nhuận) số ngày đã qua bắt đầu từ ngày 1/ 1/ 1 đến ngày vừa nhập. 14. Khai báo ngày tháng năm theo kiểu cấu trúc. Viết chương trình tính khoảng cách (số ngày) giữa 2 tháng bất kỳ Ngôn ngữ Lập trình C ++ 54/56

BÀI TẬP THỰC HÀNH 15. Viết chương trình nhập vào một ngày tháng năm bất kỳ. Xuất ra màn hình ngày đó là thứ mấy nếu ta xem ngày 1/ 1/ 1 là thứ 2. 16. Viết chương trình nhập vào 2 ngày nào đó của tháng bất kỳ của năm bất kỳ. Tính và hiển thị ra màn hình khoảng cách giữa 2 ngày đó là bao nhiêu ngày. 17. Cho số phức dưới dạng cấu trúc gồm có 2 phần là phần thực và phần ảo. Viết chương trình nhập vào 2 số phức bất kỳ. Tính và xuất ra màn hình kết quả tổng, hiệu, tích, thương của chúng 18. Cho phân số dưới dạng cấu trúc gồm 2 phần là tử số và mẫu số. Viết chương trình nhập vào 2 phân số. Tính và hiển thị ra màn hình tổng, hiệu, tích, thương của chúng sau khi đã rút gọn. Ngôn ngữ Lập trình C ++ 55/56

BÀI TẬP THỰC HÀNH 19. Viết chương trình nhập vào một mảng sinh viên, thông tin về mỗi sinh viên gồm: Hoten, tuoi, quequan. Sắp xếp mảng vừa nhập theo chiều tăng dần của chuỗi. Sau đó, xuất ra màn hình mảng sau khi đã sắp xếp. 20. Cho hình chữ nhật dưới dạng cấu trúc gồm chiều dài và chiều rộng. Nhập vào một mảng các hình chữ nhật. Tính và xuất ra màn hình chu vi, diện tích tương ứng của mỗi hình. 21. Tạo danh sách gồm 10 số nguyên dương. Sau đó sắp xếp danh sách theo thứ tự tăng dần. 22. Tạo danh sách LIFO gồm 100 số nguyên tố đầu tiên 23. Tạo danh sách FIFO gồm n sinh viên, mỗi sinh viên được quản lý bởi: họ tên, tuổi, điểm trung bình. Sau đó sắp xếp danh sách sinh viên theo thứ tự giảm dần của điểm trung bình. Ngôn ngữ Lập trình C ++ 56/56
Chng finance
Con kiu
Vc bb
Kiu.osloskolen
Hai kiu
My kiu
Patro nia kiu estas en la ĉielo
Tin yu
Xin giữ con để con phụng sự chúa
Mejor es pobre con honor que rico con
Lluvia de palabras relacionadas con la paz
Problemi con le percentuali
Trabalenguas erre con erre guitarra erre con erre barril
Talleres para padres e hijos
Chúng con cầu xin nhờ đức kito con chúa
La silaba b
Si tu sales yo salgo
Con ca tụng chúa vì đã giải thoát con
Palabras con am em im om um con dibujos
Dettato ortografico classe terza primaria
Frases en ingles traducidas
Vocabulario geografico
M.barazimi.con
Adagio jelentése
Yo me alegre con los
Dios estaba con el
Creo en dios padre todopoderoso
Letra p imprenta y manuscrita
Man con 360
Vua giê xu đấng chúng con ngợi khen
Bid rent theory
Cabeza y cola de alexander calder
Escultura volumen lleno
Cuales son las vocales abiertas y fuertes
Completa con la palabra correcta
Vicios de diccion monotonia ejemplos
Las estaciones del via lucis
Cultivo una rosa blanca
Yo deduje
Verbos con cambio radical
Verbos com 9 letras
Estuvo del verbo estar
Cuento de la letra m
Momento de una fuerza ejemplos
Objeto en una oracion
Puntos suspensivos y comillas
Objetivos con h
El uso correcto de la v
Diferencia simétrica de intervalos
Unir con flechas pictograma
Integrales
Agua con aduccion
Ue privada del sur
Espirilo
Clasificacion oracion simple
Tipos de encaje
Verbos con cambio radical