Tải bản đầy đủ (.ppt) (25 trang)

C Programming - Chương 4. Hàm

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 (245.22 KB, 25 trang )

KHOA CÔNG NGHỆ THÔNG TIN
BỘ MÔN CÁC HỆ THỐNG THÔNG TIN

C Programming
Chương 4. Hàm
Hoang Huu Viet, PhD.,
E-mail:
Web: www.vinhuni.edu.vn/~viethh

Feb., 2014


Chương 4. Hàm

Mục đích và nội dung


Mục đích






Biết cách xây dựng các chương trình từ các khối nhỏ
hơn, gọi là các hàm.
Cách xây dựng hàm mới, hàm đệ quy.

Nội dung







Giới thiệu
Khai báo và định nghĩa hàm
Tham số trong lời gọi hàm
Cấp lưu trữ và phạm vi của các đối tượng
Con trỏ hàm và hàm đệ quy

Designed by Hoang Huu Viet, Computer Engineering Department.

Slide 2


Chương 4. Hàm

Giới thiệu


Tại sao phải xây dựng hàm?











Chia bài toán lớn thành các bài toán nhỏ hơn  dễ
giải quyết các bài toán phức tạp.
Tránh viết lặp lại các dịng lệnh. Ví dụ tính Ckn nếu
khơng dùng hàm  3 đoạn lệnh tính giai thừa.
Làm cho chương trình lớn dễ hiểu và dễ bảo trì.

Các chương trình giải quyết các bài toán nhỏ
gọi là các hàm.
Các hàm truyền các tham số cho nhau bằng các
tham số vào/ra.

Designed by Hoang Huu Viet, Computer Engineering Department.

Slide 3


Chương 4. Hàm

Giới thiệu


Các hàm toán học thường dùng trong C



Yêu cầu: Mở tệp tiêu đề math.h
Một số hàm toán học:










sqrt(x): Căn bậc 2 của x
exp(x): Hàm ex
log(x): Hàm logarit cơ số e.
fabs(x): Giá trị tuyệt đối của x.
ceil(x): Làm trịn số ngun nhỏ nhất khơng lớn hơn x.
pow(x,y): Hàm xy
sin(x): Hàm sin(x)
...

Designed by Hoang Huu Viet, Computer Engineering Department.

Slide 4


Chương 4. Hàm

Định nghĩa hàm


Định nghĩa hàm
[Kiểu dữ liệu hàm] <Tên hàm>([danh sách tham số])
{
[Các khai báo của hàm]

...
<Nội dung hàm>
}




Nếu [Kiểu dữ liệu hàm] là void thì hàm khơng trả lại
giá trị nào cả (khơng có từ khóa return).
Nếu hàm khơng có tham số thì dùng kiểu void làm
tham số hoặc bỏ trống.

Designed by Hoang Huu Viet, Computer Engineering Department.

Slide 5


Chương 4. Hàm

Định nghĩa hàm


Ví dụ 1. Hàm tìm ckn.
#include <stdio.h>
Tham số của hàm
#include <conio.h>
int gt(int m)
Tên hàm
{
int t = 1;

Định nghĩa biến của
for (int i = 1; i <=m; i ++)
t
hàm
= t*i;
return t;
Giá trị trả về của hàm
}
void main()
Hàm void  hàm khơng
{
có giá trị trả về.
int k, n;
printf(“\n nhap k va n :”); scanf(“%d%d”,&k,&n);
int ck = gt(n)/gt(k)*gt(n-k);
printf(“\n ket qua = %d”,ck);
getch();
}

Designed by Hoang Huu Viet, Computer Engineering Department.

Slide 6


Chương 4. Hàm

Tham số trong lời gọi hàm


Các khái niệm







Tham số hình thức: Là các tham số trong danh sách
tham số của hàm.
Tham số thực sự: Là các tham số trong lời gọi hàm.
Mỗi tham số thực sự tương ứng với 1 tham số hình
thức.
Ví dụ trong ví dụ trên:




Tham số m trong hàm gt() là tham số hình thức của ham
gt().
Tham số n, k trong hàm main() là tham số thực sự của hàm
gt().

Designed by Hoang Huu Viet, Computer Engineering Department.

Slide 7


Chương 4. Hàm

Tham số trong lời gọi hàm



Các khái niệm




Truyền theo tham trị (truyền giá trị): Một bản sao
giá trị của tham số thực được tạo ra và gán cho tham
số hình thức do đó mọi thay đổi trong hàm trên bản
sao giá trị sẽ không ảnh hưởng đến giá trị ban đầu
của biến nằm trong hàm gọi.
Truyền theo biến: Hàm sẽ truyền trực tiếp tham số
đó (bắt buộc phải là biến) cho hàm được gọi. Mọi
thay đổi giá trị trong hàm sẽ thay đổi giá trị của hàm
được gọi.

Designed by Hoang Huu Viet, Computer Engineering Department.

Slide 8


Chương 4. Hàm

Tham số trong lời gọi hàm


Truyền tham số trong C







Trong C, tất cả các tham số được truyền theo tham
trị.
Ví dụ: Viết chương trình hốn đổi giá trị của 2 biến
thực.

