Tải bản đầy đủ (.ppt) (25 trang)

Mảng (array) (NHẬP môn về lập TRÌNH SLIDE)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (179.75 KB, 25 trang )

Chương 7

Mảng
(array)

Presenter:

Nhập mơn về lập trình (C7)

Slide 1


Learning outcomes
L.O.5.1 – Khai báo được mảng các giá trị.
L.O.5.2 – Mô tả được cách tổ chức bộ nhớ của các phần tử trong mảng.
L.O.5.3 – Truy xuất được các phần tử của mảng và dùng nó trong biểu
thức.
L.O.5.4 – Hiểu được cách truyền một mảng vào hàm.

Nhập môn về lập trình (C7)

Slide 2


Dãy một chiều
 Nhập điểm của 10 sinh viên, sau đó sắp xếp điểm theo thứ tự tăng dần.
 Ví dụ: nhập 5, 6, 2, 10, 8, 5, 3, 6, 7, 1
xuất 1, 2, 3, 5, 5, 6, 6, 7, 8, 10
 Khai báo biến:
 int g1, g2, g2, g4, g5, g6, g7, g8, g9, g10;
Nhập điểm từ bàn phím


Sắp xếp điểm
In ra màn hình
 Mở rộng bài tốn cho 100, 1000 sinh viên???

Nhập mơn về lập trình (C7)

Slide 3


Dãy mợt chiều
 Dãy (cịn gọi là mảng) là một tập hợp các biến, gọi là phần tử, có cùng
một kiểu dữ liệu
 Truy xuất bằng tên dãy và vị trí phần tử (chỉ số - index)

Nhập mơn về lập trình (C7)

Slide 4


Dãy một chiều

Tên dãy (c)

Chỉ số đầu tiên là
zero
Chỉỉsốốcủ
ỉa
phầầ
n tửỉ


Nhập mơn về lập trình (C7)

c[ 0 ]

-45

c[ 1 ]

6

c[ 2 ]

0

c[ 3 ]

72

c[ 4 ]

1543

c[ 5 ]

-89

c[ 6 ]

0


c[ 7 ]

62

c[ 8 ]

-3

Slide 5


Dãy một chiều
 Cú pháp
 
type name[elements];
 
 Tên dãy phải phù hợp với quy tắc đặt tên cho định danh.
 Ví dụ:
 
int arMyArray[3];
char arStudentGrade[5];

 Câu lệnh khai báo thứ nhất cấp phát 3 phần tử cho arMyArray. Câu lệnh
khai báo thứ nhất cấp phát 5 phần tử cho arStudentGrade

Nhập môn về lập trình (C7)

Slide 6



Chỉ số của dãy
 Bắt đầu bằng zero (0)

• Mảng có 9 phần tử, chỉ số cao nhất là 8
 Phải là số khơng âm và có thể là biểu thức
int a = 2, b = 3;
c[ a + b ] += 2; // c[5] += 2

c[0] dùng để chỉ phần tử thứ nhất trong mảng c.
c[1] dùng để chỉ phần tử thứ hai trong mảng c.
c[2] dùng để chỉ phần tử thứ ba trong mảng c.

Nhập môn về lập trình (C7)

Slide 7


Chỉ số của dãy
void main(){
int c[9];
int a = 2, b = 3;
c[0] = 10;
c[1] = 5;
c[2] = 6;
c[a + b] = 19;
}

Nhập mơn về lập trình (C7)

Slide 8



Ví dụ về mảng
void main(){
char arStudent[5];
int i;
arStudent[0] = 'A';
arStudent[1] = 'B';
arStudent[2] = 'C';
arStudent[3] = 'D';
arStudent[4] = 'E';
for(i = 0; i<5; i++)
printf("%c ", arStudent[i]);
}

Nhập mơn về lập trình (C7)

Slide 9


Ví dụ về mảng
void main(){
char arStudent[5]={'A', 'B', 'C', 'D', 'E'};
int i;
for(i = 0; i<5; i++)
printf("%c ", arStudent[i]);
}

Nhập môn về lập trình (C7)


Slide 10


Ví dụ về mảng
void main(){
int a[12] = { 1, 3, 5, 4, 7, 2, 99, 16, 45, 67, 89, 45 };
int total = 0, i = 0;
for (i = 0; i < 12; i++ )
total += a[ i ];
printf("Total of array element values is %d", total);
}

Nhập mơn về lập trình (C7)

Slide 11


Dãy một chiều
Định nghĩa
 Dãy (array) là kiểu dữ liệu thuộc dạng ghép và dựa vào một
kiểu dữ liệu khác (kiểu cơ sở).
 Dãy là một bộ gồm nhiều phần tử cùng kiểu (kiểu cơ sở),
dùng chung một tên và phân biệt với nhau bởi chỉ số
(index).
Ví dụ :
int vector[10];
định nghĩa biến dãy có 10 phần tử int (vector[0] ÷ vector[9]).
vector

độ lớn = 10*4 = 40 byte


vector[0]

Nhập môn về lập trình (C7)

vector[9]

Slide 12


Mảng nhiều chiều
 C cho phép định nghĩa mảng nhiều chiều. Định nghĩa mảng hai chiều
bằng cách sử dụng 2 cặp dấu ngoặc đơn.
 Cách làm này có thể mở rộng cho các chiều lớn hơn. Mỗi khi tăng thêm
1 cặp dấu ngoặc đơn, số chiều tăng lên 1.
 
 Một số ví dụ về khai báo mảng
 
int a[1000];
// mảng 1 chiều
int b[3][5];
// mảng 2 chiều
int c[7][9][2];
// mảng 3 chiều
 
