Bài giảng Tin học đại cương - Phần 3: Mảng

10/14/2010  
Ni dung  
Mng mt chiu  
Mt sví dụ  
3 Mng – array  
Khi to mng  
Mng ký tự  
Mng nhiu chiu  
3. Mng – array  
3. Mng – array  
Bài toán: Đim môn THDC ca các thành viên trong lp được  
nhp vào tbàn phím. Hãy sp xếp và đưa ra các đim theo  
thttăng dn.  
Mng : là mt tp hp hu hn các phn tcó cùng kiu dữ  
liu được lưu trkế tiếp nhau trong bnh.  
Khai báo mng:  
printf ("Nhap diem thu 1\n");  
scanf ("%f", &diem1);  
printf ("Nhap diem thu 2\n");  
scanf ("%f", &diem2);  
. . .  
kiu_d_liu tên_biến_mng[s_phn_t];  
VD.  
int A[10];  
float bang_diem[50];  
char bang_ky_tu[26];  
1
10/14/2010  
3. Mng – array  
3. Mng – array  
Thao tác vi các phn ttrong mng như vi scác biến thông  
thường khác.  
Truy cp vào mt phn ttrong mng :  
bang_diem[5] : phn tcó chs5 trong mng bang_diem  
bang_diem[3]=7;  
tên_biến_mng[ch_s]  
printf("Nhap vao diem thu 5: ");  
Chú ý:  
scanf("%f",&bang_diem[4]);  
Phn tử đầu tiên trong mng có chslà 0.  
bang_diem[5] slà phn tth6 trong mng.  
bang_diem[5] = bang_diem[3] +1;  
Phn tcui cùng trong mng có chslà  
s_phn_tử‐1  
printf("Diem thanh vien thu 7: %.2f",  
bang_diem[6]);  
3. Mng – array  
3. Mng – array  
value [0]  
value [0]  
value [1]  
value [2]  
value [3]  
value [4]  
value [5]  
value [6]  
value [7]  
197  
int values[10];  
Các phn ttrong mng  
value [1]  
được lưu trliên tc trong  
bnhớ  
value [2]  
value [3]  
value [4]  
value [5]  
value [6]  
value [7]  
101  
values[0] = 197;  
values[2] = -100;  
values[5] = 350;  
547  
int values[10];  
values[3] =  
values[0] +  
values[5];  
350  
35  
values[9] =  
values[5] / 10;  
value [8]  
value [9]  
value [8]  
value [9]  
--values[2];  
2
10/14/2010  
#include <stdio.h>  
3. Mng – array  
int main (void)  
{
int values[10];  
int index;  
Sdng mng như bộ đếm:  
values[0] = 197;  
values[2] = -100;  
values[5] = 350;  
values[3] = values[0] + values[5];  
values[9] = values[5] / 10;  
--values[2];  
VD. Để kho sát cht lượng mt loi sn phm mi nhà sn  
xut đưa ra tiêu chí đánh giá cht lượng sn phm theo giá trị  
t0 đến 5 (0 là không biết, 1 là rt ti, 2 là ti, 3 là trung bình,  
4 là tt và 5 là rt tt).  
Các tiêu chí này được khách hàng đánh giá thông qua mt cuc  
kho sát ti mt siêu th, khong 5000 người đã được phng  
vn.  
for ( index = 0; index < 10; ++index )  
printf ("values[%i] = %i\n", index,  
values[index]);  
Bây gita mun thng kê kết quca cuc kho sát.  
return 0;  
}
#include <stdio.h>  
int main (void)  
{
3. Mng – array  
int ratingCounters[6], i, response;  
Sp xếp mng: sp xếp các phn tca mng theo thttăng  
dn (hoc gim dn).  
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 < 0 || response > 5 )  
printf ("Tra loi sai: %i\n", response);  
else  
3
1
5
2
2
3
7
5
8
5
5
7
1
8
Dãy ban đầu  
Dãy cui cùng  
++ratingCounters[response];  
}
Các thut toán sp xếp: sp xếp chèn, la chn, ni bt,  
printf ("\n\nLoai  
So luong\n");  
shellsort, quicksort, mergesort, heapsort,….  
printf ("------ -------------------\n");  
for ( i = 0; i <= 5; ++i )  
printf ("%4i%14i\n", i, ratingCounters[i]);  
return 0;  
}
3
10/14/2010  
Thut toán sp xếp la chn  
Thut toán sp xếp la chn  
3
5
2
7
8
5
1
Dãy ban đầu  
Thut toán sp xếp la chn:  
Nếu mng ban đầu có t2 phn ttrlên (n>=2)  
. Gán giá trk: k=n  
Bước 1  
3
3
5
5
2
2
7
8
5
1
3
3
5
5
2
2
7
5
1
1
5
7
8
8
. Lp: cho đến khi k=1 thì dng  
– Tìm phn tcó giá trln nht trong k phn tban  
đầu.  
7
5
1
1
5
7
8
8
Bước 2  
Bước …  
Đổi chphn tln nht vi phn tthk  
Gim k: k=k1  
3
5
2
Dãy cui cùng  
1
2
3
5
5
7
8
while(k>1)  
Thut toán sp xếp la chn  
{
//tim gia tri lon nhat trong k phan tu  
viTriMax=0;  
for(i=1;i<k;i++)  
#include <stdio.h>  
int main (void)  
{
if(A[i]>A[viTriMax]) viTriMax=i;  
//doi cho voi phan tu thu k  
tmp=A[viTriMax];  
A[viTriMax]=A[k1];  
A[k1]=tmp;  
int A[10]={1,4,2,8,12,4,28,4,23,10};  
int i,k=10,tmp;  
int viTriMax;  
//giam  
k=k1;  
k
//in ra gia tri mang ban dau  
for(i=0;i<10;i++)  
printf("%d ",A[i]);  
}
for(i=0;i<10;i++) printf("%d ",A[i]);  
printf("\n");  
return 0;  
printf("\n");  
}
4
10/14/2010  
Tìm kiếm trên mng  
Tìm kiếm trên mng  
Bài toán: Tìm kiếm trên mng  
Thut toán tìm kiếm tun t: so sánh ln lượt tng phn ttrên  
mng.  
Đầu vào: Cho mt mng gm n phn t, và mt giá trkhóa  
k nào đó.  
Nếu mng có >0 phn tử  
Đầu ra: Trli câu hi k có xut hin trong mng  
. Gán giá trbiến found = 0 (để xác định xem đã tìm thy  
hay chưa)  
Có thể đầu ra slà vtrí khóa k trong mng hoc sln xut hin  
ca k trong mng.  
. Lp: trong khi found =0 và chưa xét đến phn tcui  
cùng  
3
5
5
2
7
8
5
1
Mng ban đầu  
– So sánh giá trphn thin ti vi k.  
» Nếu đúng bng thì gán biến found = 1.  
» Ngược li thì chuyn sang phn tkế tiếp.  
Khóa k  
Câu trli: k có xut hin trong mng  
Tìm kiếm trên mng  
3. Mng – array  
VD. Sinh dãy sFibonacci  
Tìm kiếm qun t:  
int found =0;  
i=0;  
while(i<n && !found)  
{
if(A[i]==k) found = 1;  
else i++;  
}
5
10/14/2010  
3. Mng – array  
// chuong trinh sinh 15 so Fibonacci dau tien  
#include <stdio.h>  
VD. Sdng mng đto ra các snguyên t.  
int main (void)  
{
Snguyên tlà schchia hết cho 1 và chính  
nó.  
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]);  
Đkim tra mt sn là nguyên t:  
Thchia cho các st2 đến n-1: chthc hin được  
vi n nh, nếu n c10.000.000 thì quá chm !  
Nếu n là nguyên tthì nó cũng không chia hết cho  
các snguyên tkhác.  
Hãy cài đt đin sinh ra 100 snguyên tđu  
return 0;  
}
tiên!  
3. Mng – array  
3. Mng – array  
Khi to mng  
Mng ký t:  
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};  
#include <stdio.h>  
int main (void)  
{
char word[] = { 'H', 'e', 'l', 'l', 'o', '!' };  
int i;  
for ( i = 0; i < 6; ++i )  
printf ("%c", word[i]);  
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 }; (*)  
printf ("\n");  
return 0;  
}
(*) chcó trong C99 (devC++,…)  
6
10/14/2010  
// chuyen sang he co so moi  
do {  
3. Mng – array  
convertedNumber[index] = numberToConvert %  
VD. Chương trình chuyn đồi cơ s, đổi sthcơ s10 sang các hcơ số  
base;  
khác.  
++index;  
numberToConvert = numberToConvert / base;  
#include <stdio.h>  
int main (void)  
{
}
while ( numberToConvert != 0 );  
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;  
// 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]);  
}
// doc vao so va co so chuyen doi  
printf ("So can chuyen? ");  
scanf ("%ld", &numberToConvert);  
printf ("He co so moi? ");  
scanf ("%i", &base);  
printf ("\n");  
return 0;  
}
3. Mng – array  
3. Mng – array  
Mng nhiu chiu: C cho phép khai báo mng nhiu chiu.  
VD. Mng hai chiu  
Khi to mng  
int M[4][5] = {  
{ 10, 5, -3, 17, 82 },  
{ 9, 0, 0, 8, -7 },  
{ 32, 20, 1, 0, 14 },  
{ 0, 0, 8, 7, 6 }  
};  
Ct (j)  
0
1
2
3
4
Hàng (i)  
0
1
2
3
1
23  
1
10  
78  
0
3  
9
0
2
3
0
23  
9
34  
39  
1
100  
123  
5  
int M[4][5] = { 10, 5, -3, 17, 82, 9, 0, 0,  
8, -7, 32, 20, 1, 0, 14, 0, 0, 8, 7, 6 };  
Khai báo : kiu_phn_ttên_mng[s_hàng][s_ct];  
Truy cp vào phn t: tên_mng[i,j]  
7
10/14/2010  
#include <stdio.h>  
int main (void)  
{
3. Mng – array  
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++)  
{
VD. Thông tin vbán hàng ca mt ca hàng ti các thi  
đim trong ngày (sáng, chiu và ti) ca mt tun được  
lưu vào mt mng.  
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]);  
Hãy in ra thông tin vslượng sn phm bán ra trung  
bình ti các thi đim trong ngày ca tun đó  
}
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  
printf("\n");  
for(j=0;j<7;j++) printf("%5i  
printf("\n");  
for(j=0;j<7;j++) printf("%5i  
printf("\n");  
", slBan[0][j]);  
",slBan[1][j]);  
",slBan[2][j]);  
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;  
}
8
pdf 8 trang Thùy Anh 26/04/2022 8500
Bạn đang xem tài liệu "Bài giảng Tin học đại cương - Phần 3: Mảng", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfbai_giang_tin_hoc_dai_cuong_phan_3_mang.pdf