Bài giảng Lập trình tính toán khoa học kỹ thuật - Buổi 4: Cấu trúc dữ liệu - Lê Hoàng Sơn

Lập trình tính toán khoa học kỹ thuật 1

Buổi 4: Cấu trúc dữ liệu

Nội dung chính

1 Mảng

2 Con trỏ

3 Bài tập

pdf 18 trang phuongnguyen 9760
Bạn đang xem tài liệu "Bài giảng Lập trình tính toán khoa học kỹ thuật - Buổi 4: Cấu trúc dữ liệu - Lê Hoàng Sơn", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Lập trình tính toán khoa học kỹ thuật - Buổi 4: Cấu trúc dữ liệu - Lê Hoàng Sơn

Bài giảng Lập trình tính toán khoa học kỹ thuật - Buổi 4: Cấu trúc dữ liệu - Lê Hoàng Sơn
 Buổi 4: Cấu trúc dữ liệu 
 Giảng viên: TS. Lê Hoàng Sơn 
 lehoangson@hus.edu.vn 
Lập trình tính toán khoa học kỹ thuật 1 
Nội dung chính 
 1 Mảng 
 2 Con trỏ 
 3 Bài tập 
 2/18 Lê Hoàng Sơn 
 1. Mảng 
 Mảng được hiểu là một tập hợp các giá trị có cùng kiểu dữ liệu nằm 
 liên tiếp nhau trong bộ nhớ máy tính 
 . Kiểu dữ liệu của các phần tử trong mảng 
 . Tên mảng 
 . Số chiều và kích thước của mỗi chiều 
 Ví dụ 
 int A[10]; mảng một chiều, 10 phần tử nguyên 
 float B[2] [3]; mảng hai chiều, kích thước 2 x 3 
 Phần tử: A[0] (nội dung) và &A[0] (địa chỉ) 
 B[0][0] &B[0][0] 
 Phần tử mảng bắt đầu từ 0, kết thúc bằng chỉ số mảng trừ 1; 
 3/18 Lê Hoàng Sơn 
 Ví dụ: Nhập dữ liệu cho mảng 1 chiều 
# include 
# include 
int main() { 
 int a[5], i; Khai báo mảng 5 phần 
 tử, phải là số cố định 
 for(i=0;i<5;i++) 
 { 
 printf(“Phan tu thu %d= ”,i); 
 scanf(“%d”, &a[i]); Nhập từng phần tử mảng 
 } từ bàn phím 
 for(i=0;i<5;i++) 
 printf(“%6d”,a[i]); In mảng ra 
 getch(); 
 return 0; 
} 
 4/18 Lê Hoàng Sơn 
 Ví dụ: Trung bình cộng n số nguyên 
# include 
# include 
int main() { 
 int a[50], i, n, sum = 0; Mảng 50 phần tử 
 printf("Nhap vao gia tri n: "); 
 scanf("%d", &n); 
 for(i = 0; i < n; i++) Vừa nhập từng phần tử 
 { mảng vừa tính tổng 
 printf("Nhap vao phan tu thu %d: ", i + 1); 
 scanf("%d", &a[i]); 
 sum = sum + a[i]; 
 } 
 printf("Trung binh cong: %.2f\n", (float) sum/n); Tính Trung bình 
 getch(); 
 return 0; 
} 
 5/18 Lê Hoàng Sơn 
Nội dung chính 
 1 Mảng 
 2 Con trỏ 
 3 Bài tập 
 6/18 Lê Hoàng Sơn 
 2. Con trỏ 
 Con trỏ là một biến dùng để chứa địa chỉ. Mỗi loại địa chỉ thì có loại 
 con trỏ tương ứng. Trước khi sử dụng biến con trỏ ta phải khai báo 
 trước khi sử dụng 
 Ví dụ 
 int *x; biến con trỏ kiểu nguyên 
 float *y; biến con trỏ kiểu thực 
 Được sử dụng để lưu địa chỉ của biến 
 float x=5 , z=20, *px, *pz; 
 px=&x; pz=&z; 
 Khi đó: 
 *px==5; *pz ==20 
 7/18 Lê Hoàng Sơn 
 Con trỏ với mảng 
 Các phần tử của mảng một chiều có thể được xác định thông qua 
 con trỏ 
 Ví dụ: float a[10]; 
 Khi đó: địa chỉ của phần tử mảng &a[i] tương đương con trỏ (a + i) 
 Nội dung của phần tử mảng a[i] tương đương *(a + i) 
 Trong mảng nhiều chiều, để chuyển từ mảng sang con trỏ và 
 ngược lại ta quy về mảng một chiều 
 Ví dụ: int b[m][n]; 
 Khi đó phần tử b[i][j] tương đương b[i*n + j] 
 Lý do chuyển đổi: int a[50]; 
 int *a; a = (int *) calloc(100,sizeof(int)); 
 8/18 Lê Hoàng Sơn 
 Khai báo mảng động qua con trỏ 
 Thư viện 
 Mảng một chiều 
 Ví dụ: float * a; int n; 
 printf("Nhap vao gia tri n: "); 
 scanf("%d", &n); 
 a = (float *) calloc(n, sizeof(float)); 
 Mảng nhiều chiều 
 Ví dụ: float ** b; int m, n; 
 printf("Nhap vao gia tri m, n: "); 
 scanf("%d%d", &m,&n); 
 b = (float **) calloc(m, sizeof(float *)); 
 for(i=0;i<m;i++) 
 b[i] = (float *) calloc(n, sizeof(float)); 
 9/18 Lê Hoàng Sơn 
 Ví dụ: Tính tổng n số thực 
