Bài giảng Tin học đại cương - Chương 5: Hàm và tổ chức chương trình - Nguyễn Lê Minh

5.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ố

Bài giảng Tin học đại cương - Chương 5: Hàm và tổ chức chương trình - Nguyễn Lê Minh trang 1

Trang 1

Bài giảng Tin học đại cương - Chương 5: Hàm và tổ chức chương trình - Nguyễn Lê Minh trang 2

Trang 2

Bài giảng Tin học đại cương - Chương 5: Hàm và tổ chức chương trình - Nguyễn Lê Minh trang 3

Trang 3

Bài giảng Tin học đại cương - Chương 5: Hàm và tổ chức chương trình - Nguyễn Lê Minh trang 4

Trang 4

Bài giảng Tin học đại cương - Chương 5: Hàm và tổ chức chương trình - Nguyễn Lê Minh trang 5

Trang 5

Bài giảng Tin học đại cương - Chương 5: Hàm và tổ chức chương trình - Nguyễn Lê Minh trang 6

Trang 6

Bài giảng Tin học đại cương - Chương 5: Hàm và tổ chức chương trình - Nguyễn Lê Minh trang 7

Trang 7

Bài giảng Tin học đại cương - Chương 5: Hàm và tổ chức chương trình - Nguyễn Lê Minh trang 8

Trang 8

Bài giảng Tin học đại cương - Chương 5: Hàm và tổ chức chương trình - Nguyễn Lê Minh trang 9

Trang 9

Bài giảng Tin học đại cương - Chương 5: Hàm và tổ chức chương trình - Nguyễn Lê Minh trang 10

Trang 10

Tải về để xem bản đầy đủ

pdf 26 trang xuanhieu 3500
Bạn đang xem 10 trang mẫu của tài liệu "Bài giảng Tin học đại cương - Chương 5: Hàm và tổ chức chương trình - Nguyễn Lê Minh", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Tin học đại cương - Chương 5: Hàm và tổ chức chương trình - Nguyễn Lê Minh

Bài giảng Tin học đại cương - Chương 5: Hàm và tổ chức chương trình - Nguyễn Lê Minh
 TIN HỌC ĐẠI CƯƠNG
 Chương 5: Hàm và tổ chức chương trình
 GV: Nguyễn Lê Minh
 Bộ môn: Công nghệ thông tin
3/6/2020
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
5.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 ;
 }
 5
Ví dụ 1
//In ra cac so nguyên to <=N 
#include 
#include 
int i, N;
int nguyento (int) ; //prototype 
cua ham void main ()
 do
 {
 printf("Nhap so nguyên N: 
 ");//sopt scanf("%d", &N);
 } while(N<=0);
 for(i=2; i<=N; i++){
 if( nguyento(i) != 0) 
 printf("%8d , i);
 }
 Hàm nguyento()
 getch(); Được thực hiện bao nhiêu lần?
}
 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 hàm 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
Bài tập
1. Viết chương trình dạng hàm tìm GTLN của 2 số a và b (a, b được
 nhập vào từ bàn phím)
2. Viết hàm giải phương trình bậc nhất: ax+b=0
3. Viết chương trình dạng hàm giải phương trình bậc hai 1 ẩn: ax2 + 
 bx + c =0
4. Viết chương trình dạng hàm tính TBC của 1 dãy số a1, a2,, an
 (N nhập vào từ bàn phím)
5. Viết chương trình dạng hàm tìm UCLN, BCNN của 2 số nguyên
 dương a, b
 11
 Kiểm tra
Câu 1: Hãy viết chương trình tìm trong số các phần tử 
của dãy a1, a2,...,aN có bao nhiêu cặp (ai, aj) với i≠j thỏa 
điều kiện ai+aj = x. x nhập vào từ bàn phím. (Trình bày
dạng hàm)
Câu 2: Viết chương trình bằng ngôn ngữ lập trình C: 
■ Cho dãy điểm M1(x1, y1), M2(x2, y2),,Mn(xn, yn) trên 
 mặt phẳng. Hãy:
 – Tìm độ dài đường gấp khúc M1M2..Mn
 – Tìm đoạn MiMj (i≠j) có độ dài lớn nhất
 – Có bao nhiêu điểm thuộc góc phần tư thứ nhất.
 12
5.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 đổ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.
 13
Truyền tham số theo tham trị
 #include 
 int main() {
 #include 
 int a = 10, b= 2; 
 void doicho (int a, int b)
 doicho(a, b) ;
 {
 printf(“a va b ngoai
 int t; doicho() la: %d va %d", a, 
 t = a; a = b; b = t; b); 
 printf("a va b trong return 0;
 doicho() la: %d va %d", a, 
 b); }
 }
 14
 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
 15
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; /* pi là con trỏ chứa địa chỉ biến i */
 pj = &j; /* pj là con trỏ chứa địa chỉ biến j */
 16
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);
 17
