Lập trình 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

Các hàm thường giao tiếp hay gọi đến nhau bằng lời gọi hàm (call function). Việc giao tiếp hay gọi đến nhau của các hàm thông qua cách truyền tham số.

Các tham số được truyền theo một trong hai cách sau đây:

Truyền bằng tham trị (hay giá trị)

Ý nghĩa: Đây là lời gọi hàm mà trong đó đối số thực sự không thay đổi giá trị sau khi hàm được gọi thực hiện xong công việc. Truyền bằng tham trị là lời gọi mặc định của các chương trình C.

* Bản chất của truyền bằng tham chiếu là truyền địa chỉ của biến.

* Ý nghĩa: cách gọi hàm bằng truyền tham chiếu có thể làm thay đổi giá trị của đối số thực sự. Việc truyền tham chiếu được thực hiện thông qua biện pháp con trỏ.

Cú pháp:

Kiểu_dữ_liệu  Tên_hàm(Kiểu _dữ_liệu *Tên_con_trỏ_1, Kiểu_dữ_liệu *Tên_con_trỏ_2,…) {
    Khối_lệnh;
}
void main() {
    Kiểu_dữ_liệu Biến_1;
    Kiểu_dữ_liệu Biến_2;
    …
    Tên_hàm(&Biến_1,&Biến_2,…);
    …
}

Ví dụ:

Ví dụ 1: Viết một hàm có nhiệm vụ hoán đổi giá trị của hai số x và y cho nhau với x và y nhập vào từ bàn phím.

+ Nếu không dùng phương pháp tham chiếu thì chương trình sẽ không thực hiện được mục đích, tức là hai số x và y vẫn giữ nguyên giá trị sau lời gọi hàm. Chương trình được viết như sau:

#include<stdio.h>

void hoanVi(float x, float y) {
  int z;
  z=x;  //Cách khác: x=x+y;
  x=y;  //y=x-y; //y= (x+y)-y = x
  y=z;  //x=x-y; //x= (x+y)-x = y
}

int main() {
  float x, y;
  printf("Nhap 2 so x, y: ");
  scanf("%f %f",&x,&y);
  hoanVi(x, y);
  printf("\nSau khi tien hanh doi, ta duoc: x=%f va y=%f", x, y);

  return 0;
}

+ Nếu dùng phương pháp tham chiếu thì chương trình sẽ thực hiện được mục đích, x và y sẽ hoán đổi giá trị cho nhau. Chương trình được viết như sau:

#include<stdio.h>

void DoiGT(float *x, float *y) {
  int z;
  z=*x;  //Cách khác:   *x=*x+*y;
  *x=*y;  //*y=*x-*y; //*y= (*x+*y)-*y = *x
  *y=z;  //*x=*x-*y;  //*x= (*x+*y)-*x = *y
}

int main() {
  float x, y;
  printf("\nNhap 2 so x, y: ");
  scanf("%f %f", &x, &y);
  DoiGT(&x,&y);
  printf("\nSau khi tien hanh hoan vi, ta duoc: x=%g va y=%g", x, y);

  return 0;
}

Kết quả:

Lời gọi hàm - Hoán vị

Ví dụ 2: Viết chương trình nhập vào 3 giá trị kiểu thực (float hoặc double), sau đó tìm giá trị lớn nhất trong 3 giá trị đó. Yêu cầu:

· Phải viết chương trình dưới dạng các hàm.

· Không được sử dụng các biến tổng thể (biến toàn cục).

+ Theo yêu cầu trên thì ta phải có 3 biến để lưu 3 giá trị muốn so sánh và các biến này phải là các biến địa phương khai báo trong các hàm. Vì hàm main() là hàm chính của chương trình nên ta sẽ khai báo các biến trong hàm main(), và vì chương trình được viết dưới dạng các hàm nên ta khai báo thêm các con trỏ ứng với các biến đó.

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

#include<stdio.h>

void nhap(float *a, float *b, float *c) { //hàm nhp các s a, b và c
  printf("\nNhap a: ");
  scanf("%f", a);
  printf("\nNhap b: ");
  scanf("%f", b);
  printf("\nNhap c: ");
  scanf("%f", c);
}

float sosanh(float a, float b, float c) { //hàm tìm giá tr ln nht
  float max; //biến lưu li giá tr ln nht
  max = a; //gi s a là s ln nht
  if(max < b) //nếu b ln hơn max
  max = b; //thì gán b cho max
  if(max < c) //nếu c ln hơn max
  max = c; //thì gán c cho max
  return max; //tr li giá tr ln nht lưu trong biến max
}

int main() {
  float a, b, c; //khai báo 3 biến a, b, c
  float max; //khai báo biến lưu tr giá tr ln nht
  nhap(&a,&b,&c);  //Gi hàm nhap() truyn đi số ở dng tham chiếu
  max=sosanh(a,b,c); //Gi và gán giá tr tr v ca hàm sosanh() cho biến max
  printf("\nSo lon nhat trong 3 so nhap vao la: %g", max);

  return 0;
}

Kết quả:

Lời gọi hàm - số lớn nhất trong ba số

Chú ý: Mọi hàm nhập giá trị cho các biến địa phương (cục bộ) đều được truyền theo phương pháp tham chiếu theo mẫu chương trình như trên.

» Tiếp: Biến tổng thể và biến cục bộ
« Trước: Hàm (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 !!!