Bài giảng Tin học đại cương - Chương 3: Hàm và tổ chức chương trình

TIN HỌC ĐẠI CƯƠNG  
Chương 3: Hàm và tổ chức  
chương trình  
1
Nội dung  
1. Tổ chức chương trình thành các hàm  
2. Tham số kiểu con trỏ  
3. Đệ quy  
4. Bài tập thực hành  
2
3.1. Tổ chức chương trình thành  
các hàm  
Khái niệm về hàm  
. Một hàm trong C được hiểu theo nghĩa là một “Routine”  
hoặc “subprogram"  
. Hàm là một đơn vị độc lập trong C  
• Không được xây dựng hàm bên trong 1 hàm khác  
• Mỗi hàm có thể có các biến, hằng, mảng riêng  
. Một chương trình viết bằng C gồm 1 hoặc nhiều hàm,  
trong đó có 1 hàm chính là hàm “main()”  
. Hàm có thể có giá trị trả về (kết quả của hàm) hoặc  
không có giá trị trả về (chỉ đơn thuần thực hiện 1 công  
việc nào đó)  
. Hàm có thể có hoặc không có tham số  
3
Khai báo hàm  
Nguyên mẫu hàm (prototype của hàm)  
. Prototype hàm chỉ rõ các đặc điểm chính  
+ Tên của hàm  
+ Số lượng và kiểu của từng tham số hàm sẽ nhận + Giá trị trả  
về sau khi hàm kết húc.  
+ Phải khai báo prototype của hàm trước khi sử dụng hàm ->  
thường khai báo nguyên mẫu ở đầu chương trình.  
. Prototype hàm không cho thấy hàm sẽ làm những gì  
. Công thức khai báo:  
Kiểu_hàm Tên_hàm (Kiểu_tham_số_1, Kiểu_tham_số_2, ...);  
4
Cài đặt hàm  
. Xác định chính xác những lệnh mà hàm phải thực  
hiện.  
. Thường được cài đặt ở cuối chương trình hoặc đặt  
trong 1 file thư viện riêng  
. Cách cài đặt:  
Kiểu_hàm Tên_hàm (Kiểu_1 Tên_tham_số_1,  
Kiểu_2 Tên_tham_số_2,...)  
{
- Khai báo biến, hằng cục bộ trong hàm  
- Các lệnh hàm sẽ thực hiện  
return <kết quả của hàm>;  
}
5
Ví dụ 1  
//ỉn ra cac so nguyên to <=N  
#include <stdio.h>  
#include <conio.h>  
int i, N;  
int nguyento (int) ; //prototype cua ham  
void main ()  
do  
{
printf("Nhap so nguyên N: ");  
scanf("%d", &N);  
} while(N<=0);  
Hàm nguyento()  
Được thực hiện  
bao nhiêu lần?  
for(i=l; i<=N; i++){  
if( nguyento(i) != 0)  
printf("%8d , i);  
}
getch();  
}
6
Quy tắc hoạt động của hàm  
• Lời gọi hàm có dạng tổng quát như sau:  
Tên_hàm ( [danh sách tham số thực] )  
• Số lượng tham số thực trong lời gọi hàm phải bằng số  
lượng tham số hình thức (trong khai báo hàm)  
• Kiểu của các tham số thực phải tương ứng với kiểu  
của tham số hình thức  
• Khi gặp 1 lời gọi hàm tại 1 vị trí nào đó trong chương  
trình, máy sẽ dời vị trí đó chuyển đến thực hiện các  
lệnh của hàm được gọi  
7
Quy tắc hoạt động của hàm (tt)  
Thứ tự thực hiện khi có 1 lời gọi hàm  
. Cấp phát bộ nhớ cho các biến cục bộ  
. Gán giá trị của tham số thực sự cho tham số hình  
thức  
. Thực hiện các lệnh trong thân của hàm  
. Gặp lệnh return hoặc dấu } kết thúc hàm thì xóa vùng  
nhớ đã cấp cho các biến cục bộ và rời khỏi hàm ->  
trở về vị trí đã dừng sau lời gọi hàm.  
Nếu thoát khỏi hàm từ câu lệnh return có chứa biểu  
thức thì giá trị của biểu thức được gán cho hàm. Giá trị  
của ham sẽ được sử dụng trong các biểu thức chứa  
nó.  
8
Tham số hình thức và tham số thực  
• Tham số hình thức: Là tên của tham số được sử dụng  
khi khai báo hoặc cài đặt hàm  
• Tham số thực sự: Là tên và giá trị của tham số được  
truyền cho hàm trong lời gọi hàm  
9
Một số lưu ý  
• Khi hàm không khai báo rõ kiểu thì nó mặc định hiểu là  
hàm có kiểu int  
• Không nhất thiết phải khai báo prototype của hàm (nếu  
cài đặt hàm trước khi có lời gọi hàm)  
• Prototype của hàm thực chất là dòng đầu tiên của  
phần cài đặt hàm nhưng có thêm dấu ; ở cuối  
• Trong khai báo prototype của hàm có thể bỏ đi tên của  
các tham số hình thức  
• Trường hợp xây dựng hàm không trả về giá trị gì thì  
nên khai báo rõ kiểu của hàm có là kiểu void  
10  
3.2. Truyền tham số cho hàm  
• Tham số thực sự và tham số hình thức (nhắc lại)  
• Có 2 cách truyền tham số cho hàm  
• Truyền theo tham trị (mặc định): Giá trị của tham số  
thực sự không bị thay dổi sau khi hàm kết thúc.  
• Truyền theo tham chiếu: Giá trị của tham số có thể bị  
thay đổi sau khi hàm kết thúc.  
11  
Truyền tham số theo tham trị  
#include <stdio.h>  
#include <conio.h>  
void doicho{int a, int b)  
{
int t;  
t = a; a = b; b = t;  
printf("a va b trong doicho() la: %d va %d", a, b);  
}
int main() {  
int a = 10, b= 2;  
doi cho(a, b) ;  
printf(“a va b ngoai doicho() la: %d va %d", a, b);  
return 0;  
}
12  
Truyền tham số theo tham chiếu  
• Khi xây dựng hàm cần đặt dấu & trước tham số hình  
thức  
13  
Con trỏ  
• Là một biến dùng để chứa địa chỉ  
• Có nhiều loại con trỏ tương ứng với các kiểu địa chỉ  
khác nhau  
• Biến kiểu int -> sử dụng con trỏ kiểu int  
• Biến kiểu float -> sử dụng con trỏ kiểu float  
• Biến kiểu char -> sử dụng con trỏ kiểu char  
• Cú pháp khai báo con trỏ  
kiểu_dữ_liệu *tên_con_trỏ;  
• Ví dụ  
int i, j, *pi, *pj;  
pi = &i;  
pj = &j;  
/* pi là con trỏ chứa địa chỉ biến i */  
/* pj là con trỏ chứa địa chỉ biến j */  
14  
Con trỏ (tt)  
• Giả sử có  
• px là con trỏ đến biến x, thì các cánh viết x và *px là tương  
đương nhau  
• Ví dụ  
int x, y, *px, *py;  
px = &x;  
py = &y;  
x = 3;  
/*tương đương với *px = 3 */  
y = 5; /*tương đương với *py = 5 */  
/* Các câu lệnh dưới đây là tương đương: */  
x = 10 * y;  
*px = 10 * y;  
x= 10 * (*py);  
*px = 10 * (*py);  
15  
Hàm có tham số là con trỏ  
16  
Hàm có tham số là con trỏ (tt)  
• Chương trình trên cho kết quả không đúng  
• Tại sao ?  
• Do cơ chế biến cục bộ hay tham số hình thức bị giải  
phóng bộ nhớ khi hàm kết thúc ?  
• Truyền tham số thực cho hàm là địa chỉ biến thay vì  
truyền giá trị biến  
• Sử dụng tham số là con trỏ!  
17  
Hàm có tham số là con trỏ (tt)  
18  
Hàm có tham số là con trỏ (tt)  
19  
Hàm có tham số là con trỏ (tt)  
• Khi nào thì dùng tham số là con trỏ ?  
• Cần phân biệt hai loại tham số hình thức  
• Tham số hình thức chỉ nhận giá trị truyền vào để  
hàm thao tác, trường hợp có thể gọi là tham số  
vào.  
• Tham số hình thức dùng để chứa kết quả của  
hàm, trường hợp này có thể gọi là tham số ra  
• Đối với tham số ra ta phải sử dụng kiểu con trỏ.  
• Bài tập  
• Giải thích tham số của lệnh scanf  
• Viết hàm giải phương trình bậc hai  
20  
Tải về để xem bản đầy đủ
pdf 25 trang yennguyen 14700 Free
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Tin học đại cương - Chương 3: Hàm và tổ chức chương trình", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfbai_giang_tin_hoc_dai_cuong_chuong_3_ham_va_to_chuc_chuong_t.pdf