PDA

View Full Version : Lý thuyết " Giáo trình ngôn ngữ C Aptech"(Bài 10: Mảng - Lý thuyết)


x9nd
05-23-2009, 04:31 PM
Bài 10: Mảng - Lý thuyết

Giới thiệu

- Có thể bạn sẽ gặp khó khăn khi lưu trữ một tập hợp các phần tử dữ liệu giống nhau trong các biến khác nhau. Ví dụ, điểm cho tất cả 11 cầu thủ của một đội bóng đá phải được ghi nhận trong một trận đấu. Sự lưu trữ điểm của mỗi cầu thủ trong các biến có tên khác nhau thì chắc chắn phiền hà hơn dùng một biến chung cho chúng. Với mảng mọi việc sẽ được thực hiện đơn giản hơn. Một mảng là một tập hợp các phần tử dữ liệu có cùng kiểu. Mỗi phần tử được lưu trữ ở các vị trí kế tiếp nhau trong bộ nhớ chính. Những phần tử này được gọi là phần tử mảng.

1. Các phần tử mảng và các chỉ mục

- Mỗi phần tử của mảng được định danh bằng một chỉ mục hoặc chỉ số gán cho nó. Chiều của mảng được xác định bằng số chỉ số cần thiết để định danh duy nhất mỗi phần tử. Một chỉ số nguyên dương được bao bằng dấu ngoặc vuông [ ] đặt ngay sau trên mảng, không có khoảng trắng ở giữa. Một chỉ số chứa các giá trị bắt đầu bằng 0. Cấu trúc của việc khai báo mảng

Code:

Kiểu_dữ_liệu Tên_mảng [ biểu_thức_kích_thước ]

- Ở đây, biểu_thức_kích_thước là một biểu thức xác định số phần tử trong mảng và phải định ra một trị nguyên dương. Lớp_lưu_trữ là một tùy chọn. Mặc định lớp automatic được dùng cho mảng khai báo bên trong một hàm hoặc một khối lệnh, và lớp external được dùng cho mảng khai báo bên ngoài một hàm. Kiểu_dữ_liệu được dùng chỉ rõ kiểu dữ liệu thống nhất của các phần tử trong mảng và một mảng bao giờ cũng bằng đầu bằng chỉ số 0. Hầu hết các quy tắc đặt tên mảng là giống với quy tắc đặt tên biến. Một tên mảng và một tên biến không được giống nhau, nó dẫn đến sự nhập nhằng. Nếu một sự khai báo như vậy xuất hiện trong chương trình, trình biên dịch sẽ hiển thị thông báo lỗi.
- Một vài quy tắc với mảng:
+ Tất cả các phần tử của một mảng có cùng kiểu.
+ Mỗi phần tử của mảng có thể được sử dụng bất cứ nơi nào mà một biến được cho phép hay được yêu cầu.
+ Một phần tử của mảng có thể được tham chiêu đến bằng cách sử dụng một biến hoặc một biểu thức nguyên
+ Kiểu dữ liệu của mảng có thế là: int, char, float, hoặc double.

2. Việc quản lý mảng trong C:

- Một mảng được "đối xử" khác với một biến trong C. Thậm chí hai mảng có cùng kiểu và kích thước cũng không thể tương đương nhau. Hơn nữa, không thể gán một mảng trực tiếp cho một mảng khác. Thay vì thế, mỗi phần tử mảng phải được gán riêng lẻ tương ứng với từng phần tử của mảng khác. Các giá trị không thể được gán cho toàn bộ một mảng, ngoại trừ tại thời điểm khởi tạo.

a. Việc khởi tạo mảng

- Các mảng không được khởi tạo tự động, trừ khi mỗi phần tử mảng được gán một giá trị riêng lẻ, không được khởi tạo tự động, do đó dễ gây ra kết quả không lường trước. Mỗi khi các phần tử của một mảng chưa khởi tạo được sử dụng trong các biểu thức toán học, các giá trị đã tồn tại sẵn trong ô nhớ sẽ được sử dụng, các giá trị này không đảm bảo rằng có cùng kiểu như khai báo của mảng, trừ khi các phần tử của mảng được khai tạo một cách rõ ràng. Điều này đùng không chỉ cho các mảng mà còn cho biến thông thường.
- Trong trường hợp sự khởi tạo là tường minh, lớp extern hoặc static, các phần tử của mảng được bỏ qua khi khai báo, trình biên dịch sẽ xác định kích thước của mảng bằng cách đếm cac giá trị đang được khởi tạo.

b. Các mảng chuỗi / ký tự

- Một chuỗi có thể được khai báo như là mảng ký tự, và được kết thúc bởi một ký tự NULL. Mỗi ký tự của chuỗi chiếm 1 byte, và ký tự cuối cùng của chuối luôn là ký tự "\0". Ký tự "\0" được gọi là ký tự NULL. Nó là một mã thoát (escape sequence) tương tự như "\n", thay thế cho ký tự có giá trị 0. Vì "\0" luôn là ký tự cuối cùng của một chuỗi, nên các mảng ký tự phải có nhiều hơn một ký tự so với chiều dài tối đa mà chúng quản lý.
- Mặc dù C không cso kiểu dữ liệu chuỗi, nhưng no cho phép các hằng chuỗi. Một hằng chuỗi là một dãy các ký tự được đặt trong dấu nháy đôi " ". C hỗ trợ nhiều hàm cho chuỗi, các hàm này nằm trong thư viện chuẩn string.h. Một vài hàm được đưa ra trong bảng dưới này

<picture>

c. Mảng hai chiều

- Chúng ta đã biết thế nào là mảng một chiều. Điều này có nghĩa là các mảng chỉ có một chỉ số. Các mảng có thể có nhiều hơn một chiều. Các mảng đa chiều giúp dễ dàng trình bày các đối tượng đa chiều, chẳng hạn một đồ thị với các dòng và cột hay tọa độ màn hình của máy tính. Các mảng đa chiều được khai báo giống như các mảng một chiều, ngoại trừ có thêm một cặp dấu ngoặc vuông [ ] trong trường hợp mảng hai chiều. Một mảng ba chiều sẽ cần ba cặp ngoặc vuông...Một cách tổng quát đây là cách thức khai báo một mảng nhiều chiều.

Code:

Data_type ary[exp1][exp2][exp3]...[expN]

- Ở đó, ary là một mảng có kiểu dữ liệu là data_type, và exp1,exp2,exp3,...,expN là các biểu thức nguyên dướng xác định số phần tử của mảng được kết hợp với mỗi chiều.

Kết thúc bài 11 rồi, chuẩn bị ăn tết thôi mai chén nốt bài 12

Bài tập tự làm

1. Viết một chương trình để sắp xếp các tên sau đây theo thứ tự abc.

Code:

George
Albert
Tina
Xavier
Roger
Tim
William

2. Viêt một chương trình đếm số ký tự nguyên âm trong một dòng văn bản

3. Viết một chương trình nhập các số sau đây vào một mảng và đảo ngược mảng

Code:

34
45
56
67
89