Bài giảng Hệ thống máy tính và ngôn ngữ C: Chương 10 - PGS.TS. Đặng Thành Tín

41 29 0
Bài giảng Hệ thống máy tính và ngôn ngữ C: Chương 10 - PGS.TS. Đặng Thành Tín

Đ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

Bài giảng Hệ thống máy tính và ngôn ngữ C - Chương 10: Hàm cung cấp cho người học các kiến thức: Khái niệm hàm, khai báo hàm, đối số của hàm - Đối số và tham trị, kết quả trả về của hàm,.... Mời các bạn cùng tham khảo.

CHƯƠNG 10 LỚP LƯU TRỮ CỦA BIẾN SỰ CHUYỂN KIỂU CHƯƠNG 10 LỚP LƯU TRỮ CỦA BIẾN SỰ CHUYỂN KIỂU 10.1 Khái niệm 10.2 Biến toàn cục biến cục 10.3 Biến tónh (static) 10.4 Biến REGISTER 10.5 Khởi động trị cho biến lớp 10.6 Sự chuyển kieåu 10.6 Định vị vùng nhớ cho lớp lưu trữ Bài tập cuối chương CuuDuongThanCong.com https://fb.com/tailieudientucntt CHƯƠNG 10 LỚP LƯU TRỮ CỦA BIẾN SỰ CHUYỂN KIỂU 10.1 KHÁI NIỆM Mỗi biến sử dụng chương trình phải khai báo, nhiên biến khai báo nhiều chỗ chương trình, biến khai báo hàm, hàm , chỗ làm cho biến có khả sử dụng khác nhau, từ hình thành nên lớp lưu trữ biến CuuDuongThanCong.com https://fb.com/tailieudientucntt CHƯƠNG 10 LỚP LƯU TRỮ CỦA BIẾN SỰ CHUYỂN KIỂU 10.1 KHÁI NIỆM Đối với C, dựa vào cách mà biến lưu trữ sử dụng, biến lớp lưu trữ khác sau đây: - Lớp biến tự động - Lớp biến toàn cục biến cục - Lớp biến tónh - Lớp biến ghi Có hai đặc tính quan trọng biến: tầm sử dụng biến thời gian tồn biến CuuDuongThanCong.com https://fb.com/tailieudientucntt CHƯƠNG 10 LỚP LƯU TRỮ CỦA BIẾN SỰ CHUYỂN KIỂU 10.1 KHÁI NIỆM Tầm sử dụng biến (scope) nơi mà biến sử dụng lệnh chương trình Do đặc tính mà ta có hai lớp lưu trữ khác - lớp lưu trữ biến toàn cục (global storage class) - lớp lưu trữ biến cục (local storage class) CuuDuongThanCong.com https://fb.com/tailieudientucntt CHƯƠNG 10 LỚP LƯU TRỮ CỦA BIẾN SỰ CHUYỂN KIỂU 10.1 KHÁI NIỆM Thời gian tồn biến (time life) xác định biến với giá trị tồn có ý nghóa đến lúc Sinh lớp: -lớp biến tự động (auto) -lớp biến tónh (static) CuuDuongThanCong.com https://fb.com/tailieudientucntt CHƯƠNG 10 LỚP LƯU TRỮ CỦA BIẾN SỰ CHUYỂN KIỂU 10.1 KHÁI NIỆM Lớp biến Tự động Tónh (không kết hợp được) Biến toàn cục tónh Biến cục tự động Biến cục tónh Lớp biến Toàn cục Cục CuuDuongThanCong.com (hay biến tự động) https://fb.com/tailieudientucntt CHƯƠNG 10 LỚP LƯU TRỮ CỦA BIẾN SỰ CHUYỂN KIỂU 10.2 BIẾN TOÀN CỤC VÀ BIẾN CỤC BỘ 10.2.1 Biến cục Biến cục bộ, gọi biến tự động (auto), biến khai báo sau cặp dấu móc { } (cặp dấu biết để bắt đầu cho lệnh phức thân hàm), biến khai báo danh sách đối số hàm CuuDuongThanCong.com https://fb.com/tailieudientucntt CHƯƠNG 10 LỚP LƯU TRỮ CỦA BIẾN SỰ CHUYỂN KIỂU 10.2 BIẾN TOÀN CỤC VÀ BIẾN CỤC BỘ 10.2.1 Biến cục Khi khai báo biến cục ta đặt không đặt từ khóa auto phía trước khai báo biến cục theo cú pháp sau: [auto] kiểu danh_sách_tên_biến; Ví dụ: int tong (int n) { auto int i; } CuuDuongThanCong.com https://fb.com/tailieudientucntt CHƯƠNG 10 LỚP LƯU TRỮ CỦA BIẾN SỰ CHUYỂN KIỂU 10.2 BIẾN TOÀN CỤC VÀ BIẾN CỤC BỘ 10.2.1 Biến cục Khi khai báo biến cục ta đặt không đặt từ khóa auto phía trước khai báo biến cục theo cú pháp sau: [auto] kiểu danh_sách_tên_biến; Ví dụ: int tong (int n) { auto int i; } CuuDuongThanCong.com https://fb.com/tailieudientucntt CHƯƠNG 10 LỚP LƯU TRỮ CỦA BIẾN SỰ CHUYỂN KIỂU 10.2 BIẾN TOÀN CỤC VÀ BIẾN CỤC BỘ 10.2.1 Biến cục Ví dụ : Xét chương trình xếp hai số, in kết theo thứ tự từ lớn tới nhỏ CuuDuongThanCong.com https://fb.com/tailieudientucntt CHƯƠNG 10 LỚP LƯU TRỮ CỦA BIẾN SỰ CHUYỂN KIỂU 10.4 BIẾN REGISTER Ví dụ: register int i; register char c; register unsigned u; resister long l; register int *r; register t; CuuDuongThanCong.com https://fb.com/tailieudientucntt CHƯƠNG 10 LỚP LƯU TRỮ CỦA BIẾN SỰ CHUYỂN KIỂU 10.4 BIẾN REGISTER Tầm sử dụng thời gian tồn biến ghi tương tự biến cục bộ, chúng truy xuất nhanh biến cục bình thường chúng ghi vi xử ly Các biến ghi thường sử dụng làm biến điều khiển vòng lặp biến phải truy xuất nhiều lần chương trình CuuDuongThanCong.com https://fb.com/tailieudientucntt CHƯƠNG 10 LỚP LƯU TRỮ CỦA BIẾN SỰ CHUYỂN KIỂU 10.5 KHỞI ĐỘNG TRỊ CHO BIẾN Ở CÁC LỚP Đối với biến toàn cục biến tónh, sau khai báo, biến C tự động gán trị Trong biến tự động biến ghi có giá trị không xác định (gọi trị rác) trị biểu thức CuuDuongThanCong.com https://fb.com/tailieudientucntt CHƯƠNG 10 LỚP LƯU TRỮ CỦA BIẾN SỰ CHUYỂN KIỂU 10.5 KHỞI ĐỘNG TRỊ CHO BIẾN Ở CÁC LỚP Trong suốt trình chạy chương trình, biến toàn cục biến tónh khởi động trị lần, lần mà khai báo biến thực thi Biến toàn cục biến tónh khởi động trị biểu thức Biến tự động biến ghi khởi động trị biểu thức mà giá trị biểu thức tới lúc xác định(có thể gọi hàm) CuuDuongThanCong.com https://fb.com/tailieudientucntt CHƯƠNG 10 LỚP LƯU TRỮ CỦA BIẾN SỰ CHUYỂN KIỂU 10.5 KHỞI ĐỘNG TRỊ CHO BIẾN Ở CÁC LỚP Việc khởi động cho biến thuộc kiểu kiện có cấu trúc mảng (array), struct union thực biến toàn cục biến tónh mà CuuDuongThanCong.com https://fb.com/tailieudientucntt CHƯƠNG 10 LỚP LƯU TRỮ CỦA BIẾN SỰ CHUYỂN KIỂU 10.6 SỰ CHUYỂN KIỂU Khi thực phép toán số học luân lý, C thực chuyển kiểu tự động C cho phép lập trình viên thực việc chuyển kiểu bắt buộc, ép kiểu (type casting) Cú pháp để ép kiểu biến, hay biểu thức: (type) giá_trị CuuDuongThanCong.com https://fb.com/tailieudientucntt CHƯƠNG 10 LỚP LƯU TRỮ CỦA BIẾN SỰ CHUYỂN KIỂU 10.6 SỰ CHUYỂN KIỂU Ví dụ: Cho khai báo biến sau: int a = 10, b = 3; double d; biểu thức cho kết đúng, giải thích?(xem lại thứ tự ưu tiên phép toán C) a) d = (double)(a/b); b) d = (double)a/b; c) d = a/(double)b; CuuDuongThanCong.com https://fb.com/tailieudientucntt CHƯƠNG 10 LỚP LƯU TRỮ CỦA BIẾN SỰ CHUYỂN KIỂU 10.7 ĐỊNH VỊ VÙNG NHỚ CHO CÁC LỚP LƯU TRỮ Có hai chế giúp dịch làm công việc này: -Bộ dịch cần dùng cách đắn bảng biểu trưng để theo dõi biến trình dịch -Bộ dịch theo phân chia nhớ hệ thống, cẩn thận định vị nhớ cho biến dựa vào đặc tính cụ thể, với vùng nhớ xác định dành riêng cho đối tượng đặc biệt CuuDuongThanCong.com https://fb.com/tailieudientucntt CHƯƠNG 10 LỚP LƯU TRỮ CỦA BIẾN SỰ CHUYỂN KIỂU 10.7 ĐỊNH VỊ VÙNG NHỚ CHO CÁC LỚP LƯU TRỮ 10.6.1 Bảng biểu trưng Bộ dịch C theo dõi biến chương trình với bảng biểu trưng Mỗi đầu vào bảng biểu trưng cho biến chứa: (1) tên biến, (2) kiểu biến, (3) vị trí nhớ mà biến định vị (4) danh hiệu định khu vực mà biến khai báo (tức tầm vực biến đó) CuuDuongThanCong.com https://fb.com/tailieudientucntt CHƯƠNG 10 LỚP LƯU TRỮ CỦA BIẾN SỰ CHUYỂN KIỂU 10.7 ĐỊNH VỊ VÙNG NHỚ CHO CÁC LỚP LƯU TRỮ 10.6.1 Bảng biểu trưng Ví dụ 11.18: Chương trình tính tốc độ mạng #include int main() { int amount; int rate; int time; int hours; int minutes; int seconds; // Nhập: số lượng byte tốc độ truyền mạng printf (“Có byte liệu truyền? ”); scanf (“%d”, &amount); printf (“Tốc độ truyền (bytes/giây)? ”); scanf (“%d”, &rate); CuuDuongThanCong.com https://fb.com/tailieudientucntt CHƯƠNG 10 LỚP LƯU TRỮ CỦA BIẾN SỰ CHUYỂN KIỂU 10.7 ĐỊNH VỊ VÙNG NHỚ CHO CÁC LỚP LƯU TRỮ 10.6.1 Bảng biểu trưng Ví dụ 11.18: Chương trình tính tốc độ mạng // Tính thời gian theo số giây time = amount / rate;` // Chuyển thời gian sang giờ, phút giây hours = time / 3600;// 3600 giây minutes = (time % 3600) / 60;// 60 giây phút seconds = (time % 3600) % 60;// phần dư lại giây // Xuất kết printf(“Thời gian: %dh %dm %ds\n”, hours, minutes, seconds); } CuuDuongThanCong.com https://fb.com/tailieudientucntt CHƯƠNG 10 LỚP LƯU TRỮ CỦA BIẾN SỰ CHUYỂN KIỂU 10.7 ĐỊNH VỊ VÙNG NHỚ CHO CÁC LỚP LƯU TRỮ 10.6.1 Bảng biểu trưng Danh hiệu Kiểu Amount int Vị trí (offset) Hours int -3 Main Minutes int -4 Main Rate Seconds Time int int int -1 -5 -2 Main Main Main CuuDuongThanCong.com Tầm vực Main https://fb.com/tailieudientucntt CHƯƠNG 10 LỚP LƯU TRỮ CỦA BIẾN SỰ CHUYỂN KIỂU 10.7 ĐỊNH VỊ VÙNG NHỚ CHO CÁC LỚP LƯU TRỮ 10.6.2 Định vị vùng nhớ cho biến Có hai vùng nhớ mà biến C định vị đó: vùng liệu toàn cục (global data section) ngăn xếp thực thi (run-time stack) (ngồi cịn có biến ghi) - Vùng biến toàn cục nơi chứa tất biến tồn cục Tổng qt hơn, nơi chứa biến tĩnh - Vùng stack thực thi nơi chứa biến cục (hay lớp biến lưu trữ tự động) Vùng offset bảng biểu trưng cung cấp thơng tin xác vị trí nhớ biến Nó cho biết số nhớ tính từ địa vùng nhớ chứa biến CuuDuongThanCong.com https://fb.com/tailieudientucntt CHƯƠNG 10 LỚP LƯU TRỮ CỦA BIẾN SỰ CHUYỂN KIỂU BÀI TẬP CUỐI CHƯƠNG Viết hàm cho lần gọi hàm hàm trả trị số sau trị trước dãy số Fibonaci Viết chương trình với hàm tính biểu thức sau đây: dùng không dùng bieán ghi t T   n   (n  1)   (n  2)     n! (n  1)! (n  2)! 1! (1   n)  (1   (n  1))  (1   (n  2))   1! n ! (n  1)!  (n  2)!   1! CuuDuongThanCong.com https://fb.com/tailieudientucntt CHƯƠNG 10 LỚP LƯU TRỮ CỦA BIẾN SỰ CHUYỂN KIỂU BÀI TẬP CUỐI CHƯƠNG Viết chương trình gồm hai module: main.c func.c, module main.c lưu hàm main() có lệnh gọi nhập ba hệ số tam thức bậc hai, kiểm tra in ấn; module func.c lưu hàm cần thiết để giải phương trình bậc hai biện luận tam thức bậc hai In hình số nguyên tố từ đến 1.000 Dùng biến ghi không dùng biến ghi Kiểm tra thời gian CuuDuongThanCong.com https://fb.com/tailieudientucntt ... https://fb.com/tailieudientucntt CHƯƠNG 10 LỚP LƯU TRỮ CỦA BIẾN SỰ CHUYỂN KIỂU 10. 7 ĐỊNH VỊ VÙNG NHỚ CHO CÁC LỚP LƯU TRỮ 10. 6.1 Bảng biểu trưng Ví dụ 11.18: Chương trình tính tốc độ mạng // Tính thời gian theo... https://fb.com/tailieudientucntt CHƯƠNG 10 LỚP LƯU TRỮ CỦA BIẾN SỰ CHUYỂN KIỂU 10. 7 ĐỊNH VỊ VÙNG NHỚ CHO CÁC LỚP LƯU TRỮ 10. 6.1 Bảng biểu trưng Ví dụ 11.18: Chương trình tính tốc độ mạng #include ... https://fb.com/tailieudientucntt CHƯƠNG 10 LỚP LƯU TRỮ CỦA BIẾN SỰ CHUYỂN KIỂU 10. 1 KHÁI NIỆM Tầm sử dụng biến (scope) nơi mà biến sử dụng lệnh chương trình Do đặc tính mà ta có hai lớp lưu trữ khác - lớp lưu trữ

Ngày đăng: 19/11/2020, 07:21

Trích đoạn

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

Tài liệu liên quan