Bài giảng Lập trình cơ bản C - Chương 9: Hàm

Tìm hiểu cách sử dụng hàm

Tìm hiểu cấu trúc của hàm

Khai báo hàm và các nguyên mẫu hàm

Tìm hiểu các kiểu khác nhau của biến

Hàm được gọi như thế nào

Truyền bằng giá trị

Truyền bằng tham chiếu

Tìm hiểu về các qui tắc về phạm vi của hàm

Các hàm trong các chương trình có nhiều tập tin

Các lớp lưu trữ

Con trỏ hàm

 

ppt 20 trang yennguyen 7080
Bạn đang xem tài liệu "Bài giảng Lập trình cơ bản C - Chương 9: Hàm", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Lập trình cơ bản C - Chương 9: Hàm

Bài giảng Lập trình cơ bản C - Chương 9: Hàm
1 
Hàm 
Chương 9 
Elementary Programming with C/Session 9/ Slide 2 of 20 
Mục tiêu của bài học 
Tìm hiểu cách sử dụng hàm 
Tìm hiểu cấu trúc của hàm 
Khai báo hàm và các nguyên mẫu hàm 
Tìm hiểu các kiểu khác nhau của biến 
Hàm được gọi như thế nào 
Truyền bằng giá trị 
Truyền bằng tham chiếu 
Tìm hiểu về các qui tắc về phạm vi của hàm 
Các hàm trong các chương trình có nhiều tập tin 
Các lớp lưu trữ 
Con trỏ hàm 
Elementary Programming with C/Session 9/ Slide 3 of 20 
Hàm 
Hàm là một đoạn chương trình thực hiện một tác vụ được định nghĩa cụ thể 
Các hàm được sử dụng để rút gọn cho một chuỗi các chỉ thị được thực hiện nhiều lần 
Hàm dễ viết và dễ hiểu 
Việc gỡ lỗi chương trình trở nên dễ dàng hơn khi cấu trúc của chương trình rõ ràng với hình thức lập trình theo module 
Chương trình cấu tạo từ các hàm cũng dễ dàng bảo trì, bởi vì sự sửa đổi khi có yêu cầu được giới hạn trong từng hàm của chương trình 
Elementary Programming with C/Session 9/ Slide 4 of 20 
Cấu trúc hàm 
Cú pháp tổng quát của một hàm trong C như sau: 
type_specifier xác định kiểu dữ liệu của giá trị mà hàm sẽ trả về. 
Một tên hàm hợp lệ được gán cho định danh của hàm 
Các đối số xuất hiện trong cặp dấu ngoặc () được gọi là các tham số hình thức. 
Elementary Programming with C/Session 9/ Slide 5 of 20 
Các đối số của hàm 
Chương trình tính bình phương của các số từ 1 đến 10 
Dữ liệu được truyền từ hàm main() đến hàm squarer() 
Hàm thao tác trên dữ liệu sử dụng các đối số 
Actual Arguments 
Formal Arguments 
Elementary Programming with C/Session 9/ Slide 6 of 20 
Sự trở về từ một hàm 
Lệnh return ngay lập tức chuyển điều khiển từ hàm trở về chương trình gọi. 
Giá trị đặt trong cặp dấu ngoặc () theo sau lệnh return được trả về cho chương trình gọi. 
Elementary Programming with C/Session 9/ Slide 7 of 20 
Kiểu dữ liệu của hàm 
 type_specifier không xuất hiện trước hàm squarer(), vì squarer() trả về một giá trị kiểu số nguyên int 
 type_specifier là không bắt buộc nếu kiểu của giá trị trả về là một số nguyên hoặc nếu không có giá trị trả về 
 Tuy nhiên, để tránh sự không nhất quán, một kiểu dữ liệu nên được xác định. 
Elementary Programming with C/Session 9/ Slide 8 of 20 
Gọi hàm 
Dấu chấm phẩy được đặt cuối câu lệnh khi gọi hàm, nhưng không dùng cho định nghĩa hàm 
Cặp dấu ngoặc () là bắt buộc theo sau tên hàm, cho dù hàm có đối số hay không 
Nhiều nhất một giá trị được trả về 
Chương trình có thể có nhiều hơn một hàm 
Hàm gọi đến một hàm khác được gọi là hàm gọi 
Hàm đang được gọi đến được gọi là hàm được gọi 
Elementary Programming with C/Session 9/ Slide 9 of 20 
Khai báo hàm 
Việc khai báo hàm là bắt buộc khi hàm được sử dụng trước khi nó được định nghĩa 
Hàm address() được gọi trước khi nó được định nghĩa 
Một số trình biên dịch C sẽ thông báo lỗi nếu hàm không được khai báo trước khi gọi 
Điều này còn được gọi là sự khai báo không tường minh 
#include 
Main(){ 
	address() 
} 
address(){ 
} 
Elementary Programming with C/Session 9/ Slide 10 of 20 
Xác định kiểu dữ liệu của các đối số 
Nguyên mẫu hàm 
char abc(int x, nt y); 
Thuận lợi : 
Bất kỳ sự chuyển kiểu không hợp lệ giữa các đối số được dùng để gọi hàm và kiểu đã được định nghĩa cho các tham số của hàm sẽ được thông báo. 
	char noparam (void); 
