Tin học đại cương - Phần 2: Lập trình bằng ngôn ngữ C - Bài 5: Hàm (function)

Khai báo và sử dụng hàm

5.3. Phạm vi biến

5.4. Nguyên mẫu hàm

pdf16 trang | Chia sẻ: Mr Hưng | Lượt xem: 849 | Lượt tải: 0download
Nội dung tài liệu Tin học đại cương - Phần 2: Lập trình bằng ngôn ngữ C - Bài 5: Hàm (function), để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
11 PHẦN 2: LẬP TRÌNH BẰNG NGÔN NGỮ C BÀI 5: HÀM (FUNCTION) Nguyễn Hữu Nam Dương Email: duongnnhn-fit@mail.hut.edu.vn TIN HỌC ĐẠI CƯƠNG 2 BÀI 5: HÀM (FUNTION) 5.1. Giới thiệu về hàm (function) 5.2. Khai báo và sử dụng hàm 5.3. Phạm vi biến 5.4. Nguyên mẫu hàm 23 5.1. Giới thiệu về hàm Một trong những tư tưởng chính của lập trình cấu trúc:  Chia nhỏ một chương trình thành các chương trình con đảm nhận những công việc nhỏ.  Viết thành hàm (function) để khi cần chỉ cần gọi ra chứ không phải viết lại toàn bộ.  Ví dụ: Các hàm toán học: sin(x), pow(x,y), sqrt(x),... Các hàm do người dùng viết ra. 4 Giới thiệu về hàm(tiếp) Đầu vào của hàm:  Các tham số Hàm có thể có nhận vào các tham số đầu vào hoặc không. Đầu ra của hàm:  Giá trị của hàm  Sự thay đổi giá trị của các tham số. Hàm có thể trả về giá trị hoặc không trả về giá trị 35 BÀI 5: HÀM 5.1. Giới thiệu về hàm (function) 5.2. Khai báo và sử dụng hàm 5.3. Phạm vi biến 5.4. Nguyên mẫu hàm 6 5.2.1. Khai báo hàm (tiếp) Tên hàm  Có thể là bất kì một định danh hợp lệ nào.  Thường mang nghĩa gợi ý chức năng công việc mà hàm thực hiện.  Các hàm không được đặt tên trùng nhau. 47 5.2.1. Khai báo hàm (tiếp) Kiểu dữ liệu trả về của hàm:  Kiểu dữ liệu của giá trị tính toán mà hàm trả về sau khi thực hiện.  Hàm có thể có giá trị trả về hoặc không có giá trị trả về. Nếu có giá trị trả về, trong thân hàm có ít nhất một lệnh return. Nếu không có giá trị trả về cần khai báo cho hàm đó có kiểu trả về là void. 8 5.2.1. Khai báo hàm (tiếp) Tham số của hàm:  Tham số chứa dữ liệu vào cung cấp cho hàm. (đầu vào)  Tham số chứa dữ liệu ra mà hàm tính toán được.  Một hàm có thể không có tham số, hoặc có nhiều tham số. 59 5.2.1. Khai báo hàm Cách khai báo và sử dụng Cách 1:  Khai báo hàm  Viết mã lệnh hoàn chỉnh cho hàm.  Sử dụng hàm. 10 5.2.1. Khai báo hàm Cách 2:  Khai báo hàm nguyên mẫu  Sử dụng các hàm đã khai báo  Viết mã lệnh hoàn chỉnh cho các hàm nguyên mẫu đã khai báo. 611 5.2.1. Khai báo hàm Cách 1: Cú pháp: kieu_gia_tri_tra_ve ten_ham(danh_sach_tham_so) { //Than ham` bao gồm: //Các khai bao biến ... //Các câu lệnh } 12 5.2.1. Khai báo hàm (tiếp) Ví dụ: int giai_thua(int a) { int ket_qua; int i; ket_qua = 1; for(i = 1;i<a;i++) ket_qua = ket_qua * i; if(a < 0) ket_qua = -1; if(a == 0) ket_qua = 1; return ket_qua; }    Dong dau ham Cac khai bao Cac cau lenh 713 Ví dụ #include #include int max(int x, int y, int z) { int max1; max1 = x>y?x:y; max1 = max1>z?max1:z; return max1;// max(x,y,z) = max1; } 14 void main() { int a,b,c; clrscr(); printf("\n Nhap gia tri cho 3 so nguyen a, b, c: "); scanf("%d %d %d",&a,&b,&c); printf("\n Gia tri cac so vua nhap: "); printf(" a = %-5d b = %-5d c = %-5d"); printf("\n Gia tri lon nhat trong 3 so la %d",max(a,b,c)); getch(); } 815 5.2.1. Khai báo hàm (tiếp) Lệnh return  Cú pháp: return bieu_thuc;  Khi gặp lệnh này, chương trình sẽ tính toán giá trị của bieu_thuc, lấy kết quả tính toán được làm giá trị trả về cho lời gọi hàm rồi kết thúc việc thực hiện hàm, trở về chương trình đã gọi nó.  Nếu thiếu bieu_thuc Kết thúc việc thực hiện hàm mà không trả về giá trị nào cả. 16 5.2.2. Sử dụng hàm Sử dụng hàm hay gọi hàm  Cú pháp: Ten_ham([danh_sach_tham_so]) Tham số được cung cấp cho hàm trong quá trình thực hiện được gọi là tham số thực. Kiểu dữ liệu của tham số hình thức và tham số thực phải giống nhau. 917 Quá trình thực hiện một hàm Khi hàm được gọi, quá trình diễn ra như sau:  Nếu hàm có tham số, trước tiên các tham số sẽ được gán giá trị thực tương ứng.  Chương trình sẽ thực hiện tiếp các câu lệnh trong thân hàm bắt đầu từ lệnh đầu tiên đến câu lệnh cuối cùng.  Khi gặp lệnh return hoặc dấu } cuối cùng trong thân hàm, chương trình sẽ thoát khỏi hàm để trở về chương trình gọi nó và thực hiện tiếp tục những câu lệnh của chương trình này. 18 BÀI 5: HÀM 5.1. Khái niệm hàm 5.2. Khai báo và sử dụng hàm 5.3. Phạm vi biến 5.4. Nguyên mẫu hàm 10 19 5.3. Phạm vi biến Biến địa phương (Local Variable):  Là các biến được khai báo trong lệnh khối hoặc trong thân chương trình con. Biến toàn cục (Global Variable):  Vị trí khai báo của biến toàn cục là sau phần khai báo tệp tiêu đề và khai báo hàm nguyên mẫu 20 5.3. Phạm vi biến (tiếp) Ví dụ 1: #include void main() { { int a = 1; printf(“\n a1 = %d”,a); { int a = 2; printf(“\n a2 = %d”,a); } printf(“\n a3 = %d”,a); } { int a = 3; printf(“\n a4 = %d”,a); } } 11 21 Ví dụ 2 #include #include int a, b, c; int tich() { printf("\n Gia tri cac bien tong the a, b, c: "); printf(" a = %-5d b = %-5d c = %- 5d“,a,b,c); return a*b*c; } 22 void main() { clrscr(); printf("\n Nhap gia tri cho 3 so nguyen a, b, c: "); scanf("%d %d %d",&a,&b,&c); printf("\n Tich cua 3 so la %d",tich()); getch(); } 12 23 24 Biến register Thanh ghi có tốc độ truy nhập nhanh hơn so với các loại bộ nhớ khác (RAM, bộ nhớ ngoài). Nếu một biến thường xuyên sử dụng được lưu vào trong thanh ghi thì tốc độ thực hiện của chương trình sẽ được tăng lên. Để làm điều này ta đặt từ khóa register trước khai báo của biến đó.  Ví dụ: register int a; Số lượng và kích thước các thanh ghi có hạn  Số lượng biến khai báo register sẽ không nhiều và thường chỉ áp dụng với những biến có kích thước nhỏ như kiểu char, int. 13 25 Biến static Một biến cục bộ khi ra khỏi phạm vi của biến đó thì bộ nhớ dành để lưu trữ biến đó sẽ được giải phóng. Nếu cần lưu giá trị của các biến cục bộ này, cần khai báo biến với từ khóa static.  Ví dụ: static int a; Biến static là biến tĩnh, nghĩa là nó sẽ được cấp phát một vùng nhớ thường xuyên từ lúc khai báo và chỉ giải phóng khi chương trình chính kết thúc. 26 Ví dụ # include # include void fct() { static int count = 1; printf("\n Day la lan goi ham fct lan thu%2d", count++); } void main() { int i; for(i = 0; i < 10; i++) fct(); getch(); } 14 27 BÀI 5: HÀM 5.1. Khái niệm hàm 5.2. Khai báo và sử dụng hàm 5.3. Phạm vi biến 5.4. Nguyên mẫu hàm 28 Nguyên mẫu hàm – Ví dụ #include #include int max(int, int, int); // khai bao nguyen mau ham void main() { int a,b,c; clrscr(); printf("\n Nhap gia tri cho 3 so nguyen a, b, c: "); scanf("%d %d %d",&a,&b,&c); printf("\n Gia tri cac so vua nhap: "); printf(" a = %-5d b = %-5d c = %-5d"); printf("\n Gia tri lon nhat trong 3 so la %d",max(a,b,c)); getch(); } 15 29 int max(int x, int y, int z) { int max; max = x>y?x:y; max = max>z?max:z; return max; } 30 Nguyên mẫu hàm Nếu muốn đặt phần khai báo hàm nằm sau hàm main() Cần khai báo nguyên mẫu của hàm  Để báo cho chương trình dịch biết có một hàm có dòng đầu hàm giống như trong phần nguyên mẫu này.  Chương trình dịch có thể kiểm tra được là các lời gọi hàm trong chương trình chính có đúng hay không Có phù hợp về kiểu dữ liệu trả về hay không Các tham số thực có kiểu dữ liệu có phù hợp với kiểu dữ liệu đã khai báo hay không. Trong hàm nguyên mẫu có thể không cần nêu tên các tham số hình thức, nhưng trong phần khai báo hàm ta cần phải có các tham số hình thức. 16 31 Câu hỏi?

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

  • pdfhdc_phan2_bai_5_9959.pdf
Tài liệu liên quan