Trong ví dụ trên, a có 1000 phần tử, b có 3 × 5 = 15 phần tử, c có 7 × 9
× 2 = 126 phần tử.

Nhập mơn về lập trình (C7)


Slide 13


Mảng 2 chiều
 Các phần tử được lưu trữ trong một vùng nhớ liên tục.
 Đối với mảng b, có thể tưởng tượng các phần tử được bố trí như sau:
 

col 1
 
row 1 b[0][0]
row 2 b[1][0]
row 3 b[2][0]

col2

col3

col4

col5

b[0][1]
b[1][1]
b[2][1]

b[0][2]
b[1][2]
b[2][2]


b[0][3]
b[1][3]
b[2][3]

b[0][4]
b[1][4]
b[2][4]

Nhập môn về lập trình (C7)

Slide 14


 Chương trình này kiểm tra một ma trận 2 chiều có đối xứng hay khơng

#include<stdbool.h>
const int N = 3;
void main( )
{
int i, j;
int a[N][N];
bool symmetr = true;
for ( i=0; i< N; ++i)
for (j=0; jscanf(“%d”, &a[i][j]);

Nhập môn về lập trình (C7)

for(i= 0; ifor (j = i+1; j < N; j++){

if(a[i][j] != a[j][i]){
symmetr = false;
break;
}
}
if(!symmetr)
break;
}
if(symmetr)
printf("\nThe matrix is symmetric\n”);
else
printf("\nThe matrix is not symmetric\n”;
}

Slide 15


Dãy nhiều chiều
Định nghĩa
 Dãy nhiều chiều là dãy có từ 2 vùng chỉ số trở lên.
Ví dụ:
double matran[8][8];

định nghĩa biến matran là 1 dãy gồm 8x8 phần tử kiểu double
(matran[0][0], matran[0][1], . . ., matran[7][7]).

matran
matran[0][7]

matran[0][0]

độ lớn 512 byte

matran[7][7]

float diem[X][Y][Z];

định nghĩa biến dãy 3 chiều có X*Y*Z phần tử kiểu float dùng
trong giải tích 3 chiều. Tọa độ điểm gốc diem[0][0][0].

Nhập mơn về lập trình (C7)

Slide 16


Xử lý dãy
Khởi động trị ban đầu
 Khởi động lúc định nghĩa:
int so[5] = { 4,1,8,3,2};
sẽ gán so[0]=4, so[1]=1, so[2]=8, so[3]=3 và so[4]=2
 Khởi động sử dụng hằng mảng, xem ví dụ.

• Định nghĩa

• Khởi đợng

Nhập mơn về lập trình (C7)

Slide 17



Kiểu chuỗi (string)
 Trong C, chúng ta thường sử dụng mảng của những ký tự để biểu diễn
chuỗi. Chuỗi là mảng của những ký tự với ký tự kết thúc là ký tự null
(‘\0’).
 Chuỗi có thể được gán giá trị khi khai báo:
 
char strg[] = “C++”;
 
 Biến strg được gán giá trị ban đầu là “C++”. Lời khai báo tạo một mảng
gồm 4 phần tử lần lượt là ‘C’, ‘+’, ‘+’ và ‘\0’. Ký tự null (\0) đánh dấu kết
thúc chuỗi.
 Khai báo trên tự động xác định kích thước mảng dựa trên chuỗi gán.

Nhập mơn về lập trình (C7)

Slide 18


Kiểu chuỗi (string)
 Ký tự trong chuỗi được xử lý như phần tử dãy
Ví dụ:
hoten[8]='\r‘;
hoten[ i ]=hoten[ i + 4 ];

Nhập mơn về lập trình (C7)

Slide 19


Thư viện string.lib (string.h)

 Một số hàm xử lý chuỗi thường dùng
strcat / strncat : nối ghép 2 chuỗi.
strchr :
tìm ký tự trong một chuỗi.
strcmp / strncmp :
so sánh 2 chuỗi.
strcpy / strncpy :chép chuỗi.
strlen :
lấy chiều dài chuỗi (không kể ‘\0’).
strstr :
tìm chuỗi con trong chuỗi lớn.

Nhập mơn về lập trình (C7)

Slide 20


Kiểu chuỗi (string)
char FirstName[25];
char LastName[25];
char FullName[50];
strcpy(FirstName, “Mike”);
strcpy(LastName, “Thomson”);
strcpy(FullName, FirstName);
strcat(FullName, “ “);
strcat(FullName, LastName);

Nhập mơn về lập trình (C7)

Slide 21



Kiểu chuỗi (string)
printf("%s\n", FullName);
int n;
n = strcmp(FirstName, LastName);
if(n<0)
printf("%s is less than %s\n", FirstName, LastName);
else if(n ==0)
printf("%s is equal to %s\n", FirstName, LastName);
else
printf("%s is greater than %s\n", FirstName, LastName);

Nhập môn về lập trình (C7)

Slide 22


Kiểu ch̃i (string)

Nhập mơn về lập trình (C7)

Slide 23


Truyền tham số mảng
 Mảng có thể là tham số của một hàm như sau:
void nhapday(int a[]){
int i;
Khơng có chỉ số

for(i = 0; i<5; i++)
{
printf("Nhap phan tu a[%d]: ", i);
scanf("%d", &a[i]);
}
}
void inday(int a[]){
int i;
for(i = 0; i<5; i++)
{
printf("Phan tu a[%d] = %d\n", i, a[i]);
}
}

Nhập mơn về lập trình (C7)

Slide 24


Trùn tham số mảng
void main(){
int a[5];
nhapday(a);
inday(a);
}

Nhập mơn về lập trình (C7)

Slide 25



×