Bài tập môn Kỹ thuật lập trình - Chương trình cả năm
Bài tập trong các bài
học
Ví dụ
char *pchar; short *pshort; long *plong;
pchar ++; pshort ++; plong ++;
Giả sử các địa chỉ ban đầu tương ứng của 3 con
trỏ là 100, 200 và 300, kết quả ta có các giá trị
101, 202 và 304 tương ứng
Nếu viết tiếp
plong += 5; => plong = 324
pchar -=10; => pchar = 91
pshort +=5; => pshort = 212
2
char *a;
short *b;
long *c;
Ví dụ
Các con trỏ a, b, c lần lượt trỏ tới ô
nhớ 1000, 2000 và 3000.
Cộng các con trỏ với một số nguyên:
a = a + 1;//con trỏ a dời đi 1 byte
b = b + 1;//con trỏ b dời đi 2 byte
c = c + 1; //con trỏ c dời đi 4 byte
Chú ý
++ và -- có độ ưu tiên cao hơn * nên *p++
tương đương với *(p++) tức là tăng địa chỉ mà
nó trỏ tới chứ không phải tăng giá trị mà nó chứa.
*p++ = *q++ sẽ tương đương với
*p = *q;
p=p+1;
q=q+1;
4
Ví dụ:
#include <iostream.h>
#include<conio.h>
void main ()
{
int a = 20, b = 15, *pa, *pb, temp;
pa = &a; // con trỏ pa chứa địa chỉ của a
pb = &b; // con trỏ pb chứa địa chỉ của b
temp = *pa;
*pa = *pb;
*pb = temp;
cout << "a = " << a << endl;
cout << “b = ” << b;
// kết quả xuất ra
màn hình
a = 15
b = 20
}
Con trỏ và mảng
•
Truy cập các phần tử mảng bằng con trỏ
Kiểu mảng
&<Tên mảng>[0]
Kiểu con trỏ
<Tên con trỏ >
&<Tên mảng> [<Vị <Tên con trỏ> + <Vị
trí>]
trí>
<Tên mảng>[<Vị
trí>]
*(< Tên con trỏ > +
<Vị trí>)
6
char ch[10], *p;
p = ch;
Ví dụ
•
•
p được gán địa chỉ của phần tử đầu tiên của mảng ch.
p = ch;
Để tham chiếu phần tử thứ 3 trong mảng ch, ta dùng một trong
2 cách sau:
•
•
ch[2]
*(p+2)
Ví dụ
#include <iostream.h>
#include <conio.h>
void main ()
{
int numbers[5], * p;
p = numbers; *p = 10;
p++; *p = 20;
p = &numbers[2]; *p = 30;
p = numbers + 3; *p = 40;
p = numbers; *(p+4) = 50;
for (int n=0; n<5; n++)
cout << numbers[n] << ", ";
}
Ví dụ
int
10
20
Numb
30
50
40
Numbers[5];
ers
int *p;
p
p
p
p
p
p= Numbers;
*p =
20
10;
*p =
20;
p++;
p =
*p = 30;
*p = 40;
&numbers[2];
p = numbers +
3;
p = numbers;
*(p+4) =
50;
Con trỏ và xâu
•
•
Ta có char tinhthanh[30] =“Da Lat”;
Tương đương :
char *tinhthanh;
tinhthanh=“Da lat”;
Hoặc: char *tinhthanh =“Da lat”;
•
Ngoài ra các thao tác trên xâu cũng tương tự
như trên mảng
*(tinhthanh+3) = “l”
•
Chú ý : với xâu thường thì không thể gán trực
tiếp như dòng thứ 3
10
Mảng các con trỏ
•
Một ưu điểm khác của mảng trỏ là ta có thể
hoán chuyển các đối tượng (mảng con, cấu
trúc..) được trỏ bởi con trỏ này bằng cách
hoán đổi các con trỏ
•
•
Ưu điểm tiếp theo là việc truyền tham số trong
hàm
Ví dụ: Vào danh sách lớp theo họ và tên, sau
đó sắp xếp để in ra theo thứ tự ABC.
11
Mảng các con trỏ
12
Con trỏ trỏ tới con trỏ
Ví dụ: in ra một ma trận vuông và cộng mỗi phần tử của
ma trận với 10
13
Bài tập
Viết chương trình tính tổng các phần tử
mảng sử dụng con trỏ
int main() {
int numArray[6];
int i, sum = 0;
int *ptr = numArray;
cout << "Nhap 6 phan tu: " << endl;
for (i = 0; i < 6; i++)
cin >> *(ptr+i);
ptr = numArray;
for (i = 0; i < 6; i++) {
sum = sum + *ptr;
ptr++;
}
cout << "Tong cac phan tu cua mang la: " << sum << endl;
return(0);
}
Bài tập
Xây dựng một hàm tính độ dài của chuỗi sử
dụng con trỏ.
Bài tập
Xây dựng một hàm tính độ dài của chuỗi sử dụng con
trỏ.
int string_ln(char*p) /* p=&str[0] */
{
int count = 0;
while (*p != '\0') {
count++;
p++;
}
return count;
}
Bài tập
Viết chương trình nhập vào n số nguyên,
thực hiện (sử dụng con trỏ):
-
Tính giá trị trung bình, giá trị min
max của các phần tử trong mảng
-
Sắp xếp các phần tử trong mảng theo
thứ tự tăng dần
Ví dụ
19
Bộ nhớ động cho mảng 2 chiều
•
•
Cách 1: Biểu diễn mảng 2 chiều thành mảng 1 chiều
Gọi X là mảng hai chiều có kích thước m dòng và n
cột. A là mảng một chiều tương ứng, khi đó
X[i][j] = A[i*n+j]
20
Tải về để xem bản đầy đủ
Bạn đang xem 20 trang mẫu của tài liệu "Bài tập môn Kỹ thuật lập trình - Chương trình cả năm", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
File đính kèm:
- bai_tap_mon_ky_thuat_lap_trinh_chuong_trinh_ca_nam.pdf
- KTLT Bai tap trong cac bai hoc.pptx