Ví dụ 1: Xây dựng hàm tính n!
long gthua(int n)
{
long gt=1;
for (int i=2;i<=n;i++)
gt=gt*i;
return gt;
}
Có thể bạn quan tâm!
- Cơ sở lập trình - Trường ĐH Thương mại - 7
- Cơ sở lập trình - Trường ĐH Thương mại - 8
- Cơ sở lập trình - Trường ĐH Thương mại - 9
- Cơ sở lập trình - Trường ĐH Thương mại - 11
- Cơ sở lập trình - Trường ĐH Thương mại - 12
- Cơ sở lập trình - Trường ĐH Thương mại - 13
Xem toàn bộ 113 trang tài liệu này.
7/2020 Cơ sở lập trình 145
Ví dụ2: Xây dựng hàm tính tổ hợp chập k của n. int tohop(int n, int k)
{
int th; th=gthua(n)/(gthua(k)*gthua(n-k)); return th;
}
7/2020 Cơ sở lập trình 146
Ý nghĩa: trả về giá trị cho hàm
Cú pháp:
return (giá trị);
Loại hàm: các hàm có kiểu khác void
Vị trí: Thông thường được đặt ở dòng lệnh
cuối cùng của thân hàm
Lưu ý:
Một hàm có thể xuất hiện nhiều câu lệnh return
7/2020 Cơ sở lập trình 147
Ví dụ 1: tính n!
long gthua(int n)
{
long gt=1;
for (int i=2;i<=n;i++) gt=gt*i;
return gt;
}
7/2020 Cơ sở lập trình 148
Ví dụ2: Kiểm tra 1 số nguyên dương có phải
là số nguyên tố không
int ktnto(int n)
{ if (n==1 || n==2) return 1;
else
{ for (int i=2;i<n;i++)
if (n%i==0) return 0; return 1;
}
}
7/2020 Cơ sở lập trình 149
Quá trình thực hiện khi gặp lời gọi hàm
Cấp phát bộ nhớ cho các đối và các biến cục bộ
Gán giá trị của tham số thực cho các đối
tương ứng
Thực hiện các câu lệnh trong thân hàm
Khi gặp câu lệnh return hoặc dấu } cuối cùng của thân hàm thì máy sẽ xóa các đối, các biến cục bộ và rời khỏi hàm
7/2020 Cơ sở lập trình 150
Lưu ý:
Đối và biến cục bộ của hàm cần có tên khác nhau
Không thể mang giá trị của đối ra khỏi hàm
Không thể dùng đối để thay đổi giá trị của các đại lượng bên ngoài hàm.
Các đối số có thể bị biến đổi trong thân hàm nhưng các tham số thực không bị thay đổi (các đối chỉ là bản sao của tham số thực)
7/2020 Cơ sở lập trình 151
Vị trí xuất hiện: lời gọi hàm
Ý nghĩa: Giá trị trả về của hàm là một giá trị cụ thể có kiểu như đã được khai báo
Vai trò: Có thể sử dụng như một giá trị hằng trong phép gán, các phép toán số học, các câu lệnh nhập xuất.
Ví dụ
printf(“giá trị giai thừa là: %ld”,gthua(n));
th=gthua(n)/(gthua(k)*gthua(n-k));
7/2020 Cơ sở lập trình 152
Lưu ý: Nếu hàm không có giá trị trả về →lời
gọi hàm sẽ đứng đơn lẻ như một lệnh;
Ví dụ:
void nhap(int a[],int n)
{
for (int i=0;i<n;i++) scanf(“%d”,&a[i]);
}
int x[10], d; nhap(x,d);
7/2020 Cơ sở lập trình 153
4.2.1 Biến toàn cục và biến địa phương
4.2.2 Tham số hình thức của hàm
4.2.3 Truyền tham số
7/2020 Cơ sở lập trình 154
Ý nghĩa: loại biến sẽ quyết định vòng đời và
phạm vi hoạt động của nó.
Biến toàn cục: là biến có phạm vi hoạt động toàn chương trình
Vị trí: được khai báo ngoài mọi hàm, dưới khai
báo tiền xử lý.
Vòng đời: từ vị trí của nó được khai báo cho tới hết chương trình.
7/2020 Cơ sở lập trình 155
Biến cục bộ (địa phương): là biến có phạm vi hoạt động trong một hàm hoặc một khối lệnh
Vị trí : tham số của hàm hoặc biến được khai
báo trong thân hàm.
Vòng đời: từ vị trí nó được khai báo đến hết phạm vi. (khối lệnh/ hàm)
Lưu ý:
Nên sử dụng biến cục bộ để giảm không gian lưu
trữ và dễ kiểm soát
Tất cả các biến được khai báo trong thân của các hàm đều là biến cục bộ (bao gồm hàm main)
7/2020 Cơ sở lập trình 156
Ví dụ:
#include <stdio.h>
#include <conio.h>
int x=1; // biến toàn cục int test ();
int main(int argc, char *argv[])
{ int y = 5; //biến cục bộ
printf("%d", test()) ;
printf("%d",y); getch();
return 0;
}
int test ()
{ return x *2; }
7/2020 Cơ sở lập trình 157
Tham số hình thức của hàm: là các tham số được viết trong định nghĩa hàm
Yêu cầu:
Các tham số phải có cả kiểu và tên
Kiểu, thứ tự và số lượng tham số truyền vào phải chính xác như khai báo nguyên mẫu, tên của tham số có thể khác.
Tham số có thể có giá trị mặc đinh, những tham số
này phải viết dồn về bên phải nhất.
7/2020 Cơ sở lập trình 158
Ví dụ
void nhap(int a[],int n=10)
{
for (int i=0;i<n;i++) scanf(“%d”,&a[i]);
}
7/2020 Cơ sở lập trình 159
Phân loại:
Tham số vào: chứa giá trị đã biết
Tham số ra: chứa các kết quả mới nhận được.
Lưu ý:
Có tham số đóng vai trò cả tham số vào và cả tham số ra.
Ví dụ:
7/2020 Cơ sở lập trình 160