Bài giảng Ngôn ngữ lập trình C - Chương 4: Hàm

Nguyên mẫu hàm  Về nguyên tắc khi gọi một hàm thì hàm đó phải được định nghĩa trước, nếu không chương trình sẽ bị lỗi.  Tuy nhiên cũng có thể gọi một hàm chưa đươc định nghĩa trước bằng cách khai báo trước nguyên mẫu hàm. Nguyên mẫu hàm thực chất là dòng đầu của hàm và thêm vào dấu chấm phẩy.  Trong nguyên mẫu hàm có thể bỏ tên các đối.

pdf17 trang | Chia sẻ: maiphuongtl | Lượt xem: 2233 | Lượt tải: 1download
Bạn đang xem nội dung tài liệu Bài giảng Ngôn ngữ lập trình C - Chương 4: Hàm, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
CHƯƠNG 4: HÀM • Nội dung Khái niệm hàm Khai báo hàm Lời gọi hàm Nguyên tắc hoạt động của hàm Truyền theo giá trị Phạm vi của biến Hàm kiểu void Truyền theo địa chỉ Khi nào sử dụng đối là con trỏ Dùng hàm có giá trị trả về hay hàm kiểu void Nguyên mẫu hàm Khái niệm hàm • Hàm là một đoạn chương trình thực hiện trọn vẹn một công việc nhất định. Nó chia cắt công việc lớn thành các công việc nhỏ hơn. Điều quan trọng là hàm giúp để làm lại những gì đã làm trước đó thay vì phải bắt đầu từ đầu một chức năng nào đó và có thể dùng nhiếu lần trong cùng một đoạn chương trình. Khai báo hàm • Cách viết khai báo hàm như sau: • () • { • • • return • } • Trong đó:  Kiểu hàm có thể là một kiểu dữ liệu nào đó (char, int, float, double, …) hoặc là kiểu void.  Tên hàm bắt buộc phải có đối với mọi hàm.  Danh sách đối số (còn gọi là tham số hình thức) thì có thể có hoặc không tùy thuộc ta định dùng hàm đó làm gì.  Phần bao trong dấu ngoặc {} còn gọi là thân hàm, dấu {} là bắt buộc đối với mọi hàm.  Khi cần thêm một số biến thì ta cần khai báo thêm. Các biến này gọi là biến cục bộ vì chỉ riêng hàm này sử dụng.  Phần câu lệnh thực hiện nhiệm vụ của hàm.  Câu lệnh return có thể có hoặc không, khi kiểu hàm không phải là void thì nó bắt buộc phải có. Câu lệnh này có nhiệm vụ trả về một giá trị cho nơi gọi hàm. Lời gọi hàm • Hàm được sử dụng thông qua lời gọi tới nó. Cách viết một lời gọi hàm như sau: • ()  Số tham số thực phải bằng số đối số.  Kiểu của tham số thực phải phù hợp với kiểu của đối tương ứng. Nguyên tắc hoạt động của hàm  Cấp phát bộ nhớ cho các đối số và các biến cục bộ.  Gán giá trị của các tham số thực cho các đối tương ứng.  Thực hiện các câu lệnh trong thân hàm.  Khi gặp câu lệnh return hoặc dấu “}” cuối cùng của thân hàm thì máy sẽ giải phóng các đối, các biến cục bộ và thóa khỏi hàm. • Ví dụ 1: Hàm Max() sau sẽ trả về giá trị lớn nhất của hai số thực • float Max(float x, float y) • { • float res; //Khai báo thêm một biến cục bộ • if(x > y) res = x; • else res = y; • return res; • } • void main() • { • float a = 3.6, b = 7.2; • float max; • max = Max(a, b); /* Lời gọi hàm Max() với hai tham số thực a và b*/ • • } Truyền theo giá trị Trong cách truyền này, mọi thay đổi vế mặt giá trị của các đối số trong hàm đều không làm thay đổi giá trị của các tham số thực tương ứng trong lời gọi hàm. • void HoanVi(float a, float b) • { • float tam; • tam = a; • a = b; • b = tam; • } • void main() • { • float x = 3.5, y = 7.6; • HoanVi(x, y); /*Lời gọi hàm HoanVi() với hai tham số thực là x và y*/ • ; //x và y không bị thay đổi • } Phạm vi của biến  Trong ví dụ trên ta thấy rằng trong hàm main() có biến i và trong hàm LuyThua() cũng có biến i, nhưng không có ảnh hưởng gì vì phạm vi của chúng khác nhau. Biến i khai báo trong main() gọi là biến cục bộ trong main(), nó chỉ có tác dụng trong main() chứ không thể tác động bên ngoài main() được. Tương tự như thế đối với hàm LuyThua(). Điều quan trọng cần nhớ là các biến được khai báo trong các hàm (biến cục bộ) chỉ tồn tại khi hàm được gọi tới mà thôi, nó sẽ biến mất khi hàm được gọi thực hiện xong.  Bên cạnh biến cục bộ còn có các biến nằm ngoài mọi hàm được gọi là các biến toàn cục, các biến này có thể sử dụng mọi nơi trong chương trình và tồn tại trong suốt thời gian chương trình thực hiện. Hàm kiểu void • Khi một hàm không trả về một giá trị nào, hàm đó được gọi là hàm kiểu void. • Ví dụ: • void In(int x, int y) • { • printf(“%d, %d\n”, x, y); • } • void main() • { • int i; • for(i = 1; i <= 10; i++) • In(i, 2*i); /*Lời gọi hàm In() với hai tham số thực là i và 2*i */ • } Truyền theo địa chỉ • Khái niệm con trỏ và địa chỉ  Khi một biến được khai báo, ba thuộc tính cơ bản sau đây được liên kết với nó. Đó là:  Tên định danh của biến.  Kiểu dữ liệu liên quan.  Địa chỉ trong bộ nhớ. • Ví dụ 1: Với khai báo • int n; • thì n là tên định danh của biến, có kiểu là số nguyên dạng int và được lưu trữ đâu đó trong bộ nhớ máy tính. Khi đó để truy cập đến biến, chúng ta sử dụng tên định danh của nó.  Con trỏ là biến dùng để chứa địa chỉ của biến khác. Có nhiều loại biến con trỏ chẳng hạn như con trỏ kiểu int dùng để chứa địa chỉ biến kiểu int, con trỏ kiểu float dùng để chứa địa chỉ biến kiểu float, … • Cú pháp khai báo con trỏ như sau: • *; • Ví dụ 2: • int *p1; //p1 là biến con trỏ kiểu int • float *p2 // p2 là biến con trỏ kiểu float • char *p3; //p3 là biến con trỏ kiểu char • Giả sử có một biến x và có một con trỏ p chứa địa chỉ biến x, thì cách viết x và *p là tương đương nhau trong mọi ngữ cảnh. • Ví dụ 3: • void main() • { • int x = 10, y = 20; • int *p1, *p2; // khai báo hai con trỏ kiểu int p1 = &x; //p1 chứa địa chỉ của x (trỏ tới x) • p2 = &y; • *p1 += 5; // x += 5 • *p2 += 6; • • } • Truyền theo địa chỉ  Trong cách truyền này, mọi thay đổi về mặt giá trị của các đối số trong hàm đều làm thay đổi giá trị của các tham số thực tương ứng trong lời gọi hàm.  Khi sử dụng cách truyền theo địa chỉ thì trong định nghĩa của hàm ta cần khai báo đối số là một biến con trỏ. • Ví dụ 4: Hoán vị hai số thực • void HoanVi(float *a, float *b) • { • float tam; • tam = *a; • *a = *b; • *b = tam; • } • void main() • { • float x = 3.5, y = 7.6; • HoanVi(&x, &y); /*Lời gọi hàm HoanVi() với hai tham số thực là &x và &y */ • ; //x và y đã bị thay đổi • } Khi nào sử dụng đối là con trỏ Trong đối số của hàm ta có thể chia làm hai loại: loại thứ nhất gồm các đối chứa giá trị đã biết ta gọi chúng là các đối vào, loại thứ hai gốm các đối chúa kết quả nhận được ta gọïi chúng là các đối ra. Các đối ra phải là con trỏ. Dùng hàm có giá trị trả về hay hàm kiểu void  Dùng hàm có giá trị trả về đối với các hàm có tính chất giống hàm toán học và trả về một giá trị duy nhất hoặc đối với các hàm mà lời gọi nó cần xuất hiện trong một biểu thức.  Dùng hàm kiểu void đối với các hàm có tính chất thực hiện một hành động nào đó hoặc đối với các hàm có tính chất tính toán nhưng trả về cùng lúc nhiều giá trị. Nguyên mẫu hàm  Về nguyên tắc khi gọi một hàm thì hàm đó phải được định nghĩa trước, nếu không chương trình sẽ bị lỗi.  Tuy nhiên cũng có thể gọi một hàm chưa đươc định nghĩa trước bằng cách khai báo trước nguyên mẫu hàm. Nguyên mẫu hàm thực chất là dòng đầu của hàm và thêm vào dấu chấm phẩy.  Trong nguyên mẫu hàm có thể bỏ tên các đối. • Ví dụ 4: Hoán vị hai số thực • //khai báo nguyên mẫu hàm • void HoanVi(float *a, float *b); • void main() • { • float x = 3.5, y = 7.6; • HoanVi(&x, &y); // truyền theo địa chỉ • ; • } • void HoanVi(float *a, float *b) • { • float tam; • tam = *a; • *a = *b; • *b = tam; • }

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

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