Trước khi có định nghĩa chính thức về hàm-function, chúng ta xét một ví dụ:
Lấy ví dụ trong phần trước, một chương trình đóng mở mái che vườn rau tự động.
Chúng ta tạm hình dung cấu trúc của chương trình với "phong cách" của chương trình tào lao như sau:
if(Trời nắng to){
Đóng mái che
Đo nhiệt độ
Đo độ ẩm không khí
Tưới rau
}
else if(Trời nắng nhẹ){
Mở mái che
Đo nhiệt độ
Đo độ ẩm không khí
Tưới rau
}
else if(Trời mưa to){
Đóng mái che
Đo nhiệt độ
Đo độ ẩm không khí
Ngừng tưới rau
}
else if(Trời mưa nhẹ){
Mở mái che
Đo nhiệt độ
Đo độ ẩm không khí
Ngừng tưới rau
}
else{
//Code else-Làm một việc gì khác
}
Ta sẽ thấy rằng việc đo nhiệt độ, tưới rau, đóng mở mái...cứ lặp đi lặp lại rất nhiều lần. Nếu đây là một việc lặp đi lặp lại hàng trăm lần thì công việc lập trình thật sự trở nên rất nhàm chán...Từ đây khái niệm về Hàm-Function ra đời.
Hàm (function) là một nhóm các câu lệnh cùng nhau thực hiện một nhiệm vụ, một chức năng nào đó.
Cú Pháp :
data_type function_name(type1 parameter1, type2 parameter2...){
//code
}
Trong đó:
- data_type : Kiểu trả về của hàm, có thể là các kiểu dữ liệu như int, long long, float, char, double, hoặc void
- function_name : Tên của hàm, cần tuân theo quy tắc như đặt tên biến
- parameter : Tham số của hàm, đây được coi như đầu vào của hàm. Bạn có thể xây dựng bao nhiêu tham số tùy ý và lựa chọn kiểu dữ liệu cho từng tham số.
- code : Các câu lệnh bên trong của hàm
Lời Gọi Hàm
Sau khi xây dựng hàm xong để hàm có thể thực thi bạn cần gọi nó trong hàm main() và truyền cho nó tham số (parameter) nếu cần.
Khi bạn gọi hàm trong hàm main thì các câu lệnh bên trong hàm sẽ được thực thi, sau khi thực thi hết các câu lệnh thì hàm kết thúc và chương trình tiếp tục thực hiện các câu lệnh bên dưới hàm.
Để dễ hiểu, cần một ví dụ.
Ở các phần trước chúng ta đều viết mã nguồn C bên trong hàm main(), chương trình sẽ trở nên khó quản lý khi số lượng dòng code trở nên lớn, chương trình có tên Tào Lao chính vì thực tế không ai lập trình như vậy!
Chúng ta sẽ phải nói lời tạm biệt chương trình tào lao, nhưng trước khi làm cái việc "bất đắc dĩ" đó, chúng ta tiếp tục thử với Hàm.
Ta sẽ viết một hàm tính Tổng của 3 số, sau đó ta sẽ dùng hàm đó để tính tổng của so4, so5 và so6.
Đây là hàm tinhTong
int tinhTong(int a, int b, int c){
int sum = a + b + c;
return sum;
}
Chúng ta tạm để nó ngay dưới phần khai báo biến.
Sau đó chúng ta sẽ gọi hàm này. Trước hết, ta gọi hàm tinhTong() để nó làm mọi thứ trong lặng lẽ.
tinhTong(so4,so5,so6);
Khi bấm Run để chạy chương trình, mọi thứ ổn, nhưng chúng ta không thấy gì khác lạ cả?? Đó là vì hàm trả về một số nguyên gọi là sum, và không in ra màn hình. Nếu muốn thấy khác lạ, chúng ta cần in nó ra màn hình.
Chúng ta tạo một biến và gán cho nó giá trị của tinhTong()
int so7 = tinhTong(so4,so5,so6);
Sau đó ta in biến so7 ra màn hình.
printf("Đây là biến có được từ hàm tinhTong %d \n", so7);
Khi bấm Run để chạy chương trình, ta đã thấy kết quả!
Đây là mã nguồn của chương trình tao lao
/* Đây là chương trình tào lao */
#include <stdio.h>
#include <math.h>
int main()
{
int so = 2024; // Đây là biến số
char namtoi[] = "Năm 2025"; // Đây là biến chuỗi
float a = 8.3462326543;
double b = 10.8745634535333;
int n;
char Ten;
int soTien;
int soNam;
int tongSoTien;
int x = 15 < 25 ? 100 : 200;
int diBien1= (10 < 20) && (20 >= 20);
int diBien2= (10 > 20) || (20 < 10);
so +=10;
long long so2 = so;
float so3 = 35.82;
int so4 = (int)so3 + 1;
int so5 = 2, so6 = 10;
int tinhTong(int a, int b, int c){
int sum = a + b + c;
return sum;
}
//tinhTong(so4,so5,so6);
int so7 = tinhTong(so4,so5,so6);
printf("Đây là biến có được từ hàm tinhTong %d \n", so7);
printf("Xin Chào ! \n");
printf("Rất vui gặp bạn!");
printf("Năm nay là %d \n", so);
printf("Năm tới là %s", namtoi);
printf("In 4 chữ số sau dấu phẩy : %.4f\n", a);
printf("In 5 chữ số sau dấu phẩy : %.5lf\n", b);
printf("Hãy nhập một số từ 1-100: ");
scanf("%d", &n);
printf("Gía trị của n là : %d\n", n);
printf("Nhap tên của bạn, chỉ một chữ A,B,C : ");
scanf(" %c", &Ten);
printf("Tên bạn là : %c\n", Ten);
printf("Hãy nhập số tiền gửi hàng tháng: ");
scanf("%d", &soTien);
printf("Hãy nhập tổng số năm đã tiết kiệm: ");
scanf("%d", &soNam);
tongSoTien = (soTien * 12) * soNam;
printf("Xin chào: %c, sau %d nam kien tri tich luy, ban da kiem đươc %d .Xin chuc mung ban!", Ten, soNam, tongSoTien);
printf("%d\n", x);
printf("%d, %d\n", diBien1,diBien2);
printf("%d ", 100 > 50);
printf("%d ", 20 <= 30);
printf("%d ", 80 >= 100);
printf("Gia tri cua bien so2 là %lld \n", so2);
printf("Gia trị so4 là %d \n", so4);
printf("%d ", (int)pow(so5, so6));
printf("Gia trị so3 ceil là %f \n", ceil(so3));
printf("Gia trị so3 floor là %f \n", floor(so3));
if (so % 2 == 0) {
printf("Bien so la so chan.");
} else {
printf("Bien so la so le.");
}
if (soTien < 0 || soTien >= 1000000) {
printf("Ban nen nhap so tu 1 den 1000000");
} else if (soTien > 0 && soTien < 700000) {
printf("Ban gui ít qua");
} else if (soTien >= 700000 && soTien < 800000) {
printf("Ban gui o muc trung binh");
} else if (soTien >= 800000 && soTien < 900000) {
printf("Ban gui tương doi nhieu");
} else if (soTien >= 900000 && soTien <= 1000000) {
printf("Ban gui nhieu qua!");
}
switch(so5){
case 1:
printf("MOT\n");
break;
case 2:
printf("HAI\n");
break;
case 3:
printf("BA\n");
break;
case 4:
printf("BON\n");
break;
//Neu n khong phai la 1, 2, 3, 4
default:
printf("MACDINH\n");
}
if(so % 2 == 0){
goto label;
}
printf("Xin Chao\n");
printf("Day la chuong trinh khong nhay toi label\n");
label:
printf("Dat Viet Lap Trinh\n");
printf("Lap Trinh C\n");
return 0;
}
Hàm trong lập trình C hoạt động như thế nào? Hình ảnh sau đây mô tả gọi một hàm do người dùng định nghĩa (tương tự như hàm tinhTong chúng ta vừa định nghĩa) bên trong hàm main(). Vì chương trình của chúng ta có tên là Tào Lao, nên ta cho tuốt mọi thứ vào hàm main(), thực tế lập trình, ta nên định nghĩa hàm ngoài main():
Khi một chương trình gọi một hàm, điều khiển chương trình được chuyển đến hàm được gọi. Một hàm được gọi thực hiện một nhiệm vụ đã định nghĩa và khi câu lệnh trả về của nó được thực hiện hoặc khi nó kết thúc bằng hàm đóng, nó sẽ trả về chương trình điều khiển quay trở lại chương trình chính.
Không có nhận xét nào:
Đăng nhận xét