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

NGÔN NGỮ LẬP TRÌNH C - Mảng và chuỗi ký tự ppt

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 (191.61 KB, 39 trang )

Mảng và chuỗi ký tự
NGÔN NGỮ LẬP TRÌNH C
Trường Cao Đẳng Công Nghiệp Tuy Hoà
Khoa Công nghệ Thông tin
o0o
Mảng và chuỗi
Lập trình C
3
Wednesday, July 9, 2014
Giới thiệu

Tất cả các biến ta khai báo và sử dụng
cho đến trước bài này đều là biến đơn

Vậy làm cách nào để lưu N số, hay lưu
1 bảng gồm MxN số?

Làm cách nào xử lý hàng loạt các số
này?

Làm thế nào để lưu 1 dãy các ký tự?
Mảng và chuỗi
Lập trình C
4
Wednesday, July 9, 2014
Mảng

Một mảng:

Là 1 cấu trúc dữ liệu.


Gồm nhiều phần tử, nằm liền kề nhau
trong bộ nhớ.

Tất cả các phần tử trong mảng đều có
cùng tên, cùng kiểu dữ liệu và được phân
biệt với nhau thông qua chỉ số.

Chỉ số bắt đầu từ 0.
Mảng và chuỗi
Lập trình C
5
Wednesday, July 9, 2014
Mảng (2)
A
0 1 2 3 4 5
M
0 1 2
0
1
2
Mảng và chuỗi
Lập trình C
6
Wednesday, July 9, 2014
Mảng 1 chiều

Khai báo:
typename arrname[d];
typename arrname[d] = {[valuelist]};


Ghi chú:

d phải là 1 hằng số nguyên dương

valuelist có thể có hoặc không
Mảng và chuỗi
Lập trình C
7
Wednesday, July 9, 2014
1D – Ví dụ khai báo
1.int a[50];
2.float x[20], y[100], z;
3.#define N 100
int arr[N];
4.const int MAX=50;
float D[MAX];
5.int A[5] = {2,4,6,8,10};
6.int B[10] = {1,2,3,4,5};
7.int C[] = {3,5,7,9};
Mảng và chuỗi
Lập trình C
8
Wednesday, July 9, 2014
1D – Truy nhập từng phần tử

Truy nhập từng phần tử của mảng
arrname[index]

A[0] = 8 A[2] = 3


A[3] = 5 …

Mỗi phần tử trong mảng được xem như 1 biến
đơn có kiểu tương ứng với kiểu dữ liệu của
mảng
475368
A
0 1 2 3 4 5
Mảng và chuỗi
Lập trình C
9
Wednesday, July 9, 2014
1D – Duyệt mảng

Vòng lặp được sử dụng để lần lượt duyệt
qua tất cả các phần tử trong mảng.

Nhập mảng:
int a[100], N, i;
scanf(“%d”, &N);
for(i=0; i<N; i++) {
printf(“Input element %d:”,i);
scanf(“%d”, &a[i]);
}
Mảng và chuỗi
Lập trình C
10
Wednesday, July 9, 2014
1D – Nhập – Xuất – Tính tổng


Xuất mảng:
for(i=0; i<N; i++)
printf(“%5d”,a[i]);
printf(“\n”);

Tổng các phần tử trong mảng:
tong = 0;
for(i=0; i<N; i++)
tong += a[i];
printf(“Tong = %d\n”, tong);
Mảng và chuỗi
Lập trình C
11
Wednesday, July 9, 2014
1D – Một số bài toán trên mảng

Tìm max, min của cả mảng

Tìm kiếm 1 giá trị trong mảng

Tìm tuyến tính

Tìm nhị phân

Sắp xếp mảng

Thêm, xóa phần tử

Kiểm tra tính chất của mảng


Tách, trộn mảng

ect.
Mảng và chuỗi
Lập trình C
12
Wednesday, July 9, 2014
1D – Tìm phần tử lớn nhất

Lưu đồ:
max=a[0];
pos=0;
i=0;
i<N
Output max
Output pos
max<a[i]
max=a[i];
pos=i;
i=i+1
End
F
T
T
F
Mảng và chuỗi
Lập trình C
13
Wednesday, July 9, 2014
1D – SourceCode

