Giáo trình Lập trình C - Chương 3: Mảng - Array
Mảng một chiều
Một số ví dụ
Khởi tạo mảng
Mảng ký tự
Mảng nhiều chiều
Bạn đang xem trước 20 trang tài liệu Giáo trình Lập trình C - Chương 3: Mảng - Array, để xem tài liệu hoàn chỉnh bạn click vào nút TẢI VỀ ở trên
3 Mảng – array
Nội dung
Mảng một chiều
Một số ví dụ
Khởi tạo mảng
Mảng ký tự
Mảng nhiều chiều
3. Mảng – array
Bài toán: Điểm môn THDC của các thành viên trong lớp được
nhập vào từ bàn phím. Hãy sắp xếp và đưa ra các điểm theo
thứ tự tăng dần.
printf ("Nhap diem thu 1\n");
scanf ("%f", &diem1);
printf ("Nhap diem thu 2\n");
scanf ("%f", &diem2);
. . .
3. Mảng – array
Mảng : là một tập hợp hữu hạn các phần tử có cùng kiểu dữ
liệu được lưu trữ kế tiếp nhau trong bộ nhớ.
Khai báo mảng:
kiểu_dữ_liệu tên_biến_mảng[số_phần_tử];
VD.
int A[10];
float bang_diem[50];
char bang_ky_tu[26];
3. Mảng – array
Truy cập vào một phần tử trong mảng :
bang_diem[5] : phần tử có chỉ số 5 trong mảng bang_diem
tên_biến_mảng[chỉ_số]
Chú ý:
Phần tử đầu tiên trong mảng có chỉ số là 0.
bang_diem[5] sẽ là phần tử thứ 6 trong mảng.
Phần tử cuối cùng trong mảng có chỉ số là
số_phần_tử-1
3. Mảng – array
Thao tác với các phần tử trong mảng như với số các biến thông
thường khác.
bang_diem[3]=7;
printf("Nhap vao diem thu 5: ");
scanf("%f",&bang_diem[4]);
bang_diem[5] = bang_diem[3] +1;
printf("Diem thanh vien thu 7: %.2f",
bang_diem[6]);
3. Mảng – array
Các phần tử trong mảng
được lưu trữ liên tục trong
bộ nhớ
int values[10];
value [0]
value [1]
value [2]
value [3]
value [4]
value [5]
value [6]
value [7]
value [8]
value [9]
3. Mảng – array
int values[10];
values[0] = 197;
values[2] = -100;
values[5] = 350;
values[3] =
values[0] +
values[5];
values[9] =
values[5] / 10;
--values[2];
197 value [0]
value [1]
-100 value [2]
547 value [3]
value [4]
350 value [5]
value [6]
value [7]
value [8]
35 value [9]
1
#include
int main (void)
{
int values[10];
int index;
values[0] = 197;
values[2] = -100;
values[5] = 350;
values[3] = values[0] + values[5];
values[9] = values[5] / 10;
--values[2];
for ( index = 0; index < 10; ++index )
printf ("values[%i] = %i\n", index,
values[index]);
return 0;
}
3. Mảng – array
Sử dụng mảng như bộ đếm:
VD. Để khảo sát chất lượng một loại sản phẩm mới nhà sản
xuất đưa ra tiêu chí đánh giá chất lượng sản phẩm theo giá trị
từ 0 đến 5 (0 là không biết, 1 là rất tồi, 2 là tồi, 3 là trung bình,
4 là tốt và 5 là rất tốt).
Các tiêu chí này được khách hàng đánh giá thông qua một cuộc
khảo sát tại một siêu thị, khoảng 5000 người đã được phỏng
vấn.
Bây giờ ta muốn thống kê kết quả của cuộc khảo sát.
#include
int main (void)
{
int ratingCounters[6], i, response;
for ( i = 0; i <= 5; ++i ) ratingCounters[i] = 0;
printf ("Tra loi cua ban\n");
for ( i = 1; i <= 20; ++i ) {
scanf ("%i", &response);
if ( response 5 )
printf ("Tra loi sai: %i\n", response);
else
++ratingCounters[response];
}
printf ("\n\nLoai So luong\n");
printf ("------ -------------------\n");
for ( i = 0; i <= 5; ++i )
printf ("%4i%14i\n", i, ratingCounters[i]);
return 0;
}
3. Mảng – array
Sắp xếp mảng: sắp xếp các phần tử của mảng theo thứ tự tăng
dần (hoặc giảm dần).
Các thuật toán sắp xếp: sắp xếp chèn, lựa chọn, nổi bọt,
shellsort, quicksort, mergesort, heapsort,.
3 5 2 7 8 5 1 Dãy ban đầu
1 2 3 5 5 7 8 Dãy cuối cùng
Thuật toán sắp xếp lựa chọn
3 5 2 7 8 5 1
3 5 2 7 8 5 1 3 5 2 7 1 5 8
3 5 2 7 1 5 8 3 5 2 5 1 7 8
3 5 2 5 1 7 8
1 2 3 5 5 7 8 Dãy cuối cùng
Dãy ban đầu
Bước 1
Bước 2
Bước
Thuật toán sắp xếp lựa chọn
Thuật toán sắp xếp lựa chọn:
Nếu mảng ban đầu có từ 2 phần tử trở lên (n>=2)
Gán giá trị k: k=n
Lặp: cho đến khi k=1 thì dừng
– Tìm phần tử có giá trị lớn nhất trong k phần tử ban
đầu.
– Đổi chỗ phần tử lớn nhất với phần tử thứ k
– Giảm k: k=k-1
Thuật toán sắp xếp lựa chọn
#include
int main (void)
{
int A[10]={1,4,2,8,12,4,28,4,23,10};
int i,k=10,tmp;
int viTriMax;
//in ra gia tri mang ban dau
for(i=0;i<10;i++)
printf("%d ",A[i]);
printf("\n");
while(k>1)
{
//tim gia tri lon nhat trong k phan tu
viTriMax=0;
for(i=1;i<k;i++)
if(A[i]>A[viTriMax]) viTriMax=i;
//doi cho voi phan tu thu k
tmp=A[viTriMax];
A[viTriMax]=A[k-1];
A[k-1]=tmp;
//giam k
k=k-1;
}
for(i=0;i<10;i++) printf("%d ",A[i]);
printf("\n");
return 0;
}
Tìm kiếm trên mảng
Bài toán: Tìm kiếm trên mảng
Đầu vào: Cho một mảng gồm n phần tử, và một giá trị khóa
k nào đó.
Đầu ra: Trả lời câu hỏi k có xuất hiện trong mảng
Có thể đầu ra sẽ là vị trí khóa k trong mảng hoặc số lần xuất hiện
của k trong mảng.
3 5 2 7 8 5 1 Mảng ban đầu
Khóa k 5
Câu trả lời: k có xuất hiện trong mảng
Tìm kiếm trên mảng
Thuật toán tìm kiếm tuần tự: so sánh lần lượt từng phần tử trên
mảng.
Nếu mảng có >0 phần tử
Gán giá trị biến found = 0 (để xác định xem đã tìm thấy
hay chưa)
Lặp: trong khi found =0 và chưa xét đến phần tử cuối
cùng
– So sánh giá trị phần tử hiện tại với k.
» Nếu đúng bằng thì gán biến found = 1.
» Ngược lại thì chuyển sang phần tử kế tiếp.
Tìm kiếm trên mảng
Tìm kiếm quần tự:
int found =0;
i=0;
while(i<n && !found)
{
if(A[i]==k) found = 1;
else i++;
}
3. Mảng – array
VD. Sinh dãy số Fibonacci
3. Mảng – array
// chuong trinh sinh 15 so Fibonacci dau tien
#include
int main (void)
{
int Fibonacci[15], i;
Fibonacci[0] = 0; // theo dinh nghia
Fibonacci[1] = 1;
for ( i = 2; i < 15; ++i )
Fibonacci[i] = Fibonacci[i-2] + Fibonacci[i-1];
for ( i = 0; i < 15; ++i )
printf ("%i\n", Fibonacci[i]);
return 0;
}
VD. Sử dụng mảng để tạo ra các số nguyên tố.
Số nguyên tố là số chỉ chia hết cho 1 và chính
nó.
Để kiểm tra một số n là nguyên tố:
Thử chia cho các số từ 2 đến n-1: chỉ thực hiện được
với n nhỏ, nếu n cỡ 10.000.000 thì quá chậm !
Nếu n là nguyên tố thì nó cũng không chia hết cho
các số nguyên tố khác.
Hãy cài đặt để in sinh ra 100 số nguyên tố đầu
tiên!
3. Mảng – array
Khởi tạo mảng
int integers[5] = { 0, 1, 2, 3, 4 };
int integers[] = { 0, 1, 2, 3, 4 };
char letters[5] = { 'a', 'b', 'c', 'd', 'e' };
float sample[5] = {3*c, 3+x, 5.0, 4.6, 8.2};
float sample_data[500] = { [2] = 500.5, [1] = 300.0,
[0] = 100.0 }; (*)
int a[10] = { [9] = x + 1, [2] = 3, [1] = 2, [0] = 1 }; (*)
(*) chỉ có trong C99 (devC++,)
3. Mảng – array
Mảng ký tự:
#include
int main (void)
{
char word[] = { 'H', 'e', 'l', 'l', 'o', '!' };
int i;
for ( i = 0; i < 6; ++i )
printf ("%c", word[i]);
printf ("\n");
return 0;
}
3. Mảng – array
VD. Chương trình chuyển đồi cơ số, đổi số từ hệ cơ số 10 sang các hệ cơ số
khác.
#include
int main (void)
{
const char baseDigits[16] = {
'0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
int convertedNumber[64];//so chuyen doi
long int numberToConvert;//so ban dau
int nextDigit, base, index = 0;
// doc vao so va co so chuyen doi
printf ("So can chuyen? ");
scanf ("%ld", &numberToConvert);
printf ("He co so moi? ");
scanf ("%i", &base);
// chuyen sang he co so moi
do {
convertedNumber[index] = numberToConvert %
base;
++index;
numberToConvert = numberToConvert / base;
}
while ( numberToConvert != 0 );
// Hien thi ket qua the thu tu nguoc
printf ("So da chuyen doi = ");
for (--index; index >= 0; --index ) {
nextDigit = convertedNumber[index];
printf ("%c", baseDigits[nextDigit]);
}
printf ("\n");
return 0;
}
3. Mảng – array
Mảng nhiều chiều: C cho phép khai báo mảng nhiều chiều.
VD. Mảng hai chiều
Khai báo : kiểu_phần_tử tên_mảng[số_hàng][số_cột];
Truy cập vào phần tử: tên_mảng[i,j]
1 23 10 -3 0
3 1 78 9 2
0 23 0 34 1
100 9 123 39 -5
Cột (j) 0 1 2 3 4
Hàng (i)
0
1
2
3
3. Mảng – array
Khởi tạo mảng
int M[4][5] = {
{ 10, 5, -3, 17, 82 },
{ 9, 0, 0, 8, -7 },
{ 32, 20, 1, 0, 14 },
{ 0, 0, 8, 7, 6 }
};
int M[4][5] = { 10, 5, -3, 17, 82, 9, 0, 0,
8, -7, 32, 20, 1, 0, 14, 0, 0, 8, 7, 6 };
3. Mảng – array
VD. Thông tin về bán hàng của một của hàng tại các thời
điểm trong ngày (sáng, chiều và tối) của một tuần được
lưu vào một mảng.
Hãy in ra thông tin về số lượng sản phẩm bán ra trung
bình tại các thời điểm trong ngày của tuần đó
#include
int main (void)
{
int slBan[3][7];
int i,j,tSang=0,tChieu=0,tToi=0;
printf("Nhap so luong san pham ban trong tuan\n");
for(j=0;j<7;j++)
{
printf("Ngay thu %i:",j+1);
printf("So luong(Sang,chieu va toi ):");
scanf("%i%i%i",&slBan[0][j],&slBan[1][j],
&slBan[2][j]);
}
printf("\n\nThong ke trong tuan\n");
for(j=0;j<7;j++) printf("Ngay %i ",j+1);
printf("\n");
printf("------------------------------------------
-------------\n");
for(j=0;j<7;j++) printf("%5i ", slBan[0][j]);
printf("\n");
for(j=0;j<7;j++) printf("%5i ",slBan[1][j]);
printf("\n");
for(j=0;j<7;j++) printf("%5i ",slBan[2][j]);
printf("\n");
for(j=0;j<7;j++){
tSang=tSang+slBan[0][j];
tChieu=tChieu+slBan[1][j];
tToi=tToi+slBan[2][j];
}
printf("\n\nTrung binh trong tuan:\n");
printf("Sang: %.2f\n",(float)tSang/7);
printf("Chieu: %.2f\n",(float)tChieu/7);
printf("Toi: %.2f\n",(float)tToi/7);
return 0;
}
File đính kèm:
chapter3.Array.pdf
Examples.Chapter3.pdf



