Ngôn ngữ lập trình C/C++ - Chương 3: Hàm

Hàm là một khối lệnh thực hiện một công việc hoàn chỉnh (module), được đặt tên và được gọi thực thi nhiều lần tại nhiều vị trí trong chương trình. Hàm còn gọi là chương trình con (subroutine)  Hàm có thể được gọi từ chương trình chính (hàm main) hoặc từ 1 hàm khác.  Hàm có giá trị trả về hoặc không. Nếu hàm không có giá trị trả về gọi là thủ tục (procedure)

pdf35 trang | Chia sẻ: thuychi16 | Lượt xem: 839 | Lượt tải: 2download
Bạn đang xem trước 20 trang tài liệu Ngôn ngữ lập trình C/C++ - Chương 3: Hàm, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Hàm là một khối lệnh thực hiện một công việc hoàn chỉnh (module), được đặt tên và được gọi thực thi nhiều lần tại nhiều vị trí trong chương trình. Hàm còn gọi là chương trình con (subroutine)  Hàm có thể được gọi từ chương trình chính (hàm main) hoặc từ 1 hàm khác.  Hàm có giá trị trả về hoặc không. Nếu hàm không có giá trị trả về gọi là thủ tục (procedure) Khái niệm Có hai lọai hàm:  Hàm thư viện: là những hàm đã được xây dựng sẵn. Muốn sử dụng các hàm thư viện phải khai báo thư viện chứa nó trong phần khai báo #include.  Hàm do người dùng định nghĩa. Khái niệm  Hàm do người dùng định nghĩa  returnType: Kiểu dữ liệu của giá trị trả về bởi hàm. Nếu hàm không trả về giá trị thì returnType là void.  parameterList: Danh sách các tham số hình thức phân cách nhau bởi dấu phẩy Dạng tổng quát của hàm returnType functionName(parameterList) { body of the function } Ví dụ: Dạng tổng quát của hàm int max(int a, int b) { if(a<b) return b; else return a; } Hàm khi đã định nghĩa nhưng chúng vẫn chưa được thực thi, hàm chỉ được thực thi khi được gọi. Cú pháp gọi hàm: Gọi hàm ([Danh sách các tham số]) Ví dụ: Gọi hàm trong chương trình chính: void main() { int a, b, m; printf(“ a=“); scanf(“%d”,&a); printf(“ b=“); scanf(“%d”,&b); m=max(a, b); printf (“so lon nhat la: %d”, m); } Gọi hàm Hàm có thể được gọi từ nhiều vị trí khác nhau trong chương trình. Khi hàm được gọi, khối lệnh tương ứng của hàm được thực thi. Sau khi thực hiện xong, quyền điều khiển được trả về cho chương trình gọi. Nguyên tắc hoạt động của hàm Nguyên tắc hoạt động của hàm void main() { int a, b, USC; printf(“a=“); scanf(“%d”,&a); printf(“b=“); scanf(“%d”,&b); USC = uscln(a,b); printf (“USC lon nhat la: ”,USC); } int uscln(int a, int b) { a=abs(a); b=abs(b); while(a!=b) { if(a>b) a-=b; else b-=a; } return a;} Đối với hàm có đối số (arguments), khi thực thi hàm cần khai báo danh sách các tham số để nhận giá trị từ chương trình gọi. Các tham số này được gọi là tham số hình thức Ví dụ: Tham số hình thức và tham số thực int min( int a, int b) { if(a<b) return a; else return b; } Tham số hình thức Khi gọi hàm, phải cung cấp các giá trị thật, các giá trị này được sao chép vào các tham số hình thức, các giá trị thật được gọi là tham số thực. Ví dụ: Để tìm giá trị nhỏ nhất của 2 số 5 và 6, bằng cách gọi hàm min(5, 6) Tham số hình thức và tham số thực Tham số thực min(int a, int b) Có hai cách truyền đối số vào tham số hình thức:  Truyền tham trị:  Sao chép giá trị của đối số vào tham số hình thức của hàm.  Những thay đổi của tham số không ảnh hưởng đến giá trị của đối số  Truyền tham biến  Sao chép địa chỉ của đối số vào tham số hình thức. Do đó, những thay đổi đối với tham số sẽ có tác dụng trên đối số Tham số hình thức và tham số thực Tham số làm kết quả đầu ra Tham số vừa làm đầu vào và đầu ra Dùng dấu & phía trước tên tham số khi cài đặt hàm Tham số là tham chiếu Ví dụ: Tham số hình thức và tham số thực void double(int a) { a = a*2; printf(“gia tri cua a trong ham double:%d“,a); } void main() { int a=40; double(a); printf(“\n Gia tri cua a trong ham main: %d”, a); } Ví dụ: Khi gọi hàm double(&a); Địa chỉ của a truyền vào cho tham số hình thức của hàm: double(int &b) Tham số hình thức và tham số thực void double(int &b) { b *= 2; printf(“Trong hàm double a = %d“, b); }  Ví dụ: viết chương trình hoán vị hai số nguyên a và b nhập từ bàn phím Dùng tham chiếu Chương trình bắt buộc phải có prototype của hàm hoặc phải bắt buộc viết định nghĩa của hàm trước khi gọi. Prototype để loại trừ việc bắt buộc phải định nghĩa hàm trước khi gọi. Prototype khai báo giống như header của hàm Sau khi đã sử dụng prototype của hàm, ta có thể viết định nghĩa chi tiết hàm ở bất kỳ vị trí nào trong chương trình Prototype (nguyên mẫu)của hàm Ví dụ: Prototype (nguyên mẫu)của hàm void main()//hàm main (sẽ gọi các hàm thực hiện) { int a, b;// khai báo biến printf(“ a=“); scanf(“%d”,&a); printf(“ b=“); scanf(“%d”,&b); m=max(a, b); printf (“so lon nhat la: %d”, m); } #include // Khai báo thư viện iostream.h int max(int x, int y);// khai báo nguyên mẫu hàm max int max(int x, int y)// Định nghĩa hàm max(a,b) { return (x>y) ? x:y; } Ví dụ: Viết chương trình nhập vào số nguyên dương n, in ra màn hình các số nguyên tố nhỏ hơn n. vd: Nhập n = 10, in ra màn hình là: 2, 3, 5, 7 Kiểm tra có phải số nguyên tố không? Ví dụ: Viết chương trình nhập vào số nguyên dương n, in ra màn hình các số nguyên tố nhỏ hơn n. vd: Nhập n = 10, in ra màn hình là: 2, 3, 5, 7 Kiểm tra có phải số nguyên tố không? Gọi hàm KTSNT Ví dụ: Viết chương trình nhập vào số nguyên dương n, in ra màn hình các số nguyên tố nhỏ hơn n. vd: Nhập n = 10, in ra màn hình là: 2, 3, 5, 7 Hàm kiểm tra số nguyên tố Gọi hàm kiểm tra số nguyên tố Tham số Ví dụ: Viết chương trình nhập vào số nguyên dương n, in ra màn hình các số nguyên tố nhỏ hơn n. vd: Nhập n = 10, in ra màn hình là: 2, 3, 5, 7 Hàm kiểm tra số nguyên tố Ví dụ: Viết chương trình nhập số nguyên dương n và in ra màn hình các ước số của n Phân tích bài toán:  Input: n (Để xác định tham số) Kiểu dữ liệu: số nguyên dương (int).  Output: In ra các ước số của n (Để xác định kiểu dữ liệu trả về của hàm) Xuất ra màn hình Không trả về giá trị Kiểu dữ liệu của hàm là void .  Xác định tên hàm: void LietKeUocSo(int n);  Cài đặt TênHàm([danh sách các tham sô ́]) { ketqua; Khai báo các biến cục bô ̣ Các câu lệnh / khối lệnh hay lời gọi đến hàm khác. return ketqua; } Hàm trả về giá trị Gọi hàm Tên biến = TênHàm (danh sách đối số); Hàm trả về giá trị Ví dụ: Viết chương trình nhập sô ́ nguyên dương n và tính tổng các số từ 1 đến n  Phân tích bài toán: Input: n (Để xác định tham sô ́)  Kiểu dữ liệu: sô ́ nguyên dương (int). Output: Tổng S (Để xác định kiểu dữ liệu)  Hàm trả về giá trị của S là tổng các số nguyên dương kiểu trả về là int hoặc longint  Xác định TênHàm: int TongS(int n); Hàm trả về giá trị Chương trình Phạm vi khối Phạm vi hàm Phạm vi chương trình Phạm vi của biến Một khối được giới hạn bởi ngoặc { }. Biến khai báo trong khối có phạm vi khối. Phạm vi này còn gọi là cục bộ, và biến đưọc gọi là biến cục bộ. Phạm vi khối Phạm vi khối Hoạt động trong phạm vi của hàm chứa biến đó. Ví dụ:  Biến i chỉ hoạt động bên trong hàm LietKeUocSo Phạm vi hàm Biến được khai báo bên ngoài các hàm, gọi là biến toàn cục, có tác dụng trong toàn bộ chương trình. Biến toàn cục được nhìn thấy ở tất cả các hàm trong chương trình. Phạm vi chương trình Ví dụ: Phạm vi chương trình
Tài liệu liên quan