max = a[0];
pos = 0;
for(i=1; i<N; i++)
if (max < a[i]) {
max = a[i];
pos = i;
}
printf(“Max at %d = %d”,pos,max);
Mảng và chuỗi
Lập trình C
14
Wednesday, July 9, 2014
1D – Tìm tuyến tính

Lưu đồ:
pos=-1;
i=0;
i<N
Output “Fail”
a[i]==X
i=i+1
End
F
T
T
F
Output pos
pos=i;
Mảng và chuỗi
Lập trình C

15
Wednesday, July 9, 2014
1D – SourceCode
pos =-1;
i = 0;
while (i<N) {
if (a[i]==X){
pos = i;
printf(“Found at %d!”,pos);
break;
}
i++;
}
if (i>=N)
printf(“Searching failed!”);
Mảng và chuỗi
Lập trình C
16
Wednesday, July 9, 2014
1D – SourceCode (2)
pos =-1;
i = 0;
while (i<N && pos==-1) {
if (a[i]==X) pos = i;
i++;
}
if (i>=N)
printf(“Searching failed!”);
else
printf(“Found at %d!”,pos);

Mảng và chuỗi
Lập trình C
17
Wednesday, July 9, 2014
1D – Sắp mảng tăng dần

Lưu đồ:
i=0;
i<N-1
Output a
End
F
Finding
min (i N-1)
Exchange
min & a[i]
i=i+1;
T
Mảng và chuỗi
Lập trình C
18
Wednesday, July 9, 2014
1D – SourceCode
for(i=0; i<N-1; i++) {
min=a[i]; pos=i;
for(j=i+1; j<N; j++)
if (min>a[j]) {
min=a[j]; pos=j;
}
t=a[i]; a[i]=a[pos]; a[pos]=t;

}
//Output a
Mảng và chuỗi
Lập trình C
19
Wednesday, July 9, 2014
1D – SourceCode (2)
for(i=0; i<N-1; i++)
for(j=i+1; j<N; j++)
if (a[i]>a[j]) {
t=a[i]; a[i]=a[j]; a[j]=t;
}
//Output a
Mảng và chuỗi
Lập trình C
20
Wednesday, July 9, 2014
1D – Demo về sắp xếp mảng
Java applet for Sorting Demo
Mảng và chuỗi
Lập trình C
21
Wednesday, July 9, 2014
1D – Kiểm tra mảng tăng

Lưu đồ:
i=0;
i<N-1
Output “Yes”
End

F
i=i+1;
T
a[i]>a[i+1]
T
Output “No”
F
Mảng và chuỗi
Lập trình C
22
Wednesday, July 9, 2014
1D – Kiểm tra mảng tăng
flag = 1;
for(i=0; i<N-1; i++)
if (a[i]>a[i+1]){
flag = 0;
break;
}
if (flag) printf(“Incremental!”);
else printf(“Non-incremental!”);
Mảng và chuỗi
Lập trình C
23
Wednesday, July 9, 2014
Mảng 2 chiều

Còn được gọi là ma trận

Là 1 bảng bao gồm M dòng và N cột, do
vậy có tổng cộng MxN ô (phần tử)


Mỗi dòng (cột) của ma trận là 1 mảng 1
chiều.

Do vậy, mảng 2 chiều còn được gọi là
“mảng của mảng”
Mảng và chuỗi
Lập trình C
24
Wednesday, July 9, 2014
2D - Khai báo

Khai báo:
typename arrname[MAXR][MAXC];
typename arrname[MAXR][MAXC] = {[valuelist]};

Ghi chú:

MAXR & MAXC phải là các hằng số
nguyên

valuelist có thể có hoặc không
Mảng và chuỗi
Lập trình C
25
Wednesday, July 9, 2014
2D – Ví dụ khai báo
1. int a[50][20];
2. float x[20][20], y[100], z;
3. #define N 100

int arr[N][N];
4. int A[3][3] = { {1,0,0},
{0,1,0},
{0,0,1} };
Mảng và chuỗi
Lập trình C
26
Wednesday, July 9, 2014
2D – Truy nhập từng phần tử

Truy nhập từng phần tử của ma trận
arrname[row][col]

A[0][0] A[0][1] A[0][2] …

A[1][0] A[1][1] A[1][2] …



Mỗi phần tử được xem như 1 biến đơn,
cùng kiểu với kiểu của mảng

×