Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 16 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
16
Dung lượng
415,53 KB
Nội dung
Nội dung TRƯỜNG ĐẠ) (ỌC B\C( K(OA ([ NỘ) V)ỆN CÔNG NG(Ệ T(ÔNG T)N V[ TRUYỀN T(ÔNG Mảng X}u kí tự Con trỏ v{ địa optional TIN HỌC ĐẠI CƯƠNG Phần Lập trình C Bài Mảng xâu ký tự Nội dung Kh|i niệm mảng • Tập hợp hữu hạn c|c phần tử c‘ng kiểu, lưu trữ nhớ • C|c phần tử mảng có c‘ng tên l{ tên mảng ph}n biệt với số cho biết vị trí mảng • Ví dụ: Mảng Kh|i niệm mảng Khai b|o v{ sử dụng mảng C|c thao t|c mảng Tìm kiếm mảng Sắp xếp mảng X}u kí tự – Bảng điểm sinh viên – Vector – Ma trận Khai b|o v{ sử dụng mảng Khai b|o v{ sử dụng mảng • Khai b|o mảng chiều • Cấp ph|t nhớ kiểu_dữ_liệu tên_mảng[kích_thước_mảng]; – C|c phần tử mảng cấp ph|t c|c ô nhớ nhớ – Biến mảng lưu trữ địa ô nhớ v‘ng nhớ cấp ph|t • Trong – kiểu_dữ_liệu: kiểu liệu c|c phần tử mảng – tên_mảng: tên mảng – kích_thước_mảng: số phần tử mảng • Ngôn ngữ C đ|nh số c|c phần tử mảng – Phần tử thứ i mang_nguyen x|c định mang_nguyen[i-1] • Ví dụ int mang_nguyen[10]; // khai b|o mảng phần tử có kiểu liệu int mang_nguyen[0] 9.1.2 Khai b|o v{ sử dụng mảng c[0], c[1], ,c[11] Các phần tử thuộc kiểu char -45 c[1] c[2] 72 c[3] c[5] 15 -89 c[6] c[7] 62 c[8] -3 c[9] c[10] c[11] mang_nguyen[9] • Mảng chiều v{ mảng nhiều chiều c[0] c[4] ……… Khai b|o v{ sử dụng mảng • Ví dụ khai báo mảng: char c[12]; Khai báo mảng: Tên c, có 12 phần tử, mang_nguyen[1] mang_nguyen 64 78 – Mỗi phần tử mảng l{ mảng => mảng nhiều chiều • Ví dụ – int a[6][5] ; mảng a gồm phần tử phần tử l{ mảng gồm số nguyên int – int b[ ][ ][ ]; // mảng b gồm phần tử, phần tử l{ mảng hai chiều gồm phần tử Mỗi phần tử mảng hai chiều l{ mảng gồm số nguyên int b l{ mảng chiều Khai b|o v{ sử dụng mảng Khai b|o v{ sử dụng mảng • Khai b|o mảng nhiều chiều • Sử dụng mảng kiểu_dữ_liệu tên_mảng[size1][size2]…[sizek]; Trong – Truy cập v{o phần tử thơng qua tên mảng v{ số phần tử mảng tên_mảng[chỉ_số_phần_tử] – Ch’ ý: số • sizei l{ kích thước chiều thứ i mảng • Ví dụ Khai b|o v{ sử dụng mảng – int a[4]; – phần tử thứ mảng: a[ ] – phần tử cuối c‘ng thứ tư mảng: a[ ] – a[i]: l{ phần tử thứ i+ a 10 C|c thao t|c mảng a Nhập liệu cho mảng • Khởi tạo gi| trị cho mảng khai b|o • Ví dụ tiếp – int b[3][4]; – phần tử mảng: b[ ] l{ mảng chiều – phần tử mảng b[ ]: b[ ][ ] – b[i][j]: l{ phần tử thứ j+ b[i], b[i] l{ phần tử thứ i+ b 11 – Ví dụ: • int a[4] = {1,4,6,2}; • float b[ ] = {40.5, 20.1, 100}; • char c[5] = { h , e , l , l , o }; • int b[2][3]={ {1,2,3}, {4,5,6} }; – Số lượng gi| trị khởi tạo không lớn số lượng phần tử mảng – Nếu số lượng n{y nhỏ hơn, c|c phần tử lại khởi tạo gi| trị – Nếu để trống kích thước mảng số phần tử khởi tạo 12 C|c thao t|c mảng C|c thao t|c mảng #include #define MONTHS 12 int main(){ int rainfall[MONTHS], i; for ( i=0; i < MONTHS; i++ ){ printf(“Nhap vao phan tu thu %d: “, i+1); scanf("%d", &rainfall[i] ); } return 0; } a Nhập liệu cho mảng • Nhập liệu từ b{n phím h{m scanf – int a[10]; – Nhập liệu cho a[ ]: scanf %d , & a[ ] ; – Nhập liệu cho to{n phần tử mảng a => Sử dụng vịng lặp for • Lưu ý – Tên mảng l{ hằng trỏ thực phép to|n với tên mảng phép g|n sau đ~ khai b|o 14 13 C|c thao t|c mảng C|c thao t|c mảng a Nhập liệu cho mảng • Lưu ý #include #include void main(){ int a[100]; int n, i; do{ printf(“\n Cho biet so phan tu cua mang: “); scanf(“%d”,&n); }while (n>100||n khai b|o mảng với kích thước tối đa v{ sử dụng biến lưu số phần tử thực mảng – Ví dụ: Khai b|o mảng số nguyên a có tối đa phần tử Nhập từ b{n phím số phần tử mảng v{ gi| trị c|c phần tử đó… 15 16 C|c thao t|c mảng C|c thao t|c mảng b Xuất liệu mảng for(i = 0; i < n; i++){ printf(“a[%d] = ", i); scanf("%d",&a[i]); } getch(); – Dùng hàm printf() – Để hiển thị tất c|c phần tử: d‘ng vịng for • Ví dụ } 17 C|c thao t|c mảng #include #define MONTHS 12 int main(){ int rainfall[MONTHS], i; for ( i=0; i < MONTHS; i++ ){ printf(“Nhap vao phan tu thu %d: “, i+1); scanf("%d", &rainfall[i] ); } for ( i=0; i < MONTHS; i++ ) printf( "%5d ” , rainfall[i]); printf("\n"); return 0; } – (iển thị phần tử – (iển thị tất c|c phần tử, phần tử dòng – (iển thị tất c|c phần tử dòng, c|ch vị trí – (iển thị k phần tử dòng 18 C|c thao t|c mảng c Tìm gi| trị lớn nhất, nhỏ • Tìm gi| trị lớn – Giả sử phần tử l{ phần tử – Lần lượt so s|nh với c|c phần tử lại – Nếu lớn => so s|nh tiếp – Nếu nhỏ => coi phần tử n{y l{ phần tử lớn v{ tiếp tục so s|nh – Cách làm? 19 • Tìm gi| trị nhỏ nhất: tương tự 20 C|c thao t|c mảng Tìm kiếm mảng • Bài toán max = rainfall[0]; – Cho mảng liệu a v{ gi| trị k – Tìm c|c phần tử mảng a có gi| trị giống với k Nếu có in vị trí số c|c phần tử n{y Ngược lại thơng b|o khơng tìm thấy for(i = 1; i < n; i++) if(max < a[i]) max = a[i]; • Cách làm printf("\n Luong mua nhieu nhat la: %d", max); 21 Tìm kiếm mảng 22 Tìm kiếm mảng • Phân tích – Duyệt to{n c|c phần tử • Vòng lặp for while, while – Lưu lại i a[i] giống k • Sử dụng mảng lưu số – Biến x|c định tìm thấy hay khơng tìm thấy • Biến nhận gi| trị • Biến nhận gi| trị >= – Duyệt to{n c|c phần tử mảng – Nếu a[i] giống k lưu lại số i – Sử dụng biến để x|c định tìm thấy hay khơng tìm thấy tìm thấy tăng gi| trị 23 #include #include void main(){ int a[100], chi_so[100]; int n;//n la số phần tử mảng int i, k, kiem_tra; printf(“ Nhap vao so phan tu cua mang: “); scanf(“%d”,&n); printf(“Nhap vao giá trị tim kiem“); scanf(“%d”,&k); 24 Tìm kiếm mảng Tìm kiếm mảng //Nhap cac phan tu cho mang a //Phan xu ly tim kiem kiem_tra = 0; // Duyệt qua tất phần tử for(i = 0;i 0){ printf(“Trong mang co %d phan tu co gia tri bang %d”,kiem_tra,k); printf(“\nChi so cua cac phan tula:“); for(i = 0;i < kiem_tra;i++) printf(“%3d”,chi_so[i]); } else printf(“\n Trong mang khong co phan tu nao co gia tri bang %d”,k); getch();} 25 Sắp xếp mảng 26 Sắp xếp mảng • Bài tốn • Giải thuật xếp – Cho mảng a gồm n phần tử Sắp xếp c|c phần tử mảng a theo thứ tự tăng dần/giảm dần – Sắp xếp thêm dần insertion sort – Sắp xếp lựa chọn selection sort – Sắp xếp bọt bubble sort – Sắp xếp vun đống heap sort – Sắp xếp nhanh quick sort – Sắp xếp trộn merge sort – … 27 28 Sắp xếp mảng Sắp xếp mảng • Giải thuật xếp lựa chọn • tưởng – Tìm phần tử nhỏ chưa xếp mảng – Đổi chỗ với phần tử phần chưa – Lần xếp thứ • So s|nh a[ ] với c|c a[i], i = n-1 a[ ] > a[i] => đổi chỗ a[ ] v{ a[i] • Thu a[ ] l{ phần tử nhỏ – Lần xếp thứ • So s|nh a[ ] với c|c a[i], i = n-1 a[ ] > a[i] => đổi chỗ a[ ] v{ a[i] • Thu a[ ] l{ phần tử nhỏ thứ 29 Sắp xếp mảng Sắp xếp mảng • tưởng • A = { 12, 5, 3, }; – Lần xếp thứ k • So sánh a[k- ] với c|c a[i], i = k n-1 a[k- ] > a[i] => đổi chỗ a[k-1] a[i] • Thu a[k- ] l{ phần tử nhỏ thứ k 12 – … – Lần xếp thứ n-1 • So sánh a[n-2] a[n-1] a[n-2] > a[n- ] => đổi chỗ a[n-2] a[n-1] • Thu a[n- ] l{ phần tử nhó thứ n- => cịn lại a[n- ] l{ phần tử nhỏ thứ n lớn 30 31 Lượt 12 Lượt 12 Lượt 12 32 Sắp xếp mảng Sắp xếp mảng • Ví dụ Trang //Khai bao cac bien int a[100]; int i, j, tmp; //Sap xep for (i = 0; i < n-1; i++) for (j = i+1; j a[j]){ tmp= a[i]; a[i]= a[j]; a[j] = tmp; } – Nhập v{o từ b{n phím mảng số ngun m số phần tử nhập từ b{n phím – (iển thị c|c phần tử vừa nhập v{o – Sắp xếp mảng m theo thứ tự tăng dần có hiển thị c|c phần tử lượt xếp 33 Sắp xếp mảng 34 Sắp xếp mảng // nhập giá trị cho phần tử for(i = 0;i