Tải bản đầy đủ (.pdf) (42 trang)

giáo trình C chương 4

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (3.11 MB, 42 trang )

Chương 4
Sử dng hm trong C
Mục tiêu của bài học
 Khi nim hm.
 Cấu trúc của mt hàm trong C.
 S dng hm.
 Nguyên mu hm.
 Đnh ngha hm.
 Gi hm.
 Truyền tham s cho hm
 Truyền theo tham tr.
 Truyền theo tham chiu.
 Cc qui tắc về phạm vi của hm.
 Hm trong cc chương trình có nhiều tập tin.
 Cc lớp lưu trữ.
1. Khi nim 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ể.
 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 .
 Dễ dng bảo trì (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).
2. Cấu trúc hàm
Cú pháp của hm:
 Hm không trả về gi tr: Kiu tr v được xc đnh l void.
 Hm có thể trả về cc gi tr thuc cc kiểu dữ liu sau:
 Kiểu dữ liu cơ sở: char, int, float, double.
 Kiểu con tr.


 Kiểu dữ liu nâng cao: class, struct.

<Kiểu giá trị trả về> Tên_hàm (Danh sách các tham số)
{
Khai báo: biến, hằng;
. . .
Các câu lệnh xử lý;
. . .
Lệnh return;
}
2. Cấu trúc hàm
S tr v t mt hm:
 Lnh return: Kt thúc hm, trả về 1 giá tr cho hm gi nó.
 Sử dng lnh return:
 return;
 return (hằng);
 return (bin);
 return (biểu thức);
 return (câu lnh đnh gi);
V d: return ( (a>b) ? a:b );
3. Sử dụng hm
 Mt chương trình C luôn bắt đầu từ hm main().
 Mi hm trong C bắt buc phải được gi trực tip hoc gin
tip từ hm main().
V d: Mt chương trình có 4 hm: main, func1, func2, func3.
main()
{
func1(…);
func2 (…);
}

func1(…)
{
. . .
func3 (…);
}
 Hm func1, func2 được gi trực tip từ hm main().
 Hm func3 được gi gin tip từ hm main().
 Hm phải được đnh ngha hoc khai bo trước khi được gi.
3.1 Nguyên mu hm, đnh ngha hm
 Mi hm phải được khai bo nguyên mu hoc đnh ngha
trước khi được gi (trước hm gi nó).
func1 ( );

int main(){

func1();

}

func1( )
{

return ( );
}
func1( )
{

return ( );
}


int main(){

func1();

}

Hoc:
Khai bo nguyên mu hm
Đnh ngha hm
Gi hm
3.2 Gọi hàm
C php:
Tên_hm (gi tr ca cc đi s truyn vo hm);
 Hm gi có thể khai bo 1 bin cng kiểu để lưu lại
gi tr trả về của hm được gi, v d:
int func1(…)
{
. . .
return (…);
}
int main(){
int s;
. . .
s = func1(…);
}
Hm gi
Hm được gi
 Mt li gi hm có thể đt trong mt biểu thức tnh ton
hoc mt câu lnh hiển th:
printf (“Ket qua = %d”, func(…))

3.3 Truyn đi số vo hm
 Truyền tham tr
 Truyền tham chiu
A. Truyn tham tr
 Mc đnh trong C, tất cả các đi s được truyền bằng
tham tr.
 Giá tr của bin được truyền tới hm gi thông qua bin tạm.
 Mi sự thao tác chỉ được thực hin trên các bin tạm.
 Bất k sự thay đổi bo trên gi tr ny đều không ảnh hưởng
đn gi tr của bin gc được truyền.
V d:
A. Truyn tham chiu
 Truyền thông qua con tr (đề cập trong chương 6).
 Truyền bin tham chiu.
 Bin tham chiu (reference)
 L b danh của mt đi tượng.
 Dng để tham chiu tới mt bin cùng kiểu trong b nhớ.
 Các thao tc trên bin tham chiu thực chất l thao tc đn
bin mà nó tham chiu đn.
 Khai báo:
A. Truyn tham chiu (tt)
<Kiểu dữ liệu> &<biến tham chiếu> = <tên biến>;
V d:
int n = 10;
int &x = n;
x được gi l bin tham chiu tới bin n
 Truyn bin tham chiu vo hm
 Khai bo hm: Bin tham chiu được khai bo
trong phần đi số của hm:
V d:

A. Truyn tham chiu (tt)
void Input (int &a, int &b);
a, b được truyền vo hm dạng tham chiu
 Gi hm:
int x=10,y=15;
input(x,y);
Trình biên dch s truyền đa chỉ của x, y vo hm
 V d:
A. Truyn tham chiu (tt)
 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.
 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
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: L khoảng thi gian bin duy trì mt
gi tr xc đnh.
 Phm vi: Xc đnh cc phần của mt chương trình có
thể nhận ra bin đó
 auto

 extern
 static
 register
Lớp lưu trữ - tt
 Cc qui luật phạm vi: Quyt đnh mt đoạn mã lnh
có thể truy xuất đn mt đoạn mã lnh hoc 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ó phạm vi khác nhau.
 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
S lồng nhau của li gọi hm
main()
{

Sum();

}
Sum()
{

CheckPrime();
Display();

}
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 (hm

tnh) hoc external (hm ngoại).
Hàm tĩnh:
static <Kiu trả về> Tên hm (danh sch đi số);
 Chỉ được nhận bit bên trong tập tin chương trình.
 Phạm vi của hm không vượt ra khi tập tin chương trình
Hàm ngoại:
extern <Kiu trả về> Tên hm (danh sch đi số);
 Được nhận bit bởi tất cả các tập tin của chương trình
Hàm đệ quy
Đệ quy (Recursion)
 L mt phương php lập trình cho phép mt hm có thể gi
lại chnh nó trực tip hoc gin tip.
V d: void Test(){
Test();
}
 Mt chương trình đ quy hoc mt đnh ngha đ quy thì
không thể gi đn chnh nó mãi mãi m phải có mt điểm
dừng đn mt trưng hợp đc bit no đó, m ta gi l
trưng hợp suy bin (degenerate case).
V d: Ta đnh ngha n! như sau:






1 0!
1)! -(n *n
!n


 Phương php thit k mt giải thuật đ quy:
 Tham s hoá bài toán.
 Phân tích trưng hợp chung: Đưa bài toán dưới dạng bài
toán cùng loại nhưng có phạm vi giải quyt nh hơn theo
ngha dần dần s tin đn trưng hợp suy bin.
 Tìm trưng hợp suy bin.
2
3
Đệ quy (Recursion)
Đ quy (Recursion)

Chương trình đ quy gồm hai phần chnh:
1. Phần cơ sở: Điều kin thot khi đ quy (điểm dừng)
2. Phần đ quy: Trong phần thân chương trình có li gi
đn chnh bản thân chương trình với gi tr mới của
tham s nh hơn gi tr ban đầu
 Ví d 1: Lập hàm tính n! bằng đ quy




Đ quy (Recursion)





1 0!
1)! -(n *n
!n

Phần đệ quy
Điều kiện dừng

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×