Các toán tử số học (Arithmetic Operators)

Một phần của tài liệu Giáo trình môn ngôn ngữ lập trình c (Trang 31 - 38)

Những toán tử số học được sử dụng để thực hiện những thao tác mang tính số học. Chúng được chia thành hai lớp : Toán tử số học một ngôi (unary) và toán tử số học hai ngôi (binary).

Bảng 2.2 liệt kê những toán tử số học và chức năng của chúng.

Các toán tử một ngôi Chức năng Các toán tử hai ngôi Chức năng

- Lấy đối số + Cộng

++ Tăng một giá trị - Trừ

-- Giảm một giá trị * Nhân

% Lấy phần dư

/ Chia

^ Lấy số mũ

Bảng 2.2: Các toán tử số học và chức năng

Các toán tử hai ngôi

Trong C, các toán tử hai ngôi có chức năng giống như trong các ngôn ngữ khác. Những toán tử như +, -, * và / có thể được áp dụng cho hầu hết kiểu dữ liệu có sẵn trong C. Khi toán tử / được áp dụng cho một số nguyên hoặc ký tự, bất kỳ phần dư nào sẽ được cắt bỏ. Ví dụ, 5/2 sẽ bằng 2 trong phép chia số nguyên. Toán tử % sẽ cho ra kết quả là số dư của phép chia số nguyên. Ví dụ: 5%2 sẽ có kết quả là 1. Tuy nhiên, % không thể được sử dụng với những kiểu có dấu chấm động.

Chúng ta hãy xem xét một ví dụ của toán tử số mũ.

9^2

Ở đây 9 là cơ số và 2 là số mũ.

Số bên trái của ‘^’ là cơ số và số bên phải ‘^’ là số mũ.

Kết quả của 9^2 là 9*9 = 81.

Thêm ví dụ khác:

5 ^ 3 Có nghĩa là:

10 Lập trình cơ bản C

5 * 5 * 5

Do đó: 5 ^ 3 = 5 * 5 * 5 = 125.

Ghi chú: Những ngôn ngữ lập trình như Basic, hỗ trợ toán tử mũ. Tuy nhiên, ANSI C không hỗ trợ ký hiệu ^ cho phép tính lũy thừa. Ta có thể dùng cách khác tính lũy thừa trong C là dùng hàm pow() đã được định nghĩa trong math.h. Cú pháp của nó thể hiện qua ví dụ sau:

...

#include<math.h>

void main(void) {

….

/* the following function will calculate x to the power y. */

z = pow(x, y);

….

}

Ví dụ sau trình bày tất cả toán tử hai ngôi được dùng trong C. Chú ý rằng ta chưa nói về hàm printf() và getchar(). Chúng ta sẽ bàn trong những phần sau.

Ví dụ 4:

#include<stdio.h>

main() {

int x,y;

x = 5;

y = 2;

printf("The integers are : %d & %d\n", x, y);

printf("The addition gives : %d\n", x + y);

printf("The subtraction gives : %d\n", x - y);

printf("The multiplication gives : %d\n", x * y);

printf("The division gives : %d\n", x / y);

printf("The modulus gives : %d\n", x % y);

getchar();

}

Kết quả là:

The integers are : 5 & 2 The addition gives : 7 The subtraction gives : 3 The multiplication gives : 10 The division gives : 2 The modulus gives : 1

Các toán tử một ngôi (unary)

Các toán tử một ngôi là toán tử trừ một ngôi ‘-’, toán tử tăng ‘++’ và toán tử giảm ‘--’

Toán tử trừ một ngôi

Biến và Kiểu dữ liệu 11

Ký hiệu giống như phép trừ hai ngôi. Lấy đối số để chỉ ra hay thay đổi dấu đại số của một giá trị. Ví dụ:

a = -75;

b = -a;

Kết quả của việc gán trên là a được gán giá trị -75 và b được gán cho giá trị 75 (-(- 75)). Dấu trừ được sử dụng như thế gọi là toán tử một ngôi vì nó chỉ có một toán hạng.

Nói một cách chính xác, không có toán tử một ngôi + trong C. Vì vậy, một lệnh gán như.

invld_pls = +50;

khi mà invld_pls là một biến số nguyên là không hợp lệ trong chuẩn của C. Tuy nhiên, nhiều trình biên dịch không phản đối cách dùng như vậy.

Các toán tử Tăng và Giảm

C bao chứa hai toán tử hữu ích mà ta không tìm thấy được trong những ngôn ngữ máy tính khác. Chúng là ++--. Toán tử ++ thêm vào toán hạng của nó một đơn vị, trong khi toán tử - - giảm đi toán hạng của nó một đơn vị.

Cụ thể:

x = x + 1;

có thể được viết là:

x++;

và:

x = x - 1;

có thể được viết là:

x--;

Cả hai toán tử này có thể đứng trước hoặc sau toán hạng, chẳng hạn:

x = x + 1;

có thể được viết lại là x++ hay ++x;

Và cũng tương tự cho toán tử --.