# include 
# include 
# include 
int main() { 
 float *a, s = 0 ; int i, n; Khai báo con trỏ 
 printf("Nhap vao gia tri n: "); 
 scanf("%d", &n); 
 a = (float *) calloc(n, sizeof(float)); Cấp phát n ô nhớ cho a 
 for(i=0; i<n; i++) { 
 printf(“\n a[%d]= ”,i); 
 scanf(“%f”, &a[i]); Nhập mảng và tính tổng 
 s = s + a[i]; 
 } 
 printf(“\n Tong =%8.2f”,s); 
 getch(); 
 return 0; 
} 
 10/18 Lê Hoàng Sơn 
 Ví dụ: Tìm số lớn nhất trong ma trận (1) 
# include 
# include 
# include 
int main() { 
 int **a, m, n, max = 0 ; int i, j; Khai báo con trỏ 
 printf("Nhap vao gia tri m, n: "); 
 scanf("%d%d", &m,&n); 
 a = (int **) calloc(m, sizeof(int *)); 
 for(i=0;i<m;i++) 
 a[i] = (int *) calloc(n, sizeof(int)); Cấp phát m x n ô nhớ 
 for(i=0;i<m;i++) 
 for(j=0;j<n;j++) { 
 printf("\n a[%d, %d]= ",i,j); Nhập mảng và tìm max 
 scanf("%d", &a[i][j]); 
 if (max <= a[i][j]) max = a[i][j]; 
 } 
 printf("\n Max =%d",max); 
 getch(); 
 return 0; 
} 
 11/18 Lê Hoàng Sơn 
 Ví dụ: Tìm số lớn nhất trong ma trận (2) 
# include 
# include 
# include 
int main() { 
 int *a, m, n, max = 0 ; int i, j; Khai báo con trỏ 
 printf("Nhap vao gia tri m, n: "); 
 scanf("%d%d", &m,&n); 
 a = (int *) calloc(m*n, sizeof(int)); Cấp phát m x n ô nhớ 
 for(i=0;i<m;i++) 
 for(j=0;j<n;j++) { 
 printf("\n a[%d, %d]= ",i,j); 
 scanf("%d", &a[i *n + j]); Nhập mảng và tìm max 
 if (max <= a[i*n+j]) max = a[i*n+j]; 
 } 
 printf("\n Max =%d",max); 
 getch(); 
 return 0; 
} 
 12/18 Lê Hoàng Sơn 
 Tóm tắt bài học 
Mảng một chiều và nhiều chiều 
Con trỏ 
 . Các phép toán 
 . Quan hệ với mảng 
 . Khai báo mảng động qua con trỏ 
 13/18 Lê Hoàng Sơn 
Câu hỏi thảo luận 
 14/18 Lê Hoàng Sơn 
Nội dung chính 
 1 Mảng 
 2 Con trỏ 
 3 Bài tập 
 15/18 Lê Hoàng Sơn 
 Bài tập 
1. Nhập vào hai ma trận A, B kích thước 2 x 3. Tính 
 và cho hiển thị A+B. 
2. Nhập vào một dãy n phần tử. In ra dãy số ngược 
 lại với dãy nhập vào 
3. Nhập vào một ma trận nguyên kích thước m x n. 
 Hãy tìm phần tử lớn thứ nhì trong ma trận trên. 
4. Nhập vào một ma trận nguyên kích thước m x n. 
 In ra các số lẻ trong ma trận đó. 
5. Nhập vào một mảng n phần tử. Sắp xếp lại mảng 
 theo thứ tự tăng dần và in ra màn hình. 
 16/18 Lê Hoàng Sơn 
 Bài tập 
6. Nhập vào ma trận A kích thước m x n và ma trận 
 B kích thước n x p. Tính và hiển thị tích hai ma 
 trận. 
7. Số đối xứng là số có dạng: abccba. Hãy nhập vào 
 một dãy gồm n số. Kiểm tra xem dãy này có phải 
 là dãy đối xứng không? 
8. Tìm ước chung lớn nhất của hai số a và b. 
9. Nhập và kiểm tra xem số n có phải là số nguyên tố 
 hay không? 
10. Nhập vào một dãy n phần tử và một số m bất kỳ. 
 Hãy đếm số lần xuất hiện của số m trong dãy trên. 
 17/18 Lê Hoàng Sơn 
 Lê Hoàng Sơn 
 C l i c k to e d i t c o m p a n y s l o g a n . 
Lập trình tính toán khoa học kỹ thuật 

File đính kèm:

  • pdfbai_giang_lap_trinh_tinh_toan_khoa_hoc_ky_thuat_buoi_4_cau_t.pdf