C++: Bài 18. Biến toàn cục và biến cục bộ

Các khóa học miễn phí qua video:

Các biến được sử dụng trong một chương trình có thể có những phạm vi hoạt động khác nhau, tùy thuộc vào từng loại. Ta có hai loại biến cơ bản như sau:

1. Biến tổng thể (biến toàn cục)

+ Có phạm vi hoạt động trong tất cả các hàm được định nghĩa hoặc khai báo sau nó.

+ Được khai báo ở ngoài tất cả các hàm, kể cả hàm main().

+ Ở mọi vị trí của chương trình biến này đều có thể được sử dụng, được gọi đến.

+ Tất cả các hàm của chương trình đều có quyền sử dụng biến tổng thể này.

+ Biến tổng thể thường được khai báo sau các #include .

+ Ví dụ: Viết chương trình giải phương trình bậc nhất ax + b = 0.

–> Khai báo 2 biến a, b (là 2 hệ số của phương trình) là 2 biến tổng thể.

–> Viết 2 hàm, một hàm dùng để nhập hai hệ số a và b, hàm kia dùng để hiển thị kết quả nghiệm của phương trình ứng với 2 giá trị a và b.

–> Chương trình được viết như sau:

#include<

iostream

> using namespace std;

float

a, b; //Khai báo 2 biến tổng thể a và b //Sau khi hàm này được gọi xong a và b sẽ nhận các giá trị nhập vào từ bàn phím

void

nhapHeSo() { cout<<

"Nhap he so a: "

; cin>>a; cout<<

"Nhap he so b: "

; cin>>b; }

void

xacDinhNghiem() {

if

(a==

0

){

if

(b==

0

){ cout<<

"Phuong trinh co vo so nghiem!"

; }

else

{ cout<<

"Phuong trinh vo nghiem!"

; } }

else

{ cout<<

"Phuong trinh co nghiem x = "

<<-b/a; } } main() { nhapHeSo(); xacDinhNghiem();

return

0

; }

Kết quả:

Phương trình vô số nghiệm 

Phương trình bậc nhất vô nghiệm

Phương trình bậc nhất có nghiệm

2. Biến cục bộ (địa phương)

+ Được khai báo bên trong các hàm.

+ Đối số của hàm cũng là biến cục bộ của hàm. Vì vậy, biến cục bộ và đối số của một hàm không được trùng tên nhau.

+ Có phạm vi hoạt động chỉ trong hàm khai báo chúng.

+ Các hàm khác không có khả năng sử dụng chúng (kể cả hàm main()).

+ Sau khi hàm chứa nó thực hiện xong, giá trị của các biến này sẽ bị hủy đi.

Ví dụ 1:

Tính giai thừa : S = n! (=1*2*3*4*…*n). Chương trình được viết như sau:

#include<

iostream

> using namespace std;

float

giaiThua(

int

n) { //n: tham số có phạm vi hoạt động chỉ trong hàm giaiThua

int

i; //i: biến cục bộ chỉ hoạt động được trong hàm giaiThua

float

KQ=

1.0

; //KQ: cũng là biến cục bộ của giaiThua

for

(i=

1

; i<=n ; i++) KQ = KQ * i;

return

KQ; } main() {

int

n; //n là biến cục bộ chỉ hoạt động được trong hàm main() cout<<

"Nhap n: "

; cin>>n; cout<<

"Giai thua cua "

<<n<<

" bang "

<<giaiThua(n);

return

0

; }

Ví dụ 2:

Viết lại chương trình giải phương trình bậc nhất, trong đó các hệ số a, b của phương trình phải là các biến cục bộ trong hàm (nghĩa là không được khai báo a, b là các biến tổng thể).

Sau đây là đoạn code demo chương trình:

#include<

iostream

> using namespace std; //Sau khi hàm này được gọi xong a và b ở hàm main() sẽ nhận các giá trị nhập vào từ bàn phím

void

nhapHeSo(

float

*pa,

float

*pb) { cout<<

"Nhap he so a: "

; cin>>*pa; cout<<

"Nhap he so b: "

; cin>>*pb; }

void

xacDinhNghiem(

float

a,

float

b) {

if

(a==

0

){

if

(b==

0

){ cout<<

"Phuong trinh co vo so nghiem!"

; }

else

{ cout<<

"Phuong trinh vo nghiem!"

; } }

else

{ cout<<

"Phuong trinh co nghiem x = "

<<-b/a; } } main() {

float

a, b, *pa, *pb; //Khai báo 2 hệ số a, b là các biến cục bộ của hàm main() pa=&a; //*pa và *pb là 2 con trỏ của 2 biến a và b nhằm mục đích pb=&b; //truyền đối số cho các hàm theo tham chiếu nhapHeSo(pa, pb); xacDinhNghiem(a,b);

return

0

; }