30/09/2018, 16:29

lập trình C về con trỏ và cú pháp

  1. Con trỏ.
    a. Khái niệm.
    Con trỏ là một biến dùng để chứa địa chỉ của ô nhớ.

b. Cú pháp.
<kểu dữ liệu> *<tên con trỏ>;
Ví dụ: int *p, *p2; // con trỏ p, p2 thuộc kiểu int

c. Lấy địa chỉ, giá trị từ biến con trỏ.
p; // lấy địa chỉ của 1 con trỏ (không có toán tử &)
*p // lấy giá trị của ô nhớ mà con trỏ đang trỏ tới

  1. Con trỏ và mảng một chiều.
    a. Mối quan hệ giữa con trỏ và mảng một chiều.
    Trong C có mối quan hệ chặt chẽ giữa con trỏ và mảng một chiều.
    Các phần tử của mảng có thể được xác định nhờ chỉ số hoặc thông qua con trỏ.

b.Phép lấy địa chỉ.
Float a[15];
&a[i]; // lấy địa chỉ phần tử thứ a i

c.Tên mảng là một hằng địa chỉ.
Float a[10];
Tên mảng là một hằng địa chỉ.nó chính là địa chỉ của phần tử đầu tiên của mảng.
a tương đương với &a[0];
a+i tương đương với &a[i];
*(a+i) tương đương với a[i];

d.Nếu con trỏ p trỏ tới một phần tử a[k] nào đó.
P+i trỏ tới phần tử thứ i sau a[k], tức là a[k+i]
p-i trỏ tới phần tử thứ i trước a[k], tức là a[k-i]
*(p+i) tương đương với p[i].

e.Cấp phát, thu hồi bộ nhớ cho con trỏ.
Float a[40], *p;
P=a;
Lớp 10a1 có 40 hs. Cần 40 ô nhớ để lưu trữ thông tin của 40 học sinh.
Thêm 5 bạn chuyển vào. à cần thêm 5 ô nhớ đẻ lưu thông tin của 5 bạn hs mới.
Lúc này mảng không thể đáp ứng yêu cầu.
Vậy con trỏ là giải pháp tốt nhất.

Đế sử dụng con trỏ ta phải biết một số hàm sau được khai báo trong thư viện <stdlib.h>. nếu là TC thì có thể khai báo thư viên <alloc.h>
Void *malloc(size_t size);
Void calloc(size_t num, size_t size);
Void * realloc(void
ptr , size_t size);

Free();
Vi dụ: free §; // giải phóng vùng nhớ cho con trỏ p.

Bài tập bắt buộc
(yêu cầu sử dụng con trỏ)
Bài 1: nhập một mảng số thực từ bàn phím và sắp xếp theo thứ tự giảm dần.

Bài 2: nhập một mảng các số nguyên từ bàn phím.

• Tìm các số nguyên tố trong mảng và đếm xem có mấy số nguyên tố, vị trí của từng số.
• Tạo một mảng mới có giá trị các phần tử lần lượt là đảo ngược của mảng đã nhập.

Ví dụ: mảng A nhập từ bàn phím : 1 2 3 4 5.
Mảng B khai báo sẽ nhận giá trị 5 4 3 2 1.

• Tìm số chính phương trong mảng.

Bài tập bổ xung
(yêu cầu sử dụng con trỏ)
Bài 3: dùng mảng một chiều để lưu trữ các số nguyên dương lớn (có thể có hàng ngàn chữ số). Lập trình thực hiện các phép tính cộng, trừ và nhân hai số nguyên dương cỡ lớn.

Bài 4: Ba đại lý A,B,C bán 10 loại báo.Viết một chương trình nhập vào tên báo, lượng bán trong một tuần của mỗi đại lý đối với loại báo này. Tính tổng lượng bán của loại báo. Đưa toàn bộ thông tin ra một bảng với 5 cột: tên báo, lượng bán của từng đại lý, tổng số. Mỗi dòng ứng với một loại báo.
Côn thức:
Tổng lượng bán báo i=lượng bán loại báo i của đại lý A + lượng bán loại báo i của đại lý B + lượng bán loại báo i của đại lý C.

Bài 5: dùng mảng một chiều nhập dữ liệu từ bàn phím của các khách hàng gửi tiền vào ngân hàng: số tài khoản, số dư tiền gửi (có thể âm). Sắp xếp danh sách khách hàng theo số tài khoản tăng dần. Và in toàn bộ dữ liệu ra dưới dạng bảng, mỗi hàng là dữ liệu của một khách hàng, tính tổng số tiền dư của các khách hàng.

Nguyễn Minh Dũng viết 18:29 ngày 30/09/2018

This topic is now unlisted. It will no longer be displayed in any topic lists. The only way to access this topic is via direct link.

Bài liên quan
0