Thứ Ba, 9 tháng 4, 2024

14.Các hàm toán học thường dùng

Hàm là một nhóm các lệnh đi cùng nhau để thực hiện một nhiệm vụ nào đó. Mỗi chương trình C có ít nhất một hàm là hàm main(), và tất cả hầu hết các chương trình đều định nghĩa thêm các hàm.


Một khai báo hàm cho trình biên dịch biết về tên, kiểu trả về và các tham số của hàm. Định nghĩa hàm cung cấp phần thân thực của hàm.

Thư viện chuẩn C cung cấp nhiều hàm được tích hợp sẵn mà chương trình của bạn có thể gọi. Từ từ chúng ta sẽ xem xét các hàm trong C. Trong quá trình lập trình việc sử dụng các hàm toán học là thường xuyên nhất, ngôn ngữ C cung cấp cho bạn một thư viện là math.h chứa các hàm toán học. Càng "vọc" nhiều hàm toán học, bạn sẽ càng dễ dàng trong việc lập trình không những ngôn ngữ C mà là nhiều ngôn ngữ trong tương lai.

Các hàm toán học trong thư viện math.h đều có tham số là một số thuộc kiểu double và có kiểu trả về là double, chúng ta chỉ cần nhớ một vài hàm được sử dụng thường xuyên. 



STTHàmChức năng
1pow(x, y)Trả về xy
2sqrt(x)Trả về căn bậc 2 của x
3cbrt(x)Trả về căn bậc 3 của x
4ceil(x)Trả về số nguyên nhỏ nhất lớn hơn hoặc bằng x, tương đương phép làm tròn lên
5floor(x)Trả về số nguyên lớn nhất nhỏ hơn hoặc bằng x, tương đương phép làm tròn xuống
6round(x)Trả về số nguyên gần x nhất phụ thuộc phần thập phân
7fabs(x)Trả về trị tuyệt đối của số x
8exp(x)Trả về ex
9fmod(x, y)Trả về số dư khi chia x cho y
10log(x)Trả về logarit tự nhiên của x
11log10(x)Trả về logarit thập phân của x
12cos(x)Trả về giá trị hàm cos với x là radian
13sin(x)Trả về giá trị hàm sin với x là radian
14tan(x)Trả về giá trị hàm tan với x là radian
15acos(x)Trả về giá trị hàm arccos với x là radian
16asin(x)Trả về giá trị hàm arcsin với x là radian
17atan(x)Trả về giá trị hàm arctan với x là radian


Chúng ta sẽ tiếp tục thử với một vài hàm quan trọng trên chương trình tào lao của chúng ta.

Lưu ý về Các lệnh tiền xử lý: Ngoài dòng lệnh đã quen thuộc #include <stdio.h>, chúng ta cần thêm #include <math.h>


Hàm pow(x,y) : Trả về lũy thừa  xy, hàm này trả về số thực double nên nếu bạn muốn tính lũy thừa với x và y nguyên thì cần lưu kết quả dưới dạng số nguyên hoặc ép kiểu khi in ra.

Thêm hai biến so5 và so6 như sau:

int so5 = 2, so6 = 10;


Dùng lệnh printf để xem kết quả

printf("%d ", (int)pow(so5, so6));


Chương trình của chúng ta:

/* Đâ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;

 
    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));


    return 0;
}

Bấm Run để chạy thử, ta sẽ có kết quả của 2 lũy thừa 10 bằng 1024.

 


 

Hàm sqrt(x) : Tính căn bậc 2 của x. Có lẽ chúng ta cũng không cần thiết phải thử hàm này vì nó không hề khó hiểu.

Hàm ceil(x) : Trả về số nguyên khi làm tròn phần thập phân của x lên, ví dụ x là 3.4 hay 3.7 thì khi sử dụng hàm ceil ta sẽ thu được số 4.

Chúng ta sẽ thử với một biến trong chương trình tào lao, đó là biến so3. Thêm lệnh printf sau vào chương trình:

printf("Gia trị so3 ceil là %f \n", ceil(so3));

Bấm Run để chạy chương trình, kết quả biến so3 đã được làm tròn LÊN thành 36.



Hàm floor(x) : Trả về số nguyên khi làm tròn phần thập phân của x xuống, ví dụ x là 3.4 hay 3.7 thì khi sử dụng hàm ceil ta sẽ thu được số 3.

Chúng ta sẽ thử với một biến trong chương trình tào lao, đó là biến so3. Thêm lệnh printf sau vào chương trình:

 

printf("Gia trị so3 floor là %f \n", floor(so3));

 

Bấm Run để chạy, ta sẽ thấy giờ đây biến so3 đã được làm tròn XUỐNG thành 35.



Có một vấn đề, một câu hỏi mà chúng ta thỉnh thoảng sẽ cảm thấy bối rối:

Sự khác nhau giữa Hàm -FunctionToán tử - Operator trong C là gì?

Đôi khi chúng ta cũng không để ý, nhưng đôi khi bỗng nhiên chúng ta cảm thấy bối rối với hai khái niệm này. Nếu tìm kiếm câu trả lời, bạn sẽ tìm thấy rất nhiều câu trả lời khác nhau cho vấn đề tưởng chừng đơn giản này. Cá nhân chúng tôi nghĩ rằng tạm thời chúng ta không cần quá bận tâm, miễn là chúng ta hiểu lúc nào cần phải sử dụng toán tử nào, lúc nào cần sử dụng hàm nào, cú pháp ra sao...Từ từ bạn sẽ dần quen thuộc và thấy mọi chuyện dễ dàng hơn.

Quay lại với câu hỏi: Sự khác nhau giữa Hàm -Function và Toán tử - Operator trong C là gì. Suy cho cùng, toán tử cũng chính là một hàm. Ví dụ, khi chúng ta sử dụng toán tử cộng (+) để cộng hai số với nhau, máy tính thực ra sẽ hiểu y như khi chúng ta gọi một hàm nào đó: phải làm bước 1 thế này...làm bước 2 thế này...Trong thực tế nếu tìm hiểu sâu hơn chúng ta có thể thấy rằng một toán tử như phép cộng (+) sẽ được dịch thành một lệnh của trình biên dịch mã sẽ được CPU thực thi Trực tiếp. Nó cũng sẽ là một phần của cú pháp. Mặt khác, một hàm là một chương trình
con mà chương trình chính sẽ nhảy tới trong khi thực thi. Một khung ngăn xếp mới được phân bổ, các giá trị thanh ghi được lưu, các tham số được truyền và chỉ khi đó hàm mới được thực thi. 

 

Phần tiếp theo

Phần trước

Không có nhận xét nào:

Đăng nhận xét