Một mảng có một vài đặc tính riêng biệt và phải được khai báo khi sử
dụng chúng. Những đặc tính này bao gồm:
Lớp lưu trữ
Lớp lưu trữ
Kiểu dữ liệu của các phần tử mảng.
Tên mảng – xác định vị trí phần tử đầu tiên của mảng.
Tên mảng – xác định vị trí phần tử đầu tiên của mảng.
Kích thước mảng - một hằng số có
giá trị nguyên dương.
2.Quy tắc trong mảng ?
Tất cả các phần tử của một mảng có cùng kiểu. Điều này có nghĩa là, nếu một mảng được khai báo kiểu int, nó không thể chứa các phần tử có kiểu khác.
2.Quy tắc trong mảng ?
Tất cả các phần tử của một mảng có cùng kiểu. Điều này có nghĩa là, nếu một mảng được khai báo kiểu int, nó không thể chứa các phần tử có kiểu khác.
·
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. Sau đây là các tham chiếu hợp
lệ:
player[i];
/*Ở đó i là một biến, tuy nhiên cần phải chú ý rằng i nằm trong
miền giới hạn của chỉ số đã được khai báo cho mảng player*/
player[3]
= player[2] + 5;
player[0]
+= 2;
player[i
/ 2 + 1];
·
Kiểu dữ liệu của mảng có thể là int, char,
float, hoặc double.
3.Note về cách
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 nên dùng các mảng trước khi có sự khởi tạo thích hợp. Điều này là bởi vì không gian lưu trữ của mảng 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 khởi 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 các biến thông thườ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 nên dùng các mảng trước khi có sự khởi tạo thích hợp. Điều này là bởi vì không gian lưu trữ của mảng 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 khởi 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 các biến thông thường.
Trong đoạn mã lệnh sau, các phần tử của mảng được gán giá trị bằng các
dùng vòng lặp for.
int
ary[20], i;
for(i=0;
i<20; i++)
ary[i]
= 0;
Khởi tạo một mảng sử dụng vòng lặp for có thể được thực hiện với
một hằng giá trị, hoặc các giá trị được sinh ra từ một cấp số cộng.
4.Các mảng chuỗi kí
tự ?
Các mảng chuỗi/ký tự:
Các mảng chuỗi/ký tự:
Một chuỗi có thể được khai báo như là một 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 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ý
5.Nêu 1 vài ví
dụ hàm ?
Tên hàm
|
Chức
năng
|
strcpy(s1, s2)
|
Sao chép s2 vào s1
|
strcat(s1, s2)
|
Nối s2 vào cuối của s1
|
strlen(s1)
|
Trả về chiều dài của s1
|
strcmp(s1, s2)
|
Trả về 0 nếu s1 và s2 là giống
nhau; nhỏ hơn 0 nếu s1<s2; lớn hơn 0 nếu s1> s2
|
strchr(s1, ch)
|
Trả về một con trỏ trỏ đến vị trí
xuất hiện đầu tiên của ch trong s1
|
strstr(s1, s2)
|
Trả về một con trỏ trỏ đến vị trí
xuất hiện đầu tiên của chuỗi s2 trong chuỗi s1
|
6.Thế nào là 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.
7.Cách khởi tạo mảng đa chiều ?
Khởi tạo mảng đa chiều:
Khai báo mảng đa chiều có thể kết hợp với việc gán
các giá trị khởi tạo. Cần phải cẩn thận lưu ý đến thứ tự các giá trị khởi tạo
được gán cho các phần tử của mảng (chỉ có mảng external và static có thể được
khởi tạo). Các phần tử trong dòng đầu tiên của mảng hai chiều sẽ được gán giá
trị trước, sau đó đến các phần tử của dòng thứ hai, … Hãy xem sự khai báo mảng
sau:
int ary[3][4] ={1,2,3,4,5,6,7,8,9,10,11,12};
8.Cách khai báo mảng hai chiều và
chuỗi ?
Mảng hai chiều và chuỗi:
Mảng hai chiều và chuỗi:
Như chúng ta đã biết ở phần trước, một chuỗi có
thể được biểu diễn bằng mảng một chiều, kiểu ký tự. Mỗi ký tự trong chuỗi được
lưu trữ trong một phần tử của mảng. Mảng của chuỗi có thể được tạo bằng cách sử
dụng mảng ký tự hai chiều. Chỉ số bên trái xác định số lượng chuỗi, và chỉ số
bên phải xác định chiều dài tối đa của mỗi chuỗi. Ví dụ bên dưới khai báo một mảng
chứa 25 chuỗi và mỗi chuỗi có độ dài tối đa 80 ký tự kể cả ký tự null.
char
str_ary[25][80];
9. Ví dụ mảng hai chiều ?
Ví dụ minh hoạ cách sử dụng của một mảng hai chiều:
9. Ví dụ mảng hai chiều ?
Ví dụ minh hoạ cách sử dụng của một mảng hai chiều:
nhập một danh sách các tên và sau đó sắp xếp
chúng theo thứ tự bảng chữ cái.
#include <stdio.h>
#include <string.h>
#include <conio.h>
void main()
{
int i, n = 0;
int item;
char x[10][12];
char temp[12];
printf(“Enter each string on a separate line \n\n”);
printf(“Type ‘END’ when over \n\n”);
/* Read in the list of strings */
do
{
printf(“String %d: ”, n + 1);
scanf(“%s”, x[n]);
} while (strcmp(x[n++], “END”));
/*Reorder the list of strings */
n = n – 1;
for(item = 0; item < n - 1; ++item)
{
/* Find lowest of remaining strings */
for(i = item + 1; i < n; ++i)
{
if(strcmp(x[item], x[i]) > 0)
{
/*Interchange two strings*/
strcpy(temp, x[item]);
strcpy(x[item], x[i]);
strcpy(x[i], temp);
}
}
}
/* Display the arranged list of strings */
printf(“Recorded list of strings: \n”);
for(i = 0; i < n; ++i)
{
printf("\nString %d is %s", i + 1, x[i]);
}
}
10. Tóm tắt bài học ?
Ø Một mảng là một tập hợp các phần tử dữ liệu
có cùng kiểu được tham chiếu bởi cùng một tên.
Ø Mỗi phần tử của
mảng có cùng kiểu dữ liệu, cùng lớp lưu trữ và có cùng các đặc tính.
Ø Mỗi phần tử được
lưu trữ ở vị trí kế tiếp nhau trong bộ nhớ chính. Các phần tử dữ liệu được biết
như là các phần tử mảng.
Ø Chiều của mảng được xác định bởi số các chỉ số cần
thiết để định danh duy nhất mỗi phần tử.
Ø Các mảng có thể
có các kiểu dữ liệu như int, char, float, hoặc double.
Ø Phần tử của mảng
có thể được tham chiếu bằng cách sử dụng một biến hoặc một biểu thức số nguyên.
Ø Một mảng không
thể được khởi tạo, trừ khi mỗi phần tử được gán một giá trị riêng lẻ.
Ø Các mảng extern và static có thể được khởi tạo khi khai báo.
Ø Mảng hai chiều có
thể xem như là một mảng của các mảng một chiều.
tóm tắt s11 qua Xmind (Screenshot ):

---------------------------------------------------------------------
Gõ lại tất cả ví dụ Session 11 :
VD 11.1

VD 11.2

VD 11.3

VD 11.5

VD 11.6

_______________________________________________
Bài tập làm trước :
1.
Viết một chương trình để sắp xếp các tên sau đây theo
thứ tự abc.
George
Albert
Tina
Xavier
Roger
Tim
0 nhận xét:
Đăng nhận xét