Tham số hình thức của hàm là con trỏ


Khi tham số hình thức là con trỏ thì tham số thực sự
tương ứng phải là một địa chỉ và tham số được
truyền theo kiểu tham biến.

Designed by Hoang Huu Viet, Computer Engineering Department.

Slide 9


Chương 4. Hàm

Tham số trong lời gọi hàm


Bài tập
1. Viết hàm hoán đổi giá trị của 2 biến.
2. Viết hàm tính diện tích, hàm tính chu vi của 1 tam
giác có tọa độ (x1,y1), (x2,y2) và (x3,y3). Viết
chương trình nhập vào các tọa độ của 1 tam giác, gọi

các hàm đã viết in ra diện tích và chu vi.

Designed by Hoang Huu Viet, Computer Engineering Department.

Slide 10


Chương 4. Hàm

Tham số trong lời gọi hàm
3. Viết các hàm:







Nhập mảng 1 chiều n số thực.
In mảng 1 chiều n số thực.
Viết hàm tìm giá trị lớn nhất
Viết hàm tìm giá trị bé nhất
Viết hàm tính tổng các phần tử của mảng.
Viết chương trình nhập vào 1 mảng 1 chiều n số thực. Gọi
các hàm đã viết.

Designed by Hoang Huu Viet, Computer Engineering Department.

Slide 11



Chương 4. Hàm

Cấp lưu trữ và phạm vi đối tượng


Khái niệm




Mỗi đối tượng (biến hoặc hàm) sử dụng trong 1
chương trình cần phải có các khai báo (và định
nghĩa). Các khai báo (và định nghĩa) này có thể được
đặt ở ngoài tất cả các hàm hoặc ở bên trong một
hàm nào đó (chỉ với các biến).
Các khai báo đặt ở các vị trí khác nhau làm cho đối
tượng được khai báo có các tính chất khác nhau thể
hiện ở: Phạm vi sử dụng, thời gian tồn tại, và cấp lưu
trữ.

Designed by Hoang Huu Viet, Computer Engineering Department.

Slide 12


Chương 4. Hàm

Cấp lưu trữ và phạm vi đối tượng



Khái niệm




Phạm vi của 1 đối tượng là phần chương trình mà
đối tượng đó cịn được “nhìn thấy” và có thể sử dụng
bởi phần chương trình đó. Phạm vi có thể là trong 1
khối lệnh, một hàm, 1 tệp nguồn hoặc tồn thể
chương trình.
Một số đối tượng có thời gian tồn tại ngắn, một số thì
liên tục được tạo ra và xố đi, một số khác tồn tại
trong st thời gian thực hiện chương trình.

Designed by Hoang Huu Viet, Computer Engineering Department.

Slide 13


Chương 4. Hàm

Cấp lưu trữ và phạm vi đối tượng


Khái niệm





Cấp lưu trữ của đối tượng được xác định dựa theo
vùng nhớ được cấp. Các đối tượng được cấp phát
bộ nhớ thường xun thì có cấp lưu trữ cố định
(static). Loại này gồm các hàm, các biến khai báo
ngoài hàm và một số biến cục bộ.
Các biến có cấp lữu trữ động được tạo ra ở khối
lệnh mà chúng khai báo, chúng tồn tại khi điều khiển
con đang trong khối và sẽ bị xoá khi quyền điều khiển
thoát ra khỏi khối.

Designed by Hoang Huu Viet, Computer Engineering Department.

Slide 14


Chương 4. Hàm

Cấp lưu trữ và phạm vi đối tượng


Khái niệm




Phạm vi, thời gian tồn tại và cấp lưu trữ của 1 đối
tượng được xác định bằng cách tổ hợp các từ khoá
chỉ định cấp lưu trữ với các khai báo cùng vị trí đặt
bên trong hay bên ngồi một hàm hay một khối lệnh.
Ngôn ngữ C cung cấp 4 từ khoá auto, extern, static,

register để chỉ phạm vi và thời gian tồn tại của các
biến.

Designed by Hoang Huu Viet, Computer Engineering Department.

Slide 15


Chương 4. Hàm

Cấp lưu trữ và phạm vi đối tượng


Khái niệm




auto: Từ khoá này được dùng để khai báo các biến
cục bộ. Tuy nhiên nó được ít dùng vì các biến cục bộ
ngầm định là auto rồi.
register: Từ khoá này được đặt trước khai báo của
các biến tự động nhằm u cầu chương trình dịch
duy trì giá trị biến đó trong thanh ghi của máy tính do
đó nâng cao tốc độ thực hiện chương trình (vì khi
truy nhập, thao tác dữ liệu trực tiếp trên thanh ghi là
nhanh nhất).

Designed by Hoang Huu Viet, Computer Engineering Department.


Slide 16


Chương 4. Hàm

Cấp lưu trữ và phạm vi đối tượng


Khái niệm




static: Từ khoá này đặt trước khai báo biến chỉ ra
rằng biến là biến tĩnh và có thời gian tồn tại cùng với
chương trình. Biến tĩnh được tạo ra khi khởi động
chương trình và giải phóng khi kết thúc chương trình.
extern: Từ khố này cho phép sử dụng các biến trên
phạm vi nhiều tệp.



