Thế nào là tham số hình thức tham số thực sự biến toàn cục biến cục bộ

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ó hailoại biến cơ bảnnhư 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áosau 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ả:

Thế nào là tham số hình thức tham số thực sự biến toàn cục biến cục bộ

Thế nào là tham số hình thức tham số thực sự biến toàn cục biến cục bộ

Thế nào là tham số hình thức tham số thực sự biến toàn cục biến cục bộ

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

+ Được khai báo bên trong cáchà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; }