Bài giảng Kiến trúc máy tính - Phần 2 - Chương 3: Hàm và tổ chức chương trình

3.1. Mở đầu  
Một chương trình viết trong C là một dãy các hàm trong đó có  
một hàm chính là hàm main().  
Hàm là một đoạn chương trình độc lập, giải quyết một công việc  
hoàn chỉnh và có thể được sử dụng nhiều lần trong chương trình.  
Hàm chia các bài toán lớn thành các công việc nhỏ hơn giúp cho  
việc thực hiện một công việc lặp lại nào đó một cách nhanh chóng mà  
không cần viết lại mã lệnh chương trình.  
Thứ tự hàm trong chương trình là bất kỳ, song chương trình luôn  
thực hiện bắt đầu từ hàm main().  
2
Khoa CNTT - Bài giảng THĐC - Khối ngành kỹ thuật  
3.2. Định nghĩa hàm  
Cú pháp tổng quát để định nghĩa hàm như sau:  
Kiểu_trả_về tên_hàm (kiểu và danh_sách_tham_số)  
{
/* thân hàm */  
Các_câu_lệnh ;  
return giá_trị ;  
}
- Kiểu_trả_về sẽ chỉ ra kiểu của kết quả cần trả về của  
hàm. Nếu hàm không cần trả về kết quả thì kiểu_trả_về sẽ là  
void.  
- Tên_hàm được đặt tên theo quy tắc định danh.  
3
Khoa CNTT - Bài giảng THĐC - Khối ngành kỹ thuật  
3.2. Định nghĩa hàm  
- Danh_sách_tham_số: Tham số của hàm là phương tiện  
để truyền dữ liệu cần thiết từ bên ngoài vào trong hàm và từ  
trong hàm ra bên ngoài. Nếu có nhiều tham số thì chúng phải  
cách nhau bởi dấu phẩy và phải khai báo riêng biệt nhau.  
- Câu lệnh return dùng để kết thúc việc thực hiện của một  
hàm (nếu hàm có giá trị trả về), trả kết quả và chuyển quyền  
điều khiển về nơi gọi hàm. Giá trị kết quả này phải có kiểu phù  
hợp với kiểu_trả_về đã được khai báo ở dòng tiêu đề. Cú pháp  
tổng quát của lệnh return:  
return biểu_thức;  
Lưu ý: C không cho phép các hàm lồng nhau, nghĩa là  
phần định nghĩa của hàm này phải độc lập hoàn toàn với hàm  
khác.  
4
Khoa CNTT - Bài giảng THĐC - Khối ngành kỹ thuật  
3.2. Định nghĩa hàm  
ĐỊNH NGHĨA HÀM DÙNG LỆNH: #define  
Trong một số trường hợp, định nghĩa hàm dùng lệnh  
#define sẽ đơn giản hơn. Cú pháp:  
#define Tên_hàm(Các_tham_số) Biểu_thức_Giá_trị  
VÍ DỤ:  
#define SUM(x, y) (x + y) //Tổng của hai số  
#define SQR(x) (x*x) // Bình phương của một số  
#define MAX(x, y) (x > y) ? x : y //Tìm số lớn nhất của 2 số  
5
Khoa CNTT - Bài giảng THĐC - Khối ngành kỹ thuật  
3.3. Khai báo nguyên mẫu hàm  
Một khai báo nguyên mẫu hàm sẽ cung cấp cho trình  
biên dịch mô tả về một hàm sẽ được định nghĩa ở một vị trí  
nào đó trong chương trình.  
Cú pháp tổng quát của một khai báo nguyên mẫu hàm:  
Kiểu_trả_về tên_hàm (kiểu và danh_sách_tham_số);  
6
Khoa CNTT - Bài giảng THĐC - Khối ngành kỹ thuật  
3.4. Gọi hàm  
Cú pháp gọi hàm:  
Tên_hàm (danh_sách_đối_số) ;  
Cặp dấu ngoặc () bắt buộc phải có cho dù hàm có đối số  
hay là không.  
Trong danh_sách_đối_số không đưa ra kiểu dữ liệu của  
đối số. Nếu hàm cần truyền nhiều đối số thì chúng phải tách  
nhau bởi dấu phẩy.  
7
Khoa CNTT - Bài giảng THĐC - Khối ngành kỹ thuật  
Ví dụ 1: Hàm không có giá trị trả về  
Kết quả khi chạy chương trình :  
-----------------------------------------------------------------------------------------------  
-----------------------------------------------------------------------------------------------  
8
Khoa CNTT - Bài giảng THĐC - Khối ngành kỹ thuật  
Ví dụ 2: Hàm có giá trị trả về  
Kết quả khi chạy chương trình :  
---------------------------------------------------------------------------------------------  
---------------------------------------------------------------------------------------------  
9
Khoa CNTT - Bài giảng THĐC - Khối ngành kỹ thuật  
3.5. Phạm vi của biến  
Phạm vi của biến: là những vùng trong chương trình mà  
biến có thể được sử dụng.  
Thời gian sống của biến: là khoảng thời gian biến tồn tại  
trong bộ nhớ. Mỗi biến sau khi khai báo sẽ được cấp phát một  
vùng nhớ để lưu trữ nó. Đến một thời điểm nào đó, vùng nhớ  
này sẽ bị thu hồi lại để lưu trữ biến khác.  
Biến sử dụng gồm hai loại là:  
- Biến toàn cục : khai báo bên ngoài tất cả các hàm và tác  
dụng trong toàn bộ chương trình.  
- Biến cục bộ : được khai báo trong thân hàm hoặc khối  
lệnh và chỉ tác dụng trong phạm vi khai báo.  
10  
Khoa CNTT - Bài giảng THĐC - Khối ngành kỹ thuật  
3.6. Hàm đệ quy  
. Hàm đệ quy là hàm mà từ một điểm trong thân của nó có thể  
gọi tên hàm của chính nó.  
. Khi hàm gọi đệ quy chính nó thì mỗi lần gọi, máy sẽ tạo ra  
một tập biến cục bộ mới hoàn toàn độc lập với tập biến cục bộ  
đã được tạo ra từ các lần gọi trước đó.  
. Số lần gọi đệ quy phải có giới hạn, tức là việc gọi đệ quy phải  
có điểm dừng.  
Khoa CNTT - Bài giảng THĐC - Khối ngành kỹ thuật  
11  
Xây dựng hàm đệ quy  
Hàm đệ quy thường được viết theo dạng sau:  
if (trường_hợp_cơ_s)  
{ /*giải quyết bài toán và trả về kết quả*/  
}
else /*trường_hợp_tổng_quát */  
{
//gọi đệ quy tới hàm với đối số truyền vào có giá trị khác  
}
- Phần không đệ quy: bao gồm các trường hợp cơ sở có thể  
giải quyết trực tiếp, mà không cần đến bài toán con nào cả. Phần  
này sẽ quyết định tính dừng của thuật toán.  
- Phần đệ quy: đây là trường hợp tổng quát. Bài toán được quy  
về một bài toán cùng dạng nhưng nhỏ hơn và có giá trị tham số  
thay đổi  
Khoa CNTT - Bài giảng THĐC - Khối ngành kỹ thuật  
12  
Ví dụ: Hàm đệ quy tính n!  
Kết quả chạy chương trình:  
-------------------------------------------------------------------------------------------  
-------------------------------------------------------------------------------------------  
Khoa CNTT - Bài giảng THĐC - Khối ngành kỹ thuật  
13  
3.7. Một số hàm chuẩn trong C  
Tên hàm  
rand()  
Khai báo Ý nghĩa  
stdlib.h Cho 1 giá trị ngẫu nhiên từ 0 đến 32767  
stdlib.h Cho 1 giá trị ngẫu nhiên từ 0 đến x  
math.h Tính x mũ y  
random(x)  
pow(x,y)  
sqrt(x)  
math.h Tính căn bậc 2 của x  
sin(x), cos(x),  
tan(x)  
math.h Tính sin, cosin, tang của góc x có số đo x radian  
abs(a)  
labs(a)  
exp(x)  
log(x)  
stdlid.h Cho giá trị tuyệt đối của số nguyên a  
stdlid.h Cho giá trị tuyệt đối của số nguyên dài a  
math.h Tính e mũ x  
math.h Tính logarit cơ số e của x  
log10(x)  
ceil(x)  
floor(x)  
math.h Tính logarit cơ số 10 của x  
math.h Phần nguyên nhỏ nhất không nhỏ hơn x  
math.h Phần nguyên lớn nhất không lớn hơn x  
Khoa CNTT - Bài giảng THĐC - Khối ngành kỹ thuật  
14  
3.7. Một số hàm chuẩn trong C  
Tên hàm  
atof(str)  
Khai báo Ý nghĩa  
stdlib.h Chuyển chuỗi str sang giá trị số thực  
stdlib.h Chuyển chuỗi str sang số nguyên  
stdlib.h Chuyển số nguyên x sang chuỗi str theo cơ số y  
ctype.h Đổi chữ hoa sang chữ thường  
ctype.h Đổi chữ thường sang chữ hoa  
string.h Thêm chuỗi b vào sau chuỗi a  
string.h Sao chép chuỗi b vào a  
atoi(str)  
itoa(x,str,y)  
tolower(x)  
toupper(x)  
strcat(a,b)  
strcpy(a,b)  
strlwr(s)  
string.h Chuyển chuỗi s sang chữ thường  
string.h Chuyễn chuỗi s sang chữ hoa  
math.h Trả về độ dài chuỗi s  
strupr(s)  
strlen(s)  
Khoa CNTT - Bài giảng THĐC - Khối ngành kỹ thuật  
15  
Bài tập luyện tập  
Bài 1: Viết hàm kiểm tra một số có phải số chính phương hay  
không ? hàm trả về giá trị là 1 nếu số được kiểm tra là số chính  
phương, ngược lại hàm trả về giá trị 0. Từ đó liệt kê các số chính  
phương trong khoảng (m;n).  
Bài 2: Viết hàm kiểm tra một số có phải số nguyên tố hay không ?  
hàm trả về giá trị là 1 nếu số được kiểm tra là số nguyên tố, ngược  
lại hàm trả về giá trị 0.Từ đó liệt kê các số nguyên tố trong khoảng  
(m;n).  
Bài 3: Viết chương trình trong đó chứa một hàm để tính giai thừa  
của một số tự nhiên. Trong hàm main() in ra màn hình hệ số của  
số hạng thứ k trong khai triển nhị thức Newton : (a+b)100 ?  
Khoa CNTT - Bài giảng THĐC - Khối ngành kỹ thuật  
16  
Bài tập luyện tập  
Bài 4: Viết chương trình xuất ra màn hình các hệ số của các số  
hạng khi khai triển nhị thức Newton của (1+x)n với n nguyên  
dương nhập từ bàn phím.  
Bài 5: Viết hàm đệ quy tính các biểu thức sau :  
a) S = 1+2+3+…+n  
b) P = x*x*x*…*x (n lần số x)  
c) Q = 5+10+15+…+5*n  
Bài 6: Tính giá trị lớn nhất và nhỏ nhất của 4 số ?  
Bài 7: Xuất ra màn hình tam giác Pascal với chiều cao n.  
Bài 8: Viết hàm in ra số dạng máy tính bỏ túi với các tham số hàm  
từ 0 đến 9.  
Khoa CNTT - Bài giảng THĐC - Khối ngành kỹ thuật  
17  
pdf 17 trang yennguyen 09/04/2022 5220
Bạn đang xem tài liệu "Bài giảng Kiến trúc máy tính - Phần 2 - 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_kien_truc_may_tinh_phan_3_chuong_3_ham_va_to_chuc.pdf