Lập trình C: Biến tổng thể và biến cục bộ

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực

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 <stdio.h>

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() {
  printf("\nNhap he so a: ");
  scanf("%f", &a);
  printf("\nNhap he so b: ");
  scanf("%f", &b);
}

void xacDinhNghiem() {
  if(a==0){
    if(b==0){
      printf("\nPhuong trinh co vo so nghiem!");
    }else{
      printf("\nPhuong trinh vo nghiem!");
    }
  }else{
    printf("\nPhuong trinh co nghiem x = %g",-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 <stdio.h>

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()
  printf("Nhap n: ");
  scanf("%d", &n);
  printf("\nGiai thua cua %d bang %g", n, 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 <stdio.h>

//Sau khi hàm này được gi xong thì 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) {
  printf("Nhap he so a: ");
  scanf("%f", pa);
  printf("\nNhap he so b: ");
  scanf("%f", pb);
}

void xacDinhNghiem(float a, float b) {
  if(a==0){
    if(b==0){
      printf("\nPhuong trinh co vo so nghiem!");
    }else{
      printf("\nPhuong trinh vo nghiem!");
    }
  }else{
    printf("\nPhuong trinh co nghiem x = %g",-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;
}
» Tiếp: Đệ quy (Recursion)
« Trước: Lời gọi hàm (Call Function)
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!