Tải bản đầy đủ (.doc) (3 trang)

Truyền tham số

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (91.15 KB, 3 trang )

3. Truyền tham số
a. Các loại tham số.
Như đã trình bày ở phần trên, tham số có 2 loại: tham số hình thức và tham số thực tế. Với hai loại tham
số này, chúng ta có thể thiết kế các hàm mà không cần qua tâm đến các biến toàn cục khai báo trong chương
trình và các biến khai báo trong các hàm khác. Các tham số trong danh sách tham số của hàm được gọi là
tham số hình thức, các tham số trong lời gọi hàm được gọi là tham số thực.
b. Truyền giá trị cho hàm
Truyền giá trị (truyền trị) có nghĩa là các giá trị thực (tham số thực) không bị thay đổi giá trị khi truyền
cho các tham số hình thức.
Ví dụ: Chúng ta xem xét đoạn chương trình sau, tham số được truyền vào theo hình thức truyền trị.
void ham(int a) {
printf(“a=%d”,a);
}
void main() {
int n;
…….
ham(n);
…..
ham(9);
}
 Chúng ta thấy biến n và giá trị 9 được truyền vào cho ham, với các biến và giá trị này chỉ có ý nghĩa
là đưa giá trị thực của nó cho tham số hình thức a, và không quan tâm đến việc thực hiện các giá trị đó như
thế nào trong hàm.
c. Truyền tham biến cho hàm – truyền địa chỉ
Truyền tham biến khác so với truyền tham trị ở chổ là giá trị thực (tham số thực) có thể bị thay đổi khi
truyền cho tham số hình thức trong quá trình sử dụng của hàm.
Chúng ta muốn truyền theo kiểu tham biến thì chúng ta truyền cả nội dung lẫn địa chỉ của biến, do đó
chúng ta phải sử dụng đến biến con trỏ.
Sau đây là ví dụ về việc sử dụng phương pháp truyền địa chỉ (truyền tham biến)
#include <conio.h>
#include <stdio.h>


void Tong(int *s, int a, int b){
*s= a+b;
}
void main(){
int x, y, z;
x=10;
y=20;
Tong(&z,x,y);
printf(“Gia tri tong: %d”, z);
}
Để hiểu rõ hơn về việc truyền địa chỉ chúng ta cần tìm hiểu về con trỏ, chúng ta sẽ tìm hiểu con trỏ ở các
phần tiếp sau.
4. Tầm vực của biến
a. Biến toàn cục:
Biến toàn cục là biến được sử dụng ở mọi nơi trong chương trình. Biến toàn cục có thể khai báo ở nhiều
chổ trong chương trình .Nhung do tính sáng sủa, dễ nhìn, chúng ta cần khai báo ở đầu chương trình.
Sau đây là ví dụ về việc khai báo biến toàn cục có tên là i và n.
#include <stdio.h>
int i ;
void main() {
….
}
int n;
b. Biến địa phương – biến cục bộ:


Biến địa phương là biến chỉ có giá trị trong thời gian hàm hoạt động và được khai báo trong thân hàm.
Nếu giữa biến địa phương và biến toàn cục trùng tên thì biến địa phương sẽ che đi hiệu lực của biến
toàn cục
Ví về việc sử dụng biến địa phương.

#include …..
int a;
Biến địa
int Ham(int b){
phương a,
int a, c;
c
………….
c= a+b;
Gọi biến
………
địa phương
return ….
a
}
c. Biến địa phương tĩnh static.
 Được cấp phát ở một vị trí cố định (một địa chỉ cố định)
 Tồn tại ngay cả khi hàm đã kết thúc
 Được khởi tạo = 0
 Chỉ được sử dụng trong hàm
Ví dụ :
void thi_du() {
static int i;
i++;
printf(“Goi lan thu %d\n”,i);
}
d. Biến địa phương thanh ghi register.
 Biến được cấp phát địa chỉ bởi bộ nhớ thanh ghi.
 Tốc độ truy cập tức thời, nhanh. Do đó, khi một biến nào đó được sử dụng nhiều thì cần cấp phát
biến địa phương thanh ghi  cải thiện tốc độ chương trình

 Tuy nhiên, do CPU ít thanh ghi nên cần hạn chế sử dụng.
Ví dụ:
void thidu() {
register int i;
i++;
printf(“goi lan thu %d\n”,i);
}
5. Chương trình đệ qui
 Khái niệm về thuật toán đệ qui.
 Một thuật toán được gọi là đệ qui khi thuật toán này được định nghĩa đựa trên chính bản thân
nó. Điều đó có nghĩa là: thuật toán dang thiết kế được định nghĩa dựa trên chính bản thân nó (đệ qui trực
tiếp), hoặc được định nghĩa dựa trên một hoặc nhiều thuật toán được định nghĩa dựa trên thuộc toán ban đầu
(đệ qui gián tiếp).
 Ví dụ. Tính lũy thừa của một số.
Nếu gọi p(x,n) là lũy thừa bậc n của cơ số x, thì :
• Lũy thừa bậc 0 của cơ số x được cho bởi : P(x,0)=1
• Lũy thừa bậc n của cơ số x được tính qua lũy thừa bậc n-1 của x:
P(x, n)=x*P(x, n-1)
 Tính giai thừa của một số n
Nếu gọi GT(n) là giai thừa của n thì:
• Giai thừa 0 được cho bởi: GT(0)=1
• Giai thừa n được tính qua giai thừa của n-1: GT(n)=n*GT(n-1)
 Thiết kế thuật toán đệ qui
Qua 2 ví dụ trên ta thấy một thuật toán đệ qui luôn có hai phần:




Phần dừng: là phần khởi đầu tính toán hoặc điểm kết thúc của thuật toán, không chứa phần
đang được định nghĩa.

• Phần đệ qui: là phần có sử dụng thuật toán đang được định nghĩa và được mô tả như sau:
R=F(T,R), trong đó T là phần dừng và R là phần đệ qui.
 Tính đệ qui của chương trình con
Một hàm được gọi là đệ qui nếu trong thân hàm có lời gọi chính bản thân nó hoặc gọi lẫn nhau.
Ví dụ sau đây là một chương trình con đệ qui dùng để tính giai thừa của một số n
long giaithua(int n) {
if (n= =0)
return 1;
else
return n*(n-1);
}



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×