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
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.
18 trang |
Chia sẻ: dntpro1256 | Lượt xem: 756 | Lượt tải: 0
Bạn đang xem nội dung tài liệu 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 về máy bạn click vào nút DOWNLOAD ở trê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
Giảng viên: TS. Lê Hoàng Sơn
lehoangson@hus.edu.vn
Lê Hoàng Sơn 2/18
Nội dung chính
Mảng 1
Con trỏ 2
Bài tập 3
Lê Hoàng Sơn 3/18
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;
Lê Hoàng Sơn 4/18
Ví dụ: Nhập dữ liệu cho mảng 1 chiều
# include
# include
int main() {
int a[5], i;
for(i=0;i<5;i++)
{
printf(“Phan tu thu %d= ”,i);
scanf(“%d”, &a[i]);
}
for(i=0;i<5;i++)
printf(“%6d”,a[i]);
getch();
return 0;
}
Nhập từng phần tử mảng
từ bàn phím
In mảng ra
Khai báo mảng 5 phần
tử, phải là số cố định
Lê Hoàng Sơn 5/18
Ví dụ: Trung bình cộng n số nguyên
# include
# include
int main() {
int a[50], i, n, sum = 0;
printf("Nhap vao gia tri n: ");
scanf("%d", &n);
for(i = 0; i < n; i++)
{
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);
getch();
return 0;
}
Vừa nhập từng phần tử
mảng vừa tính tổng
Tính Trung bình
Mảng 50 phần tử
Lê Hoàng Sơn 6/18
Nội dung chính
Mảng 1
Con trỏ 2
Bài tập 3
Lê Hoàng Sơn 7/18
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
Lê Hoàng Sơn 8/18
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));
Lê Hoàng Sơn 9/18
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));
Lê Hoàng Sơn 10/18
Ví dụ: Tính tổng n số thực
# include
# include
# include
int main() {
float *a, s = 0 ; int i, n;
printf("Nhap vao gia tri n: ");
scanf("%d", &n);
a = (float *) calloc(n, sizeof(float));
for(i=0; i<n; i++) {
printf(“\n a[%d]= ”,i);
scanf(“%f”, &a[i]);
s = s + a[i];
}
printf(“\n Tong =%8.2f”,s);
getch();
return 0;
}
Cấp phát n ô nhớ cho a
Nhập mảng và tính tổng
Khai báo con trỏ
Lê Hoàng Sơn 11/18
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;
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));
for(i=0;i<m;i++)
for(j=0;j<n;j++) {
printf("\n a[%d, %d]= ",i,j);
scanf("%d", &a[i][j]);
if (max <= a[i][j]) max = a[i][j];
}
printf("\n Max =%d",max);
getch();
return 0;
}
Cấp phát m x n ô nhớ
Nhập mảng và tìm max
Khai báo con trỏ
Lê Hoàng Sơn 12/18
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;
printf("Nhap vao gia tri m, n: ");
scanf("%d%d", &m,&n);
a = (int *) calloc(m*n, sizeof(int));
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]);
if (max <= a[i*n+j]) max = a[i*n+j];
}
printf("\n Max =%d",max);
getch();
return 0;
}
Cấp phát m x n ô nhớ
Nhập mảng và tìm max
Khai báo con trỏ
Lê Hoàng Sơn 13/18
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ỏ
Lê Hoàng Sơn 14/18
Câu hỏi thảo luận
Lê Hoàng Sơn 15/18
Nội dung chính
Mảng 1
Con trỏ 2
Bài tập 3
Lê Hoàng Sơn 16/18
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.
Lê Hoàng Sơn 17/18
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.
Lập trình tính toán khoa học kỹ thuật
C l i c k t o e d i t c o m p a n y s l o g a n .
Lê Hoàng Sơn
Các file đính kèm theo tài liệu này:
- bai_giang_thcs3_4_0762_2047000.pdf