Bài giảng Tin học đại cương - Bài 11: Hàm - Đỗ Bá Lâm

Biến register – Thanh ghi có tốc độ truy cập nhanh hơn RAM, bộ nhớ ngoài – Lưu biến trong thanh ghi sẽ tăng tốc độ thực hiện chương trình – Cú pháp register tên_biến; – Lưu ý: số lượng biến register không nhiều và thường chỉ với kiểu dữ liệu nhỏ như int, char

pdf23 trang | Chia sẻ: huongthu9 | Lượt xem: 538 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Bài giảng Tin học đại cương - Bài 11: Hàm - Đỗ Bá Lâm, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG Đỗ Bá Lâm lamdb@soict.hut.edu.vn TIN HỌC ĐẠI CƯƠNG Bài 11. Hàm Nội dung 11.1. Khái niệm hàm 11.2. Khai báo và sử dụng hàm 11.3. Phạm vi của biến 2 Nội dung 11.1. Khái niệm hàm 11.1.1. Khái niệm chương trình con 11.1.2. Phân loại chương trình con 11.2. Khai báo và sử dụng hàm 11.3. Phạm vi của biến 3 11.1.1. Khái niệm chương trình con • Khái niệm – Là một chương trình nằm trong một chương trình lớn hơn nhằm thực hiện một nhiệm vụ cụ thể • Vai trò – Chia nhỏ chương trình ra thành từng phần để quản lý => Phương pháp lập trình có cấu trúc – Có thể sử dụng lại nhiều lần: printf, scanf – Chương trình dễ dàng đọc và bảo trì hơn 4 • Phân loại • Hàm: trả về giá trị trong khi thủ tục thì không • Trong C: – Chỉ cho phép khai báo chương trình con là hàm. – Sử dụng kiểu “void” với ý nghĩa “không là kiểu dữ liệu nào cả” để chuyển thủ tục về dạng hàm Thủ tục (procedure) Chương trình con Hàm (function) 11.1.2. Phân loại chương trình con 5 • Phân loại hàm Hàm tự viết (Người dùng định nghĩa) HÀM Hàm chuẩn (Có trong thư viện) 11.1.2. Phân loại chương trình con 6 11.2. Khai báo và sử dụng hàm 11.2.1. Khai báo hàm 11.2.2. Sử dụng hàm 7 11.2.1. Khai báo hàm • Ví dụ: – Chương trình in ra bình phương của các số tự nhiên từ 1 đến 10 – Gồm 2 hàm: • Hàm binhphuong(int x): trả về bình phương của x • Hàm main(): với mỗi số nguyên từ 1 đến 10, gọi hàm binhphuong với một giá trị đầu vào và hiển thị kết quả. 8 #include #include int binhphuong(int x){ int y; y = x * x; return y; } main(){ int i; for (i=0; i<= 10; i++) printf(“%d ”, binhphuong(i)); getch(); } Khai báo hàm Gọi hàm 11.2.1. Khai báo hàm 9 • Dòng đầu hàm – Là thông tin trao đổi giữa các hàm. Phân biệt giữa các hàm với nhau. – Kiểu giá trị trả về: kiểu dữ liệu bất kì, không được là kiểu dữ liệu mảng. – Tên hàm: là tên hợp lệ, trong C tên hàm là duy nhất [] tên_hàm ([danh_sách_tham_số]) { [] [] } 11.2.1. Khai báo hàm 10 – Tham số • Cho biết những tham số giả định cung cấp hoạt động cho hàm => các tham số hình thức • Tham số cung cấp dữ liệu cho hàm lúc hoạt động: tham số thực – Ví dụ: int max(int a, int b, int c) • Thân hàm – return • Gọi hàm thông qua tên hàm và các tham số thực cung cấp cho hàm. • Sau khi thực hiện xong, trở về điểm mà hàm được gọi thông qua câu lệnh return hoặc kết thúc hàm. • Cú pháp chung: return biểu_thức; 11.2.1. Khai báo hàm 11 11.2.1. Khai báo hàm #include #include int binhphuong(int x); main(){ int i; for (i=0; i<= 10; i++) printf(“%d ”, binhphuong(i)); getch(); } int binhphuong(int x){ int y; y = x * x; return y; } Nguyên mẫu hàm (function prototype) Định nghĩa hàm • Ý nghĩa của nguyên mẫu hàm – Cho phép định nghĩa sau khi sử dụng. Nhưng phải khai báo trước – Cho phép đưa ra lời gọi đến một hàm mà không cần biết định nghĩa • Ví dụ: khi gọi printf, scanf chúng ta chỉ cần quan tâm các tham số truyền cho hàm • Tệp stdio.h chứa nguyên mẫu hàm của printf và scanf 11.2.1. Khai báo hàm • Các hàm thư viện • Ngôn ngữ C cung cấp một số hàm thư viện như: xử lý vào ra, hàm toán học, hàm xử lý xâu • Để sử dụng các hàm này chúng ta chỉ cần khai báo nguyên mẫu của chúng trước khi sử dụng. – Khai báo thông qua chỉ thị #include – tệp_tiêu_đề (.h) đã chứa các nguyên mẫu hàm 11.2.1. Khai báo hàm 11.2.2. Sử dụng hàm • Cú pháp: tên_hàm (danh_sách_tham_số); • Ví dụ: binhphuong(0), binhphuong(1) • Lưu ý: – Nếu hàm nhận nhiều tham số thì các tham số ngăn cách nhau bởi dấu phẩy – Luôn luôn cần cặp dấu ngoặc đơn sau tên hàm – Các tham số của hàm sẽ nhận các giá trị từ tham số truyền vào – Thực hiện lần lượt các lệnh cho đến khi gặp lệnh return/kết thúc chương trình 15 11.3. Phạm vi của biến • 11.3.1. Phạm vi của biến • 11.3.2. Phân loại biến • 11.3.3. Câu lệnh static và register 16 • Phạm vi: khối lệnh, chương trình con, chương trình chính • Biến khai báo trong phạm vi nào thì sử dụng trong phạm vi đó • Trong cùng một phạm vi các biến có tên khác nhau. • Tình huống – Trong hai phạm vi khác nhau có hai biến cùng tên. Trong đó một phạm vi này nằm trong phạm vi kia? #include #include int i; int binhphuong(int x){ int y; y = x * x; return y; } main(){ int y; for (i=0; i<= 10; i++){ y = binhphuong(i); printf(“%d ”, y); } } 11.3.1. Phạm vi của biến 17 • Phân loại biến – Biến toàn cục: biến được khai báo ngoài mọi hàm, được sử dụng ở các hàm đứng sau nó – Biến cục bộ: biến được khai báo trong lệnh khối hoặc chương trình con, được đặt trước các câu lệnh. • Ghi nhớ – Hàm main() cũng là một chương trình con nhưng là nơi chương trình được bắt đầu cũng như kết thúc – Biến khai báo trong hàm main() cũng là biến cục bộ, chỉ có phạm vi trong hàm main(). 11.3.2. Phân loại biến 18 • Biến static – Xuất phát: biến cục bộ ra khỏi phạm vi thì bộ nhớ dành cho biến được giải phóng – Yêu cầu lưu trữ giá trị của biến cục bộ một cách lâu dài => sử dụng từ khóa static – So sánh với biến toàn cục? – Cú pháp: static tên_biến; 11.3.3. Câu lệnh static và register 19 # include # include void fct() { static int count = 1; printf("\n Day la lan goi ham fct lan thu %2d", count++); } main(){ int i; for(i = 0; i < 10; i++) fct(); getch(); } 11.3.3. Câu lệnh static và register 20 11.3.3. Câu lệnh static và register Day la lan goi ham fct lan thu 1 Day la lan goi ham fct lan thu 2 Day la lan goi ham fct lan thu 3 Day la lan goi ham fct lan thu 4 Day la lan goi ham fct lan thu 5 Day la lan goi ham fct lan thu 6 Day la lan goi ham fct lan thu 7 Day la lan goi ham fct lan thu 8 Day la lan goi ham fct lan thu 9 Day la lan goi ham fct lan thu 10 21 11.3.3. Câu lệnh static, register • Biến register – Thanh ghi có tốc độ truy cập nhanh hơn RAM, bộ nhớ ngoài – Lưu biến trong thanh ghi sẽ tăng tốc độ thực hiện chương trình – Cú pháp register tên_biến; – Lưu ý: số lượng biến register không nhiều và thường chỉ với kiểu dữ liệu nhỏ như int, char 22 Thảo luận 23

Các file đính kèm theo tài liệu này:

  • pdfbai_giang_tin_hoc_dai_cuong_bai_11_ham_do_ba_lam.pdf