Bài giảng Tin học đại cương - Bài 11: Hàm
Bạn đang xem tài liệu "Bài giảng Tin học đại cương - Bài 11: Hàm", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Tài liệu đính kèm:
bai_giang_tin_hoc_dai_cuong_bai_11_ham.pdf
Nội dung text: Bài giảng Tin học đại cương - Bài 11: Hàm
- TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI Nội dung VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG 11.1. Khái niệm hàm 11.2. Khai báo và sử dụng hàm TIN HỌC ĐẠI CƯƠNG 11.3. Phạm vi của biến Phần 3. Lập trình C Bài 11. Hàm 2 Nội dung 11.1.1. Khái niệm chương trình con 11.1. Khái niệm hàm • Khái niệm 11.1.1. Khái niệm chương trình con – Là một chương trình nằm trong một chương 11.1.2. Phân loại chương trình con trình lớn hơn nhằm thực hiện một nhiệm vụ cụ thể 11.2. Khai báo và sử dụng hàm • Vai trò 11.3. Phạm vi của biến – 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 3 4 1
- 11.1.2. Phân loại chương trình con 11.1.2. Phân loại chương trình con • Phân loại chương trình con • Phân loại hàm Chương trình con HÀM Hàm Thủ tục (function) (procedure) – Hàm: trả về giá trị trong khi thủ tục thì không Hàm chuẩn Hàm tự viết – Trong C: (Có trong thư viện) (Người dùng định nghĩa) • 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 5 6 11.2. Khai báo và sử dụng hàm 11.2.1. Khai báo hàm 11.2.1. Khai báo hàm • Ví dụ: 11.2.2. Sử dụng hàm – 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ả. 7 8 2
- 11.2.1. Khai báo hàm 11.2.1. Khai báo hàm #include [ ] tên_hàm ([danh_sách_tham_số]) #include { int binhphuong(int x){ [ ] int y; [ ] Khai báo hàm } y = x * x; return y; • Dòng đầu hàm } – Là thông tin trao đổi giữa các hàm. Phân biệt void main(){ giữa các hàm với nhau. int i; – Kiểu giá trị trả về: kiểu dữ liệu bất kì, không for (i=0; i các tham số hình thức • Tham số cung cấp dữ liệu cho hàm lúc hoạt động: int giai_thua(int a) Dong dau ham { tham số thực int ket_qua; Cac khai bao – Ví dụ: int max(int a, int b, int c) int i; • Thân hàm ket_qua = 1; for(i = 1;i<a;i++) – return ket_qua = ket_qua * i; Cac cau lenh • Gọi hàm thông qua tên hàm và các tham số thực cung if(a < 0) ket_qua = -1; cấp cho hàm. if(a == 0) ket_qua = 1; return ket_qua; • 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. 11 • Cú pháp chung: return biểu_thức; 12 3
- 11.2.1. Khai báo hàm 11.2.1. Khai báo hàm #include #include • Ý nghĩa của nguyên mẫu hàm Nguyên mẫu hàm int binhphuong(int x); – Cho phép định nghĩa sau khi sử dụng. Nhưng void main(){ phải khai báo trước (function int i; – Cho phép đưa ra lời gọi đến một hàm mà không prototype) for (i=0; i – Thực hiện lần lượt các lệnh cho đến khi gặp lệnh – tệp_tiêu_đề (.h) đã chứa các nguyên mẫu hàm return/kết thúc chương trình 16 15 4
- 11.3. Phạm vi của biến 11.3.1. Phạm vi của biến • 11.3.1. Phạm vi của biến • Phạm vi: khối lệnh, chương #include trình con, chương trình chính #include • 11.3.2. Phân loại biến • Biến khai báo trong phạm vi int i; • 11.3.3. Câu lệnh static và register nào thì sử dụng trong phạm int binhphuong(int x){ vi đó int y; y = x * x; • Trong cùng một phạm vi các return y; biến có tên khác nhau. } • Tình huống void main(){ – Trong hai phạm vi khác nhau int y; có hai biến cùng tên. Trong for (i=0; i – Biến toàn cục: biến được khai báo ngoài mọi void main() hàm, được sử dụng ở các hàm đứng sau nó { { int a = 1; – Biến cục bộ: biến được khai báo trong lệnh khối printf(“\n a = %d”,a); hoặc chương trình con, được đặt trước các câu { int a = 2; lệnh. printf(“\n a = %d”,a); } • Ghi nhớ printf(“\n a = %d”,a); – 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 { int a = 3; như kết thúc printf(“\n a = %d”,a); } – 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(). 19 20 5
- Ví dụ 2 #include void main() #include { int a, b, c; clrscr(); int tich() { printf("\n Nhap gia tri cho 3 printf("\n Gia tri cac bien tong the so nguyen a, b, c: "); a, b, c: "); scanf("%d %d %d",&a,&b,&c); printf(" a = %-5d b = %-5d c = %- 5d“,a,b,c); printf("\n Tich cua 3 so la return a*b*c; %d",tich()); } getch(); 21 } 22 11.3.3. Câu lệnh static và register • 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; 23 24 6
- 11.3.3. Câu lệnh static và register 11.3.3. Câu lệnh static và register # include Day la lan goi ham fct lan thu 1 # include Day la lan goi ham fct lan thu 2 void fct() { Day la lan goi ham fct lan thu 3 static int count = 1; Day la lan goi ham fct lan thu 4 printf("\n Day la lan goi ham fct lan thu Day la lan goi ham fct lan thu 5 %2d", count++); 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 void main(){ Day la lan goi ham fct lan thu 9 int i; Day la lan goi ham fct lan thu 10 for(i = 0; i tên_biến; – Lưu ý: số lượng biến register không nhiều và printf (“Gia tri cua i %d “, i); thường chỉ với kiểu dữ liệu nhỏ như int, char 27 28 7
- Bài tập int a =10; int b, c; b = ++a *2; c= a++ *2; printf (“ b= %d “,b); printf (“ c= %d “, c); 29 30 8



