Hàm trong c (Bài 7)

Hàm trong c nói riêng và trong các ngôn ngữ lập trình khác nói chung là phần xử lý được tạo ra để sử dụng lại.

Trong đoạn chương trình bên dưới phần xử lý nhập và kiểm tra số nguyên dương LẶP LẠI 3 LẦN, việc này dẫn đến một số vấn đề như: Viết xử lý (code) nhiều lần và khi có sự thay đổi thì phải thay đổi nhiều lần

#include <stdio.h>
main() {
 int x, y, z;
 //Nhập số thứ nhất
 do {
  printf("x = ");
  scanf("%d", &x);
 } while(x<0);
 //Nhập số thứ hai
 do {
  printf("y = ");
  scanf("%d", &y);
 } while(y<0);

 //Nhập số thứ ba
 do {
  printf("z = ");
  scanf("%d", &z);
 } while(z<0);

 int tong = x + y + z;
 printf("Tong 3 so la %d", tong);
}

Hướng giải quyết: Những xử lý giống nhau sẽ xây dựng thành một đoạn chương trình và đoạn chương trình này sẽ được sử dụng lại ở những yêu cầu tương tự và được gọi là hàm.

Hàm trong c – Hàm là gì

Hàm là một đoạn chương trình bao gồm một hoặc nhiều xử lý nhằm giải quyết một công việc nào đó và được xây dựng với mục đích TÁI SỬ DỤNG.

Như vậy trong một chương trình nếu có những xử lý giống nhau chúng ta nên xây dựng hàm.

Hàm có thể được xây dựng bởi lập trình viên hoặc hàm có sẵn trong ngôn ngữ lập trình. Ví dụ trong lập trình C, chúng ta có thể liệt kê các hàm có sẵn như printf, scanf, pow, sqrt,…

Hàm trong c – Hàm tự định nghĩa

Kiểu_Dữ_Liệu Tên_Hàm(Tham_Số_1, Tham_Số_2, ...) {
  Xử lý;
}

Giải thích

Kiểu dữ liệu có thể là int, long, float, double, char hoặc void. Đây chính là dữ liệu mà hàm có thể trả về (hay còn gọi là đâu ra – output).

Tên hàm phải là: động từ, không chứa khoảng trắng, không trùng từ khoá, không chứa ký tự đặc biệt và đặt tên có ý nghĩa.

Tham số là dữ liệu đầu vào của hàm và được khai báo theo cú pháp sau:

Kiểu_Dữ_Liệu  Tên_Tham_Số_1, Kiểu_Dữ_Liệu Tên_Tham_Số_2,...

Ví dụ: Xây dựng hàm tính tổng 2 số nguyên

Cách 1: Hàm không trả về giá trịkhông nhận tham số đầu vào

void tinhTong1() {
 int a, b, tong;
 printf("a = "); scanf("%d", &a);
 printf("b = "); scanf("%d", &b);

 tong = a + b;
 printf("Tong hai so la %d", tong);
}

Cách 2: Hàm nhận tham số đầu vào và không trả về giá trị

void tinhTong2(int a, int b) {
 int tong;
 tong = a + b;
 printf("Tong hai so la %d", tong);
}

Cách 3: Hàm trả về giá trịkhông nhận tham số đầu vào

int tinhTong3() {
 int a,b, tong;
 printf("Nhap so thu nhat a = "); scanf("%d", &a);
 printf("Nhap so thu hai b = "); scanf("%d", &b);
 tong = a + b;

 //Kết thúc hàm và trả về kết quả
 return tong;
}

Cách 4: Hàm trả về giá trịnhận tham số đầu vào

int tinhTong4(int a, int b) {
  int tong;
  tong = a + b;

  //Kết thúc hàm và trả về kết quả
  return tong;
}

Hàm trong c – Gọi hàm

Gọi hàm thông qua tên hàm và truyền tham số đầu vào hoặc xử lý kết quả trả về nếu có.

Gọi hàm tinhTong1 – Hàm không trả về giá trịkhông nhận tham số đầu vào

tinhTong1();

Gọi hàm tinhTong2 – Hàm nhận tham số đầu vào và không trả về giá trị

tinhTong(10, 20);

Lưu ý: Trong 10 tương ứng với a, 20 tương ứng với b, tức hàm xử lý tính tổng 10 và 20

Gọi hàm tinhTong3 – Hàm trả về giá trịkhông nhận tham số đầu vào 

int ketqua;
ketqua = tinhTong3();

Lưu ý: Vì hàm tinhTong3 trả về kết quả là tổng của 2 số nên lúc gọi hàm chúng ta phải khai báo biến và gán kết quả trả về từ hàm.

Gọi hàm tinhTong4 – Hàm trả về giá trịnhận tham số đầu vào

int ketqua;
ketqua = tinhTong4(1020, 4190);

Tương tự như hàm tinhTong3, khi gọi hàm tinhTong4 chúng ta phải xử lý kết quả trả về. Trong ví dụ trên, chúng ta thực hiện tính tổng 2 số 10204190. Kết quả tính toán được sẽ được gán vào biến ketqua.

Kết luận: Tuỳ vào mục đích hay yêu cầu cụ thể mà chúng ta sẽ xây dựng hàm phù hợp. Gọi hàm thông qua tên hàm và phải phù hợp với định nghĩa của hàm.

Hàm trong c – Một số lỗi thường gặp khi làm việc với hàm

1/ Gọi sai tên hàm.

2/ Gọi hàm không phù hợp với định nghĩa
3/ Hàm có nhận tham số nhưng khi gọi hàm thì không truyền tham số đầu vào

ketqua = tinhTong4();

4/ Truyền không đúng số lượng tham số

ketqua = tinhTong4(1502);

5/ Truyền tham số không phù hợp với kiểu dữ liệu lúc định nghĩa hàm

ketqua = tinhTong4(12.5, 20.9);

Hàm tinhTong4 chỉ nhận 2 tham số kiểu int nhưng khi gọi hàm chúng ta truyền 2 tham số kiểu số thực.

Hàm trong c – Tổng kết

  • Mục đích xây dựng hàm
  • Cú pháp xây dựng hàm trong lập trình c
  • Gọi hàm
  • Một số lưu ý khi làm việc với hàm

Hàm trong c – Bài tập thực hành

Bài thực hành số 1: Viết hàm tính chu vi và diện tích hình tròn

Bài thực hành số 2: Viết chương trình hỗ trợ người dùng thực hiện các phép tính gồm cộng, trừ, nhân và chia hai số

  • Nếu ký tự được nhập từ bàn phím là “+” thì phép tính cộng
  • Nếu ký tự được nhập từ bàn phím là “-” thì phép tính trừ
  • Nếu ký tự được nhập từ bàn phím là “*” thì phép tính nhân
  • Nếu ký tự được nhập từ bàn phím là “/” thì phép tính chia

Yêu cầu thực hiện:

  • Viết hàm tính tổng
  • Viết hàm tính trừ
  • Viết hàm tính nhân
  • Viết hàm tính chia

Xem giáo trình môn lập trình c

Trả lời