Ví dụ tệp A có khai báo toàn cục: int x,y;
Tệp B muốn sử dụng biến x, y của A: extern int x,y.

Designed by Hoang Huu Viet, Computer Engineering Department.

Slide 17



Chương 4. Hàm

Khai báo hàm


Hàm nguyên mẫu





Một trong những đặc trưng của ANSI C là hàm
nguyên mẫu (dạng hàm). Hàm ngun mẫu thơng
báo cho chương trình dịch biết kiểu dữ liệu hàm trả
lại, số lượng, kiểu và thứ tự các tham số được truyền
cho hàm. Chương trình dịch dùng hàm nguyên mẫu
để kiểm tra lời gọi hàm.
Khai báo: [Kiểu dữ liệu] <Tên hàm>([danh sách tham số]);
Khai báo hàm nguyên mẫu cho phép viết hàm ở vị trí
bất kỳ.

Designed by Hoang Huu Viet, Computer Engineering Department.

Slide 18


Chương 4. Hàm

Khai báo hàm



Các tệp tiêu đề





Mỗi thư viện chuẩn tương ứng có một tệp tiêu đề
chứa các khai báo của tất cả các hàm trong thư viện
này cùng với các định nghĩa các kiểu dữ liệu khác
nhau, các hằng dùng trong các hàm đó.
Ví dụ <math.h> là thư viện các hàm tốn học.
Người lập trình có thể tạo các tệp tiêu đề của riêng
mình. Các tệp tiêu đề này thường có đi .h và gồm
các hàm. Sau đó mở tệp tiêu đề này để gọi các hàm.

Designed by Hoang Huu Viet, Computer Engineering Department.

Slide 19


Chương 4. Hàm

Con trỏ hàm


Xem tài liệu

Designed by Hoang Huu Viet, Computer Engineering Department.


Slide 20


Chương 4. Hàm

Đệ quy






Các hàm đã xét đều có chung cấu trúc phân cấp
giữa hai hàm gọi và hàm bị gọi.
Hàm đệ quy là hàm sẽ gọi đến chính nó trực
tiếp hay gián tiếp thông qua 1 hàm khác.
Cách tiến hành giải 1 bài tốn đệ quy:



Tìm trường hợp cơ sở
Tìm trường hợp đệ quy

Designed by Hoang Huu Viet, Computer Engineering Department.

Slide 21


Chương 4. Hàm


Đệ quy


Ví dụ tính n!





Trường hợp cơ sở: 0!=1
Trường hợp đệ quy: n! = (n-1)!*n với n>0.

Bài tập



Viết hàm tính n! theo dạng đề quy.
Viết hàm tính s = 1+2+..+n theo dạng đệ quy.

Designed by Hoang Huu Viet, Computer Engineering Department.

Slide 22


Chương 4. Hàm

Bài tập
1. Viết hàm kiểm tra 1 số ngun dương n có phải là số
ngun tố hay khơng ?. Viết chương trình in ra các số
nguyên tố từ 1..1000.

2. Viết hàm kiểm tra 1 số nguyên dương n có phải là số
hồn thiện hay khơng ?. Viết chương trình in ra các số
hồn thiện từ 1..1000.
3. Viết hàm để tách tên của một xâu họ và tên. Viết
chương trình nhập vào 1 mảng xâu họ và tên. Sắp xếp
mảng tăng dần theo tên.

Designed by Hoang Huu Viet, Computer Engineering Department.

Slide 23


Chương 4. Hàm

Bài tập
4. Viết hàm để đổi 1 số nguyên dương n thành số nhị phân
8 bit. In ra màn hình các số nhị nhân của các số từ 0
đến 255.
5. Viết hàm để đổi 1 số nguyên dương dạng nhị phân
thành số thập phân. Viết chương trình nhập vào 1 số
nguyên dương dạng nhị phân và in ra dạng thập phân.
6. Viết hàm fibonacci(n) để trả về số fibonacci thứ n. Nhập
số nguyên n từ bàn phím (n ≤ 10), áp dụng hàm trên để
in ra số fibonacci thứ n.

Designed by Hoang Huu Viet, Computer Engineering Department.

Slide 24



Chương 4. Hàm

Bài tập
7. Viết hàm để đếm số từ của 1 xâu. Nhập vào 1 xâu và in
ra màn hình số từ của xâu đó biết rằng từ được phân
cách bởi dâu cách, dấu chấm, dấu phẩy.
8. Viết hàm để đổi chữ cái đầu tiên của mỗi từ trong xâu
thành chữ hoa. Nhập vào 1 xâu, in ra màn hình xâu sau
khi đổi thành chữ hoa.
9. Viết hàm để hốn đổi giá trị 2 biến số thực. Viết chương
trình nhập 2 số thực, in ra giá trị sau khi hoán đổi5.
10. Viết lại hàm fibonacci thành dạng đệ quy.

Designed by Hoang Huu Viet, Computer Engineering Department.

Slide 25


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

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