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


Đăng ký nhận thông báo về những video mới nhất

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 tng th a và b

//Sau khi hàm này được gi xong a và b s nhn các giá tr nhp 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ó phm vi hot đng ch trong hàm giaiThua
  int i;                //i: biến cc b ch hot đng được trong hàm giaiThua
  float KQ=1.0;         //KQ: cũng là biến cc b ca giaiThua
  for(i=1; i<=n ; i++)
  KQ = KQ * i;

  return KQ;
}

main() {
  int n;  //n là biến cc b ch hot đ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 gi xong a và b  hàm main() s nhn các giá tr nhp 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 cc b ca hàm main()
  pa=&a;  //*pa và *pb là 2 con tr ca 2 biến a và b nhm mc đích
  pb=&b;  //truyn đi s cho các hàm theo tham chiếu
  nhapHeSo(pa, pb);
  xacDinhNghiem(a,b);

  return 0;
}

Nếu bạn có điều thắc mắc, bạn hãy comment cho V1Study để được giải đáp.
Bài viết này được chia sẻ bởi LongDT. Nếu bạn muốn chia sẻ bài viết, bạn hãy Đăng ký làm thành viên!
« Prev
Next »
Copied !!!