Ở thời điểm này, bạn đã có thể thực hiện được các phép toán cơ bản. Để nâng cao hơn một chút, mình sẽ hướng dẫn thêm cho bạn một số hàm toán học cơ bản. Bên cạnh đó, nhân tiện chúng ta đang làm việc với các phép toán, mình sẽ trình bày chi tiết hơn một xíu về độ ưu tiên của các phép toán. Qua đó bạn có thể nắm vững hơn và có thể vận dụng các phép toán một cách tốt hơn.
Độ ưu tiên của các phép toán
Độ ưu tiên của các phép toán là gì?
Trong bài trước, bạn đã được học về biểu thức và các phép toán. Tuy nhiên để hiểu cho đúng một biểu thức được thực hiện như thế nào thì bạn cần phải nắm được phép toán nào sẽ thực hiện trước, phép toán nào sẽ thực hiện sau. Thứ tự thực hiện của các phép toán trong một biểu thức được gọi là độ ưu tiên của các phép toán.
➤ Ví dụ: Ở cấp tiểu học, bạn hay được hướng dẫn rằng “nhân chia trước, cộng trừ sau“. Thì trong lập trình cũng vậy, với các toán tử số học thì toán tử nhân (gồm “*” và “/“) sẽ được thực hiện trước toán tử cộng (gồm “+” và “–“). Điều đó cho thấy rằng toán tử nhân có độ ưu tiên cao hơn toán tử cộng. Bạn lưu ý là toán tử cộng ở đây là toán tử hai ngôi nhé, khác với dấu “+” và “–” trong toán tử một ngôi. Nếu nói tới toán tử một ngôi thì toán tử một ngôi sẽ có độ ưu tiên cao hơn toán tử nhân.
Độ ưu tiên và thứ tự kế hợp của các phép toán
Dưới đây là bảng liệt kê độ ưu tiên và thứ tự kết hợp của các phép toán.
➤ Lưu ý: Trong bảng liệt kê ở trên có một số toán tử có ký hiệu giống nhau nhưng ngữ nghĩa khác nhau. Chẳng hạn như:
- Toán tử “–” biểu diễn số âm (là toán tử một ngôi) có độ ưu tiên là 3. Còn phép trừ, có ký hiệu “–” lại có độ ưu tiên là 5.
- Toán tử “&” được dùng để lấy địa chỉ của ô nhớ có độ ưu tiên là 3. Còn phép AND, có ký hiệu “&” lại có độ ưu tiên là 9.
- Toán tử “*” để lấy về đối tượng của một con trỏ có độ ưu tiên là 3. Còn phép nhân, có ký hiệu “*” lại có độ ưu tiên là 4.
➤ Ví dụ: Xét ví dụ sau về độ ưu tiên
- Có cùng độ ưu tiên (trái qua phải)
- Độ ưu tiên khác nhau, phép toán trong dấu ngoặc được ưu tiên xử lý trước
- Bạn cũng cần cẩn thận khi kết hợp các phép toán có kiểu dữ liệu khác nhau
- Thứ tự kết hợp từ phải qua trái
Có thể nhìn các ví dụ trên cũng không quá khó khăn, nhưng khi làm sẽ rất dễ khiến cho bạn bị nhầm. Vì vậy bạn hãy lưu ý phần này để các phép toán của bạn có được kết quả như mong muốn.
Hàm toán học cơ bản
Đối với các phép toán thông thường, bạn có thể sử dụng các toán tử số học để thực hiện. Nhưng những phép toán có mức độ phức tạp hơn như: Luỹ thừa, lấy căn, tính sin/cos, … thì sao? Chắc chắn bạn vẫn sẽ tự tính toán được chỉ bằng những toán tử số học, nhưng sẽ rất phức tạp và mất thời gian. Để tiết kiệm thời gian cho bạn, C++ đã cung cấp sẵn các hàm toán học để giúp bạn thực hiện các phép tính như vậy.
Trước tiên, để sử dụng được các hàm số học, bạn cần khai báo thêm thư việc cmath như sau:
Đây là thư viện cung cấp cho bạn một số hàm toán học cơ bản. Bạn hãy nhớ là khai báo thư viện thì nên đặt ở trên cùng file source code nhé. Dưới đây là một số hàm mà thư việc cmath cung cấp cho bạn:
Hàm tính luỹ thừa – pow
pow là hàm giúp bạn tính giá trị luỹ thừa của một số nào đó.
Cú pháp
Hàm pow có nhiều dạng thức thể hiện, cú pháp trên là 03 dạng thức phổ biến hay được sử dụng. Có thể ở thời điểm này đối với bạn mới học lập trình sẽ chưa hiểu rõ các cú pháp trên. Nhưng bạn đừng lo lắng, mình sẽ giải thích tạm một cú pháp thế này:
Với chú thích trên, không biết bạn đã hiểu ra được điều gì chưa? Mình diễn giải lại thế này nhé: “hàm trên có tên là pow, hàm này cần bạn truyền vào một cơ số có kiểu float, và số mũ cũng có kiểu float. Hàm này sẽ thực hiện tính luỹ thừa dựa trên cơ số và số mũ mà bạn truyền vào. Kết quả thực hiện được sẽ là một giá trị có kiểu float.”
Ví dụ
Mình sẽ thử sử dụng hàm pow ở trên bằng 02 cách như sau:
Bạn hãy chú ý dòng số 10 nhé, đây là một cách dùng của hàm pow. Tại dòng này mình gọi hàm pow và truyền vào 02 biến coSo và soMu đã được khai báo ở dòng số 8. Hàm pow sẽ thực hiện tính luỹ thừa dựa vào giá trị của coSo và soMu mà bạn truyền vào. Kết quả thực hiện được sẽ trả ra và gán vào biến ketQua.
Tương tự bạn hãy để ý dòng số 13 nhé, đây là cách dùng khác của hàm pow. Cách này mình truyền trực tiếp giá trị vào hàm pow mà không cần thông qua biến nào cả. Bạn có thể thấy giá trị thứ nhất là 3 và giá trị thứ hai là 9, có nghĩa là tính 3 luỹ thừa 9. Kết quả thực hiện được cũng không cần gán vào biến nào cả mà in trực tiếp ra màn hình thông qua lệnh cout.
Hy vọng với cách giải thích trên bạn có thể hiểu được cách sử dụng hàm. Những hàm mình giới thiệu tiếp theo cũng sẽ sử dụng tương tự như vậy. Do đó những hàm bên dưới mình sẽ không nói lại cách dùng nữa nhé.
Hàm tính căn bậc 2 – sqrt
sqrt là hàm tính căn bậc hai của một số nào đó mà bạn truyền vào. Cú pháp như sau:
Hàm sqrt sẽ thực hiện tính căn bậc hai của tham số arg truyền vào. Cách dùng tương tự hàm pow, do đó mình sẽ không giải thích lại nữa nhé.
➤ Ví dụ:
Sau khi chạy thử, bạn sẽ nhận được kết quả như sau:
Hàm lấy giá trị tuyệt đối – abs
abs là hàm lấy giá trị tuyệt đối của một số nguyên nào đó. Cú pháp như sau:
Hàm abs sẽ thực hiện tính giá trị tuyệt đối của tham số n truyền vào. Ví dụ:
Sau khi chạy thử, bạn sẽ nhận được kết quả như sau:
Hàm lượng giác – sin | cos | tan
Đây là nhóm các hàm được sử dụng để tính các giá trị lượng giác của một góc nào đó.
➤ Cú pháp hàm sin
➤ Cú pháp hàm cos
➤ Cú pháp hàm tan
Cả ba hàm trên đều thực hiện tính giá trị lượng giác của một góc arg nào đó được truyền vào. Ví dụ:
Sau khi chạy thử, bạn sẽ nhận được kết quả như sau:
Tổng kết
Nội dung bài viết này tạm có thể xem như phần cuối cùng trong chuỗi bài viết về nhập môn lập trình C++. Sau bài viết này mình sẽ đưa ra một số bài tập thực hành để tổng kết lại kiến thức của cả 07 bài vừa qua. Trước đó, bạn hãy xem lại các bài học đã nhé. Nếu có gì không hiểu thì hãy cứ mạnh dạn comment bên dưới bạn nhé.