Elementary Programming with C/Session 9/ Slide 11 of 20 
Biến cục bộ 
Được khai báo bên trong một hàm 
Được tạo tại điểm vào của một khối và bị hủy tại điểm ra khỏi khối đó 
Tham số hình thức 
Được khai báo trong định nghĩa hàm như là các tham số 
Hoạt động như một biến cục bộ bên trong một hàm 
Biến toàn cục 
Được khai báo bên ngoài tất cả các hàm 
Lưu các giá trị tồn tại suốt thời gian thực thi của chương trình 
Các biến 
Elementary Programming with C/Session 9/ Slide 12 of 20 
Lớp lưu trữ 
Mỗi biến trong C có một tính chất được gọi là lớp lưu trữ 
Lớp lưu trữ định nghĩa hai đặc tính của biến: 
Thời gian sống của một biến là khoảng thời gian nó duy trì một giá trị xác định 
Tầm vực của một biến xác định các phần của một chương trình có thể nhận ra biến đó 
Elementary Programming with C/Session 9/ Slide 13 of 20 
auto 
extern 
static 
register 
Lớp lưu trữ - tt 
Elementary Programming with C/Session 9/ Slide 14 of 20 
Các qui luật phạm vi – là những qui luật quyết định một đoạn mã lệnh có thể truy xuất đến một đoạn mã lệnh hay dữ liệu khác hay không 
Mã lệnh bên trong một hàm là cục bộ với hàm đó 
Hai hàm có cùng mức phạm vi 
Một hàm không thể được định nghĩa bên trong một hàm khác 
Các qui luật phạm vi của hàm 
Elementary Programming with C/Session 9/ Slide 15 of 20 
Gọi hàm 
Truyền tham trị 
Truyền tham chiếu 
Elementary Programming with C/Session 9/ Slide 16 of 20 
Truyền bằng giá trị 
Mặc nhiên trong C, tất cả các đối số được truyền bằng giá trị 
Khi các đối số được truyền đến hàm được gọi, các giá trị được truyền thông qua các biến tạm 
 Mọi sự thao tác chỉ được thực hiện trên các biến tạm 
Các đối số được gọi là truyền bằng giá trị khi giá trị của biến được truyền đến hàm được gọi và bất kỳ sự thay đổi trên giá trị này không ảnh hưởng đến giá trị gốc của biến được truyền 
Elementary Programming with C/Session 9/ Slide 17 of 20 
Truyền bằng tham chiếu 
Với truyền tham chiếu, hàm cho phép truy xuất đến địa chỉ thực trong bộ nhớ của đối số và vì vậy có thể thay đổi giá trị của các đối số của hàm gọi 
Định nghĩa 
	 getstr(char *ptr_str, int *ptr_int); 
Gọi 
	 getstr(pstr, &var); 
Elementary Programming with C/Session 9/ Slide 18 of 20 
Sự lồng nhau của lời gọi hàm 
main() 
	{ 
	palindrome(); 
	} 
palindrome() 
	{ 
	getstr(); 
	reverse(); 
	cmp(); 
	} 
Elementary Programming with C/Session 9/ Slide 19 of 20 
Các hàm trong chương trình 
có nhiều tập tin 
Các hàm cũng có thể được định nghĩa là static hoặc external 
Các hàm tĩnh (static) chỉ được nhận biết bên trong tập tin chương trình và phạm vi của nó không vượt ra khỏi tập tin chương trình	 
	 static fn _type fn_name (argument list); 
Hàm ngoại (external) được nhận biết bởi tất cả các tập tin của chương trình 
extern fn_type fn_name (argument list); 
Elementary Programming with C/Session 9/ Slide 20 of 20 
Con trỏ hàm 
Lưu địa chỉ bắt đầu của hàm 
Hàm có một vị trí vật lý trong bộ nhớ, vị trí này có thể gán cho một con trỏ 
void check(char *a, char *b, int (*cmp)()) 
{ 
printf(“testing for equality \n”); 
if (!(*cmp)(a,b)) 
	printf(“Equal”); 
else 
	printf(“Not Equal”); 
} 
#include 
#include 
void check(char *a, char *b, int (*cmp)()); 
main() { 
	char sl[80]; 
	int (*p)(); 
	p = strcmp; 
	gets(s1); 
	gets(s2); 
	check(s1, s2, p); 
} 

File đính kèm:

  • pptbai_giang_lap_trinh_co_ban_c_chuong_9_ham.ppt