Hàm
#include <stdio.h>
int tich(int X, int y)
{ return (x*y);
}
void mainO
{ int dai, rong, dt;
printf(“\n Nhap chieu dai:”); scanf(“%d”, &dai);
printf(“\n Nhap chieu rong:”); scanf(“%d”, &rong);
dt= tich(dai,rong);
printf(“\n Dien tích: %d”, dt);
Hàm
#include <stdio.h>
int tich(int X, int y ) ; II nguyên mẫu hàm (prototype)
void mainO
{ int dai, rong, dt;
printf(“\n Nhap chieu dai:”); scanf(“%d”, &dai);
printf(“\n Nhap chieu rong:”); scanf(“%d”, &rong);
dt= tich(dai,rong);// lời gọi hàm
printf(“\n Dien tich: %d”, dt);
}
int tich(int X, int y)// định nghĩa hàm
{ return (x*y);
}
Hoạt động của hàm
cấp phát bộ nhớ cho các tham số và các
biến cục bộ
■ ■
Gán giá trị của các đối số cho các tham số
tương ứng
Thực hiện các lệnh trong thân hàm
16.
}
Truyền đối số theo giá trị
Hàm tạo ra một biến mới cùng kiểu với đối số và
sao chép giá trị của đối số vào biến đó.
Hàm không truy cập trực tiếp vào biến ban đẩu
mà chỉ tác động lên bản sao mà nó tạo ra.
Sự thay đổi ở bản sao không tác động đến biến
ban đẩu (biến gốc).
Hữu dụng khi hàm không có ý định thay đổi giá
trị của biến gốc.
1. #include <stdio.h> // truyền địa chỉ cho hàm
2. void hoanvi(int *px,int *py);
3. void mainO
4. { int x=2, y=3;
5. hoanvi(&x,&y);
6. printf(“\nx=%d,y=%d”,x,y);
7. }
8. void hoanvi(int *px,int *py)
9. { int tam;
10. tam=*px;
11. *px=*py;
12. *py=tam;
13. }
Phạm vi biến
■
Biến toàn cục:
■
- Được khai báo ở ngoài mọi hàm (kể cả hàm
main)
cấp phát bộ nhớ
Biến địa phương (tiếp theo)
- Biến địa phương thanh ghi:
• khai báo : register int x;
• yêu cáu trình biên dịch đặt biến đó vào thanh
ghi (nếu có thể)
• không dùng từ khóa register với biến tĩnh.
• không định nghĩa con trỏ đến biến thanh ghi
Đệ quy
• Một hàm gọi lại chính nó
■ W ■ ■
1. #include <stdio.h>
2. long int giaithua(int n);
3. void mainO
4. { int n;
5. printf(“\nNhap n:”);scanf(“%d”,&n);
6. printf(“%d! = %ld”,n,giaithua(n));
7. }
8. long int giaithua(int n)
9. { if (n==0) return(l);
10. else return(giaithua(n-l)*n);
11. }
#include <stdio.h>
int uscln(int x.inty)
{ if (y==0) return x;
else return uscln( y , x% y);
}
void mainO
{ intx.y;
do { printf("\nNhap 2 so nguyen duong
4. { int i, mang[n];
5. for(i=0 ; i<n ; i++)
6. { printf( \nx[ó/od]=”, i);
7. scanf(“%d”, &mang[i]);
8. }
9. printf(“\n Mang gom cac phan tu :\n”);
10. for(i=0 ; i<n ; i++)
11. pri ntf(“\nx[%d]=%d”, i, mang [i]);
12. }
Mảng nhiều chiểu
Khai báo và khởi tạo mảng nhiều chiều
intx[2][3]={ {1 ,2 ,3 },
{2,3,4}
Con trỏ
1. Khái niệm
■
2. Con trỏ và biến đơn
3. Con trỏ và mảng một chiều
4. Truyền mảng một chiều cho hàm
5. Con trỏ và xâu ký tự
6. Con trỏ và mảng nhiều chiều
7. Truyền mảng nhiều chiều cho hàm
Khái niệm con trỏ
■
Khi khai báo 1 biến, trình biên dịch sẽ cấp
phát 1 ô nhớ với địa chỉ duy nhất cho biến
đó
Con trỏ là biến dùng để chứa địa chỉ của
biến khác
Con trỏ ptr chứa địa chỉ của biến b => con
printf(“\nDia chi cua number: %p”,&number);
printf(“\nGia tri cua con tro pointer: %p”,pointer);
printf(“\nGia tri duoc tro toi boi pointer: %d”,*pointer);
printf(“\nDia chi cua con tro pointer: %p”,&pointer);
getchO;
}
1. #include <stdio.h>
2. void hoanvi(int *px,int *py)
3. { int tam;
4. tam=*px;
5. *px=*py;
6. *py=tam;
7- }
8. void mainO
9. { int x=2;
10. int y=3;
11. hoanvi(&x,&y);
12. printf(“\nx=%d,y=%d”,x,y);
13. }
1. #include <stdio.h> // hàm có nhiều giá trị đẩu ra
2. void ham(int X, int y, int *sum, int *product)
3. { *sum=x+y;
4. *product=x*y;
5. }
6. void mainO
7. { int x=2,y=3,tong,tich;
8. ham(x,y,&tong,&tich);
9. printf("\n x=%d",x);
10. printf("\n y=%d",y);
11. printf("\n tong=%d",tong);