Bài 13 Cấu trúc chương trình với hàm

Một phần của tài liệu Bài giảng ngôn ngữ lập trình C (Trang 33 - 35)

Tóm tắt nội dung:

Các hàm trong chương trình C là một modul chương trình đẳng cấp. Chúng có thể gọi lẫn nhau trong chương trình. Một hàm có thể trả về kết quả nhưng cũng có thể khơng (hàm void). Khai báo nguyên mẫu của hàm là một khai báo hàm chỉ có tiêu đề mà khơng có phần thi hành.

Thời lượng: 1 tiết

1. Hàm trong ngôn ngữ C

Một chương trình C được cấu trúc thơng qua các hàm. Mỗi hàm là một modul nhỏ trong chương trình. Nó có thể được gọi nhiều lần tại các vị trí khác nhau trong chương trình. Trong C không phân biệt thủ tục và hàm như PASCAL mà nó coi thủ tục như là một hàm mà khơng trả về dữ liệu. Một đặc điểm khác biệt nữa đó là khơng có khái niệm thủ tục con, tất cả các hàm kể cả hàm chính (main) đều có cùng một cấp duy nhất (cấu trúc hàm đẳng cấp). Một hàm có thể gọi một hàm khác bất kì của chương trình.

Dạng thức khai báo một hàm:

[<kiểu trả về>] <tên hàm>([<danh sách tham số>])

{

<thân hàm>

}

Trong đó:

- <tên hàm> là một tên do người sử dụng đặt thoả mãn yêu cầu về đặt tên trong C. Nếu hàm có tên là main thì đó là hàm chính của chương trình.

- <kiểu trả về> là kiểu của dữ liệu trả về cho hàm. Nó có thể là một kiểu dữ liệu cơ bản (char, int,...) hay kiểu phức hợp (xem chương 3 - Các cấu trúc dữ liệu phức). Khi muốn viết một thủ tục (hàm khơng có kết quả) thì kiểu trả về ta để là void. Kiểu trả về có thể khơng được khai báo, khi đó trình biên dịch lấy mặc định là kiểu int.

- <danh sách tham số> được khai báo giống như khai báo biến. Các tham số trong danh sách được phân cách bởi dấu phẩy ‘,’. Nếu dùng từ khoá void cho danh sách tham số của một hàm thì hàm đó khơng có bất kì một tham số nào.

- <thân hàm> bao gồm phần khai báo biến ở đầu (bắt buộc) và các câu lệnh sau khai báo biến.

Để thoát ra khỏi hàm và trả về một giá trị ta dùng câu lệnh return <biểu thức>. Nếu là hàm void thì câu lệnh return khơng có giá trị trả về kèm theo.

Ví dụ:

/* hàm tính max hai số nguyên */ int max (int a, int b)

{

return (a > b) ? a: b; }

/* hàm in bình phương của số 1 đến 10, hàm khơng có tham số */ void squares()

/* hoặc void squares(void) */ {

int i;

for (i=1;i<=10;i++) printf("%d\n",i*i); }

Một hàm được gọi bằng cách dùng tên hàm và tham số truyền vào cho nó. Ngay cả khi hàm khơng có tham số thì lời gọi hàm vẫn phải có cặp dấu của tham số ().

Ví dụ: void main() { int a; squares(); a = max(5,6); }

Chương trình mẫu (hampi.c): Hàm tính số Pi theo công thức Pi/4 = 1-1/3+1/5-1/7+... với độ chính xác là tham số truyền vào.

#include <stdio.h>

/* hàm tính Pi trả về kết quả là một số thực

tham số truyền vào là độ chính xác của số Pi cần tính độ chính xác của phép tính Pi là số hạng cuối cùng x 4 */ float Pi(float epsilon)

{

/* Pi_4 là tổng của biểu thức Pi/4 */ float Pi_4, sh;

int mauso, dau;

/* khởi tạo các giá trị cho phép tính tổng */ Pi_4 = 0;

mauso = 1; /* mauso của số hạng đầu tiên */ dau = 1; /* dấu của số hạng đầu tiên */ /* vịng lặp tính tổng */

do {

sh = 1.0/mauso; /* sh mang giá trị số hạng mới */ Pi_4 += dau*sh; /* thêm số hạng mới */

dau = -dau; /* đảo dấu cho số hạng sau */ mauso += 2; /* tăng mẫu số cho số hạng sau */

}while(sh*4>epsilon); /* lặp khi độ chính xác > epsilon */ return 4*Pi_4;

}

void main() {

float epsilon;

printf("Do chinh xac cua so Pi can tinh: "); scanf("%f", &epsilon);

/* in kết quả của hàm tính Pi với độ chính xác epsilon */ printf("Pi co do chinh xac %f = %f", epsilon, Pi(epsilon));

}

Một phần của tài liệu Bài giảng ngôn ngữ lập trình C (Trang 33 - 35)