Tài liệu Bài tập kỹ thuật lập trình Part C++ 4 ppt

16 1.3K 18
Tài liệu Bài tập kỹ thuật lập trình Part C++ 4 ppt

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Mảng chiều CHƯƠNG MẢNG MỘT CHIỀU Cách khai báo liệu kiểu mảng, thao tác nhập xuất, kỹ thuật thao tác mảng Ứng dụng kỹ thuật việc cài đặt hàm tìm kiếm, kiểm tra, xây dựng mảng, tách ghép mảng I TÓM TẮT LÝ THUYẾT I.1 Khái niệm Mảng thực chất biến cấp phát nhớ liên tục bao gồm nhiều biến thành phần Các thành phần mảng tập hợp biến có kiểu liệu tên Do để truy xuất biến thành phần, ta dùng chế mục I.2 Khai báo mảng Để khai báo mảng, ta có cách khai báo sau : ™ Cách 1: Con trỏ < Kiểu liệu > < Tên mảng > [ < Số phần tử tối đa mảng> ] ; Ví dụ: int a[100]; // float b[50]; // Khai bao mang so nguyen a gom 100 phan tu Khai bao mang so thuc b gom 50 phan tu ™ Cách 2: Con trỏ Ý nghĩa: Khi ta khai báo mảng với kiểu liệu (int, float, char,…) tên mảng thực chất địa phần tử < Kiểu liệu > *< Tên mảng >; Ví dụ : int *p; // khai bao tro p int b[100]; p = b; // p tro vao phan tu cua mang b Với cách viết ta hiểu cách viết sau tương đương p[i] Ù *(p + i) Ù b[i] Ù *(b+i) Giáo trình Bài Tập Kỹ Thuật Lập Trình Trang 41 Mảng chiều # Lưu ý: Khi sử dụng biến trỏ để truy xuất mảng, theo cách thực chất trỏ p chiếm byte nhớ để chứa địa mà Để tạo mảng chứa liệu thành phần ta phải cấp phát vùng nhớ cho trỏ p Dùng hàm : malloc, calloc thư viện để cấp phát vùng nhớ Ví dụ: + Cách 1: dùng malloc int *px; //Khai báo trỏ px px = (int *) malloc (100); //Cấp phát 100 ô nhớ kiểu int cho trỏ px + Cách 2: dùng calloc int *p; //khai báo trỏ p p=(int *) calloc (100,sizeof (int)); //cấp phát 10 ô nhớ ô chiếm 2bytes Sau sử dụng xong nên giải phóng vùng nhớ hàm free Ví dụ : free (p) ; // giải phóng vùng nhớ cho trỏ p I.3 Truy xuất phần tử mảng Với khái niệm cách khai báo ta có hình dạng mảng chiều sau: Ví dụ : int A[5] // Khai báo mảng A gồm tối đa phần tử nguyên Chỉ số A[0] A[1] A[2] A[3] A[4] Ví dụ minh hoạ: Khai báo gán giá trị cho mảng #include #include void main ( ) { clrscr ( ); int a[4] = {5,9,3,8}; for (int i = 0; i < ; i++) printf (“ a [ %d ] = %d \t”, i , a[i] ); getch ( ); } Đối với trỏ: Lấy địa phần tử mảng ta dùng dấu “&” Ví dụ: int a[7]; Giáo trình Bài Tập Kỹ Thuật Lập Trình Trang 42 Mảng chiều int *p = a[3]; //Lấy địa phần tử thứ Ví dụ : int a[7]; int *px; px = a; //px trỏ tới phần tử thứ px = px + 4; //px trỏ tới phần tử thứ Từ ví dụ ta mơ hình hoá mảng sau: px a[0] a[1] a[2] a[3] a[4] a[5] a[6] Ví dụ minh hoạ: Viết chương trình nhập vào mảng chiều 10 phần tử kiểu số nguyên #include #include void main ( ) { int a[10], i; int *p; for (i = ; i < 10 ; i ++) { printf (“ a [ %d ] = “, i ); scanf (“ %d”, &a[i] ); } p = a; printf (“ \n Noi dung mang vua nhap: “); for (i = 0; i < 10 ; i ++) printf (“ %d \t “, *(p + i)); getch ( ); } II BÀI TẬP II.1 Một số kĩ thuật a Kĩ thuật đặt cờ hiệu Kĩ thuật thường áp dụng cho toán “kiểm tra” hay “đánh dấu” Viết hàm kiểm tra xem mảng số nguyên có thứ tự tăng dần không? (Trả 1: Nếu mảng tăng dần, ngược lại trả 0) Giáo trình Bài Tập Kỹ Thuật Lập Trình Trang 43 Mảng chiều int KiemTraTang (int a[ ], int n) { int flag = 1; for (int i = 0; i < n-1; i ++ ) if ( a[i] > a[i+1] ) // Vi phạm điều kiện tăng dần { flag = 0; break; } return flag; } Viết hàm kiểm tra xem mảng số nguyên có tồn số nguyên lẻ lớn 100 hay khơng? (Trả 1: Nếu có tồn số lẻ lớn 100, ngược lại trả 0) int KiemTraLe (int a[ ], int n) { int flag = 0; for (int i = 0; i < n; i ++ ) if ( a[i] % != && a[i][j] > 100 ) //Gặp phần tử thoả { flag = 1; break; } return flag; } b Kĩ thuật đặt lính canh Kĩ thuật thường áp dụng cho tập “tìm kiếm”, “liệt kê” theo điều kiện định Viết hàm tìm trả giá trị lớn mảng chiều số nguyên int TimMax (int a[], int n) { int max, i = 1; max = a[0]; while ( i < n ) { if ( a[i] > max ) max = a[i] ; i++; } return max; } Giáo trình Bài Tập Kỹ Thuật Lập Trình Trang 44 Mảng chiều II.2 Bài tập a Nhập xuất mảng chiều Phương pháp Viết chương trình nhập xuất mảng chiều số nguyên #include #include #define MAX 100 void NhapMang (int a[], int &n) { printf (“Nhap so phan tu: “); scanf (“ %d ”, &n); for (int i = 0; i < n; i ++) { printf (“ a [%d] = “, i); scanf (“ %d “, &a[i]); } } void XuatMang (int a[], int n) { printf (“\nNoi dung mang: “); for (int i = 0; i < n; i ++) printf (“ %d \t “, a[i]); } void main ( ) { clrscr ( ); int a[MAX] , n; NhapMang (a,n); XuatMang (a,n); getch ( ); } Bài tập Viết chương trình nhập xuất mảng chiều số thực Viết chương trình khởi tạo giá trị phần tử cho mảng chiều số nguyên gồm n phần tử Viết chương trình phát sinh ngẫu nhiên mảng chiều số nguyên âm Viết chương trình phát sinh ngẫu nhiên mảng chiều số nguyên cho mảng có thứ tự tăng dần (Khơng xếp) Giáo trình Bài Tập Kỹ Thuật Lập Trình Trang 45 Mảng chiều Viết chương trình nhập mảng số thực xuất phần tử âm mảng Viết chương trình nhập mảng số nguyên xuất phần tử lẻ có mảng Viết chương trình nhập vào mảng chiều số nguyên xuất phần tử chẵn nhỏ 20 Viết chương trình nhập vào mảng chiều số nguyên xuất hình phần tử số nguyên tố Viết chương trình nhập vào số nguyên n liệt kê số nguyên tố nhỏ n, mảng không tồn số nguyên tố nhỏ n phải xuất câu thơng báo 10 Viết chương trình nhập vào mảng chiều số nguyên xuất hình phần tử số phương nằm vị trí lẻ mảng b Tìm kiếm mảng chiều Phương pháp Viết hàm tìm phần tử có giá trị x xuất mảng chiều (Nếu tìm thấy trả vị trí xuất x, ngược lại trả -1) int TimX (int a[], int n, int x) { for (int i = 0; i < n ; i ++) if ( x==a[i] ) return i; return -1; } Bài tập 11 Viết hàm tìm vị trí phần tử có giá trị x xuất cuối mảng 12 Viết hàm tìm vị trí phần tử nhỏ mảng số ngun 13 Viết hàm tìm vị trí phần tử lớn mảng số nguyên 14 Viết hàm in vị trí phần tử nguyên tố mảng số nguyên 15 Viết hàm in vị trí phần tử nguyên tố lớn 23 16 Viết hàm tìm vị trí phần tử âm mảng Nếu khơng có phần tử âm trả –1 17 Viết hàm tìm vị trí phần tử âm lớn mảng Giáo trình Bài Tập Kỹ Thuật Lập Trình Trang 46 Mảng chiều 18 Viết hàm tìm vị trí phần tử dương mảng Nếu khơng có phần tử âm trả –1 19 Viết hàm tìm vị trí phần tử dương bé mảng 20 Viết hàm in phần tử bội 21 Viết hàm tìm số chẵn cuối có mảng, khơng tồn số chẵn hàm trả -1 22 Viết hàm tìm số lẻ lớn có mảng, khơng tồn số lẻ hàm trả -1 23 Viết hàm tìm đổi chỗ phần tử lớn với phần tử nhỏ mảng 24 Nhập vào X Viết hàm in hình phần tử có giá trị từ đến X có mảng 25 Viết chương trình nhập vào dãy số a gồm n số thực ( n ≤ 100 ), nhập vào dãy số b gồm m số thực ( m ≤ 100 ) • In phần tử xuất dãy a mà không xuất dãy b • In phần tử xuất hai dãy c Đếm – Tần suất Phương pháp Viết hàm đếm phần tử chia hết cho mảng số nguyên int Dem (int a[], int n ) { int dem = 0; for (int i = 0; i < n ; i++ ) if ( a[i] % == ) dem++; return dem; } Bài tập 26 Viết hàm đếm phần tử âm, dương mảng 27 Viết hàm đếm phần tử chẵn, lẻ mảng 28 Viết hàm đếm số lần xuất phần tử x mảng 29 Viết hàm đếm phần tử nhỏ x mảng 30 Viết hàm đếm phần tử số nguyên tố mảng Giáo trình Bài Tập Kỹ Thuật Lập Trình Trang 47 Mảng chiều 31 Viết hàm đếm phần tử số hoàn thiện mảng 32 Viết hàm đếm phần tử bội mảng số nguyên d Tính tổng – Trung bình có điều kiện Phương pháp Viết hàm tính tổng phần tử mảng long TinhTong (int a[], int n ) { long tong = 0; for (int i = 0; i < n; i++ ) tong = tong + a[i] ; return tong; } Viết hàm tính giá trị trung bình phần tử có giá trị âm mảng Đối với hàm tính trung bình có điều kiện phải lưu ý chia giá trị (Có thể mảng khơng có phần tử thoả điều kiện, ta chia tức chia cho 0) float TrungBinhAm (int a[], int n ) { long tong = 0; int spt=0; for (int i = 0; i < n; i++ ) if( a[i] a [j]) HoanVi (a[i], a[j]); } Bài tập 44 Viết hàm xếp mảng theo thứ tự giảm dần 45 Viết hàm xếp mảng theo thứ tự tăng dần phần tử số nguyên tố 46 Viết hàm xếp phần tử lẻ tăng dần 47 Viết hàm xếp phần tử chẵn giảm dần 48 Viết hàm xếp phần tử chẵn nằm bên trái theo thứ tự tăng dần phần tử lẻ bên phải theo thứ tự giảm dần 49 Viết hàm xếp phần tử âm giảm dần từ trái sang phải, phần tử dương tăng dần từ phải sang trái Giáo trình Bài Tập Kỹ Thuật Lập Trình Trang 49 Mảng chiều f Xoá Kĩ thuật Duyệt mảng từ trái sang phải Xuất phát từ vị trí cần xố tiến hành dời phần tử phía trước kết thúc mảng, sau giảm kích thước mảng Vấn đề đặt tìm vị trí cần xóa theo điều kiện tốn thực xóa Viết hàm xố phần tử mảng void XoaDau (int a[], int &n) { for (int i = 0; i < n-1 ; i++) a[i] = a[i+1]; n ; } Viết hàm xoá phần tử vị trí (vitri) cho trước mảng void XoaTaiViTri (int a[], int &n, int vitri) { for (int i = vitri; i < n-1 ; i++) a[i] = a[i+1]; n ; } Bài tập 50 Viết hàm xoá phần tử vị trí lẻ mảng 51 Viết hàm xố phần tử có giá trị lớn mảng 52 Nhập vào giá trị X Viết hàm xoá tất phần tử có giá trị nhỏ X 53 Nhập vào giá trị X Viết hàm xoá phần tử có giá trị gần X g Chèn Kĩ thuật Duyệt mảng từ phải sang trái Xuất phát từ cuối mảng tiến hành đẩy phần tử phía sau vị trí cần chèn, chèn phần tử cần chèn vào vị trí chèn tăng kích thước mảng Trước chèn ta phải xác định vị trí cần chèn theo điều kiện tốn Thêm phần tử có giá trị X vào cuối mảng void ThemCuoi (int a[], int &n, int X) { a[n]=X; n++; Giáo trình Bài Tập Kỹ Thuật Lập Trình Trang 50 Mảng chiều } Chèn phần tử có giá trị X vào mảng vị trí cho trước void ChenX (int a[], int &n, int X, int vitri) { for (int i = n; i >vitri ; i ) a[i] = a[i-1] ; a[vitri] = X; n++; } Bài tập 54 Viết hàm chèn phần tử có giá trị X vào vị trí mảng 55 Viết hàm chèn phần tử có giá trị X vào phía sau phần tử có giá trị lớn mảng 56 Viết hàm chèn phần tử có giá trị X vào trước phần tử có giá trị số nguyên tố mảng 57 Viết hàm chèn phần tử có giá trị X vào phía sau tất phần tử có giá trị chẵn mảng h Tách / ghép mảng Kĩ thuật tách Cho mảng a kích thước n (n chẵn) Tách mảng a thành mảng b c cho: b có ½ phần tử đầu mảng a, ½ phần tử lại đưa vào mảng c void TachMang(int a[], int n, int b[], int &m, int c[], int &l) { int k=n/2; m=l=0; for(int i=0; i

Ngày đăng: 15/12/2013, 04:15

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan