ebook photoshop chương 8×cách tải chương trình turbo pascal lớp 8×chương trình turbo pascal lớp 8×viet chuong trinh turbo pascal lop 8×tải chương trình turbo pascal lớp 8ebook photoshop chương 8×cách tải chương trình turbo pascal lớp 8×chương trình turbo pascal lớp 8×viet chuong trinh turbo pascal lop 8×tải chương trình turbo pascal lớp 8
Trang 1Chương 8:
CẤP PHÁT ĐỘNG BỘ NHỚ
Giáo viên: Tạ Thúc Nhu Khoa CNTT trường ĐH Lạc Hồng
NGÔN NGỮ C
Trang 2I- Biến Tĩnh và Biến Động:
I- Biến Tĩnh và Biến Động:
1 Biến tĩnh:
Là các biến được khai báo trước bằng cú pháp khai báo biến vì chúng
được cấp phát vùng nhớ trước khi thực hiện các lệnh khác trong thân
chương trình và tồn tại trong suốt quá trình thực hiện
2 Biến động:
• Là biến không tên , không khai báo trước như các biến tĩnh Biến động
được tạo (cấp phát vùng nhớ) hay xóa khi cần thiết bằng các hàm hoặc toán tử
• Việc truy nhập dữ liệu của các biến động được tiến hành nhờ các biến
con trỏ (Pointer Variable)
• Các biến con trỏ được định nghiã như các biến tĩnh (Có tên, khai báo
trong phần khai báo biến) và được dùng để chứa địa chỉ của các biến
động.
Trang 3II- Tạo Biến Động
II- Tạo Biến Động
1 Bằng các hàm trong <ALLOC.H> hay <STDLIB.H>
• void * malloc ( S ); Cấp phát vùng nhớ có kích thước S bytes và Trả về
địa chỉ của vùng nhớ đó Nếu không đủ bộ nhớ hàm trả về giá trị NULL.
• void * calloc ( N, S ); Cấp phát mảng động có N phần tử, mỗi phần tử có
kích thước S bytes và Trả về địa chỉ của vùng nhớ đó.
• void * realloc(void *ptr, S): Cấp lại vùng nhớ với kích thước S bytes cho biến con trỏ ptr, đồng thời chép dữ liệu vào vùng nhớ mới.
2 Bằng toán tử new : BiếnConTrỏ = new <KiểuDL>[Số_phần_tử];
Ví dụ: int *p1, *p2;
- Cấp động 1 biến kiểu int : p1 = (int *) malloc( sizeof(int) );
p1 = new int;
- Cấp động 1 mảng 10 phần tử: p2 = (int*) calloc(10, sizeof(int) );
Trang 4III- Xóa Biến Động
III- Xóa Biến Động
Giải phóng vùng nhớ động đã cấp phát cho biến con trỏ:
Ví dụ:
delete p1;
Trang 5IV- Cấp Phát Động Mảng 1 Chiều
IV- Cấp Phát Động Mảng 1 Chiều
KiểuPT *Biếncontrỏ;
vào biến con trỏ
như dùng tên mảng tĩnh.
Trang 6Ví dụ: Viết chương trình nhập N số thực (N <= 100)
In lại các số thực đó ngược với thứ tự đã nhập.
Ví dụ: Viết chương trình nhập N số thực (N <= 100)
In lại các số thực đó ngược với thứ tự đã nhập.
#include <stdio.h>
void main()
{ int N;
float A [100];
printf("Cho biet so phan tu can nhap:"); scanf("%d", &N);
printf(“Nhap gia tri cho cac phan tu : \n “);
for( int i = 0; i < N ; i++) {
printf("Nhap gia tri phan tu %d : ", i );
scanf("%f", & A [ i ] );
} printf("\nCac so thuc da nhap: ");
for( i = N-1; i >= 0; i ) printf(" %f ", A [i] );
}
Trang 7Ví dụ: Viết chương trình nhập N số thực (N <= 100)
In lại các số thực đó ngược với thứ tự đã nhập.
Ví dụ: Viết chương trình nhập N số thực (N <= 100)
In lại các số thực đó ngược với thứ tự đã nhập.
#include <stdio.h>
#include <Alloc.h>
void main()
{ int N;
float * A ; printf("Cho biet so phan tu can nhap:"); scanf("%d", &N);
A = (float *) calloc(N, sizeof(float));
printf(“Nhap gia tri cho cac phan tu : \n “);
for( int i = 0; i < N ; i++) { printf("Nhap gia tri phan tu %d : ", i );
scanf("%f", & A [ i ] );
} printf("\nCac so thuc da nhap: ");
for( i = N-1; i >= 0; i ) printf(" %f ", A [ i ] );
Trang 8IV- Cấp Phát Động Mảng 2 Chiều
IV- Cấp Phát Động Mảng 2 Chiều
KiểuPT *Biếncontrỏ;
chỉ vào biến con trỏ
Biếncontrỏ = ( KiểuPT *) calloc ( M*N, sizeof( KiểuPT ) );
Trang 9Ví dụ: Nhập và In mảng tĩnh 2 chiều
Ví dụ: Nhập và In mảng tĩnh 2 chiều
for ( d = 0; d < SD; d++) for (c = 0; c < SC; c++) {
printf(“PT[%d][%d]=“, c, d);
scanf(“%f”, &B[ d ][ c ] );
} printf("Bang so da nhap:\n");
for ( d = 0; d < SD; d++) {
for (c = 0; c < SC; c++) printf(“ %f “, B[d] [c]);
printf("\n");
} }
#include <stdio.h>
#include <conio.h>
void main()
{
float B[100][100];
int SD, SC;
int d, c;
printf("\nNhap So dong va so cot :");
scanf("%d %d", &SD, &SC);
printf("Nhap gia tri cac phan tu:\n");
Trang 10Ví dụ: Nhập và In mảng động 2 chiều
Ví dụ: Nhập và In mảng động 2 chiều
for ( d = 0; d < SD; d++) for (c = 0; c < SC; c++) {
printf("PT[%d][%d]=", c, d);
canf("%f", B + d*SC+ c );
} printf("Bang so da nhap:\n");
for ( d = 0; d < SD; d++) {
for (c = 0; c < SC; c++)
printf(" %f ", *(B+d*SC+c ));
printf("\n");
}
delete B;
include <stdio.h>
#include <conio.h>
#include <Alloc.h>
void main()
{ float *B;
int SD, SC;
int d, c;
printf("\nNhap So dong va so cot :");
scanf("%d %d", &SD, &SC);
printf("Nhap gia tri cac phan tu:\n");
B= (float*)calloc(SD*SC, sizeof(float));