Ví dụ
 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ỏ.
■ Thường dùng trong trường hợp:
 – Sử dụng hàm để thay đổi giá trị của một biến
 – Truyền một mảng vào cho hàm
 – Hàm trả về nhiều kết quả
 20
5.3. Hàm đệ quy
 ■ Ngôn ngữ C cho phép 1 hàm gọi tới chính nó từ một 
 điểm nào đó trong thân của hàm.
 ■ Những hàm có lời gọi hàm tới chính nó được gọi là 
 hàm đệ quy. int giaithua(int n)
 {
 if(n== 0 || n== 1) 
 return 1;
 else
 return n * giaithua(n-1);
 }
 void main()
 {
 int n;
 printf ("Nhap N = ”); scanf(“%d", &n) ;
 printf("%d! = %ld", n, giaithua(n) );
 getch{);
 }
 21
5.3. Hàm đệ quy (tt)
Điều gì xảy ra nếu có lời gọi hàm sau
 k = giaithua (-1);
Khắc phục ?
  Hạn chế của hàm đệ qui
  Dùng nhiều bộ nhớ
  Hãy viết lại hàm giai_thua sử dụng vòng lặp
  So sánh hai cách viết đệ qui và lặp
 22
5.3. Hàm đệ quy (tt)
■ Hàm đệ qui thường phù hợp để giải quyết các bài toán có đặc trưng
  Bài toán dễ dàng giải quyết trong một số trường hợp riêng, đó chính là điều kiện
 dừng đệ qui
  Trong trường hợp tổng quát, bài toán suy về cùng dạng nhưng giá trị tham số
 thay đổi
■ Ví dụ: tìm USCLN của hai số nguyên dương
 - nếu x = y thì usc(x, y) = x
 - nếu x > y thì usc(x, y) = usc(x-y, y)
 - nếu x < y thì usc(x, y) = usc(x, y-x)
 23
Cách xây dựng hàm đệ quy
■ Thường được xây dựng theo thuật toán sau:
 Ví dụ:
 24
5.4. Bài tập hàm đệ quy
■ Hãy viết chương trình sử dụng hàm đệ qui để tạo dãy số Fibonacci:
 . Dãy số Fibonacci là dãy số F1, F2, F3, .... Fn được tạo ra với công thức:
 . Fn = Fn-1 + Fn-2 Với F1 =1, F2=1
■ Ví dụ: 1, 1,2, 3, 5, 8, 13, 21, ...
 25
Bài tập
1. Viết hàm đệ quy tính tổng từ 1 đến N (N>=0)
2. Viết hàm đệ quy tính N!
3. Viết hàm đệ quy tìm UCLN,BCNN của 2 số nguyên a,b
 26

File đính kèm:

  • pdfbai_giang_tin_hoc_dai_cuong_chuong_5_ham_va_to_chuc_chuong_t.pdf