Sự khác nhau giữa việc xử lý trước hay sau trong toán tử một ngôi thật sự có ích khi nó được dùng trong một biểu thức. Khi toán tử đứng trước toán hạng, C thực hiện việc tăng hoặc giảm giá trị trước khi sử dụng giá trị của toán hạng. Ðây là tiền xử lý (pre-fixing). Nếu toán tử đi sau toán hạng, thì giá trị của toán hạng được sử dụng trước khi tăng hoặc giảm giá trị của nó.

Ðây là hậu xử lý (post-fixing). Xem xét ví dụ sau : a = 10;

b = 5;

c = a * b++;

12 Lập trình cơ bản C

Trong biểu thức trên, giá trị hiện thời của b được sử dụng cho tính toán và sau đó giá trị của b sẽ tăng sau. Tức là, c được gán 50 và sau đó giá trị của b được tăng lên thành 6.

Tuy nhiên, nếu biểu thức trên là:

c = a * ++b;

thì giá trị của c sẽ là 60, và b sẽ là 6 bởi vì b được tăng 1 trước khi thực hiện phép nhân với a, sau đó giá trị được gán vào c.

Trong trường hợp mà tác động của việc tăng hay giảm là riêng lẻ thì toán tử có thể đứng trước hoặc sau toán hạng đều được.

Hầu hết trình biên dịch C sinh mã rất nhanh và hiệu quả đối với việc tăng và giảm giá trị. Mã này sẽ tốt hơn so với khi ta dùng toán tử gán. Vì vậy, các toán tử tăng và giảm nên được dùng bất cứ khi nào có thể.

Biến và Kiểu dữ liệu 13

Tóm tắt bài học

 Thông thường, khi chương trình ứng dụng cần xử lý dữ liệu, nó cần có nơi nào đó để lưu trữ tạm thời dữ liệu này. Nơi mà dữ liệu được lưu trữ gọi là bộ nhớ.

 Các ngôn ngữ lập trình hiện đại ngày nay cho phép chúng ta sử dụng các tên tượng trưng gọi là biến (variable), dùng để chỉ đến một vùng trong bộ nhớ nơi mà các giá trị cụ thể được lưu trữ.

 Không có giới hạn về số vị trí bộ nhớ mà một chương trình có thể dùng.

 Một hằng (constant) là một giá trị không bao giờ bị thay đổi.

 Tên của các biến (variable), các hàm (function), các nhãn (label) và các đối tượng khác nhau do người dùng định nghĩa gọi là định danh.

 Tất cả ngôn ngữ dành một số từ nhất định cho mục đích riêng. Những từ này được gọi là là “từ khóa” (keywords).

 Các kiểu dữ liệu chính của C là character, integer, float, double và void.

 Một bổ từ được sử dụng để thay đổi kiểu dữ liệu cơ bản sao cho phù hợp với nhiều tình huống đa dạng. Các bổ từ được sử dụng trong C là signed, unsigned, long short.

 C hỗ trợ hai loại toán tử số học: một ngôi và hai ngôi.

 Toán tử tăng ‘++’ và toán tử giảm ‘--’ là những toán tử một ngôi. Nó chỉ hoạt động trên biến kiểu số.

 Toán tử hai ngôi số học là +, -, *, /, %, nó chỉ tác động lên những hằng số, biến hay biểu thức.

 Toán tử phần dư ‘%’ chỉ áp dụng trên các số nguyên và cho kết quả là phần dư của phép chia số nguyên.

14 Lập trình cơ bản C

Kiểm tra tiến độ học tập

1 C có phân biệt chữ thường và hoa. (True / False)

2 Số 10 là một _______________.

3 Ký tự đầu của định danh có thể là một số. (True / False)

4 Dùng kiểu _________ sẽ tiết kiệm bộ nhớ do nó chiếm chỉ nửa không gian nhớ so với _________.

5 Kiểu dữ liệu _______ được dùng để chỉ cho trình biên dịch C biết rằng không có giá trị nào được trả về.

6 _______ và _______ là hai nhóm toán tử số học.

A. Bitwise & và | B. Một ngôi và hai ngôi C. Luận lý AND D. Không câu trả lời nào cả 7 Các toán tử một ngôi số học là __ và __.

A. ++ và -- B. % và ^

C. ^ và $ D. Không câu trả lời nào cả

Biến và Kiểu dữ liệu 15

Bài tập tự làm

1. Chọn tương ứng cho cột A và B:

Cột A Cột B

8 10.34

ABC abc

23

12112134.86868686886 _A1

$abc

‘A’

Tên định danh sai

Hằng số nguyên Hằng ký tự

Double Số chấm động Tên định danh đúng

Hướng dẫn : Nhiều mục trên cột A có thể tương ứng tới một mục đơn tại cột B.

2. Tính giá trị của các biến sau mỗi câu lệnh dưới đây:

a. int a = 4^4 b. int a = 23.34 c. a = 10

b = a + a++

d. a = -5 b = -a

Biến,Toán tử và Kiểu dữ liệu 41

Bài 3 Biến, Toán tử và Kiểu dữ liệu

Mục tiêu:

Kết thúc bài học này, bạn có thể:

 Sử dụng biến, kiểu dữ liệu và biểu thức số học.

Một phần của tài liệu Giáo trình môn ngôn ngữ lập trình c (Trang 31 - 38)

Tải bản đầy đủ (PDF)

(284 trang)