Ngôn ngữ lập trình C là gì? Kiến thức về ngôn ngữ C căn bản

By 30/06/2021Tháng Bảy 5th, 2021C/C++, KIẾN THỨC LẬP TRÌNH

Nội dung

C (ngôn ngữ lập trình) được ứng dụng phổ biến nhờ sự đơn giản và linh hoạt của nó. Vậy các lệnh cơ bản trong lập trình C là gì? Hãy cùng Ironhack tìm hiểu tổng quan kiến thức về ngôn ngữ lập trình C cơ bảnnhé!

1. Từ khóa và Định danh

Kiến thức đầu tiên khi học ngôn ngữ lập trình C là kiến thức về từ khóa. Các từ dành riêng cho lập trình C là một phần của cú pháp. Bên cạnh đó, bạn cũng có thể tìm hiểu thêm về các định danh và cách đặt tên cho chúng.

Đầu tiên hãy tìm hiểu Bộ ký tự sẽ được sử dụng trong ngôn ngữ lập trình C.

ngon ngu lap trinh c

Cùng Ironhack học ngôn ngữ lập trình C cơ bản

1.1 Bộ ký tự

Bột ký tự là tập hợp bảng chữ cái, các chữ cái và một số ký tự đặc biệt tồn tại trong ngôn ngữ lập trình C.

Bảng chữ cái

  1. Chữ hoa: A B C …………………………….. X Y Z
  2. Chữ thường: a b c ……………………………….. x y z
  3. Ngôn ngữ C chấp nhận cả chữ cái thường và chữ in hoa như là các biến và hàm.

Chữ số

Bao gồm các số nguyên dương: 0 1 2 3 4 5 6 7 8 9

Các ký tự đặc biệt

Các ký tự đặc biệt trong ngôn ngữ lập trình C

, < > . _
( ) ; $ :
% [ ] # ?
& { }
^ ! * / |
\ ~ +

Khoảng trắng

Khoảng trống, thêm dòng mới, tab ngang, dấu xuống dòng và nguồn cấp dữ liệu biểu mẫu.

1.2 Từ khóa trong ngôn ngữ lập trình C

Trong ngôn ngữ lập trình C, người ta sử dụng những từ dành riêng và được xác định từ trước, nhất là đối với trình biên dịch. Từ khóa là một phần của cú pháp và chúng không được sử dụng như là một định danh. Ví dụ như:

int money;

Ở đây, int là từ khóa thể hiện rằng money (tiền) là một biến kiểu int (kiểu số nguyên).

Vì ngôn ngữ C phân biệt chữ in hoa và chữ thường, do đó, tất cả các từ khóa phải được biết bằng chữ thường. Dưới đây là danh sách các từ khóa được sử dụng theo tiêu chuẩn ANSI C.

Từ khóa trong C (ngôn ngữ lập trình)

auto double int struct
break else long switch
case enum register typedef
char extern return union
continue for signed void
do if static while
default goto sizeof volatile
const float short unsigned

1.3 Định danh trong ngôn ngữ lập trình C

Định danh đề cập đến tên được đặt cho các thực thể như biến, hàm, cấu trúc,…

Định danh phải là duy nhất. Chúng tượng trưng cho một thực thể đã được xác định trong quá trình triển khai chương trình. Ví dụ:

int money;
double accountBalance;

Ở đây, money vàaccountBalance được xem là 2 định danh.

Lưu ý, tên định danh phải khác với từ khóa. Bạn không thể sử dụng int làm định danh bởi nó đã là một từ khóa rồi.

Quy tắc đặt tên định danh:

  • Các mã định danh hợp lệ có thể bao gồm chữ cái (cả chữ in hoa và chữ thường), chữ số và dấu gạch dưới.
  • Ký tự đầu tiên của mã định danh phải là một chữ cái hoặc một dấu gạch dưới
  • Bạn không thể sử dụng các từ khóa như int, while,… làm định danh
  • Không có bất cứ quy định nào về độ dài của mã định dạng. Tuy nhiên, bạn có thể gặp một vài sự cố trong trình biên dịch nếu mã định danh dài hơn 31 ký tự

Bạn có thể lựa chọn bất cứ tên nào làm định danh nếu chúng tuân thủ 4 điều trên. Tuy nhiên, nên đặt những tên có ý nghĩa đối với các định danh.

2. Biến, Hằng số và giá trị của hằng số

Trong phần tiếp theo của tài liệu học ngôn ngữ lập trình C, bạn sẽ được tìm hiểu về biến, các quy tắc đặt tên biến. Bên cạnh đó, bạn cũng sẽ biết thêm về các giá trị khác nhau trong ngôn ngữ C và cách tạo ra các hằng số.

2.1 Biến

Trong lập trình ngôn ngữ C cơ bản, một biến được xem là một container (vùng lưu trữ) dùng để chứa dữ liệu.

Để xác định vùng chứa dữ liệu, mỗi biến phải được đặt một tên duy nhất (định danh). Các tên biến chỉ mang tính tượng trưng cho vị trí của bộ nhớ. Ví dụ:

int playerScore = 95;

Trường hợp này, playerScore là một biến kiểu int. Và biến này được gán một giá trị số nguyên là 95.

Giá trị của một biến có thể được thay đổi tùy thuộc vào tên biến

char ch = 'a';
// some code
ch = 'l';

Quy tắc đặt tên biến

  • Tên biến chỉ có thể chứa các chữ cái (bao gồm chữ in hoa và chữ thường), chữ số và dấu gạch dưới.
  • Ký tự đầu tiên của một biến có thể là một chữ cái hoặc một dấu gạch dưới
  • Không có bất cứ quy định nào về độ dài của tên biến (định danh). Tuy nhiên, bạn có thể gặp một vài vấn đề lớn trong trình biên dịch nếu đặt tên biến dài hơn 31 ký tự

Lưu ý, bạn nên đặt những tên biến có ý nghĩa. Ví dụ như đặt firstNamesẽ tốt hơn là dùng mỗi fn

Ngôn ngữ C là một ngôn ngữ được định kiểu rõ ràng. Điều này có nghĩa là sau khi khai báo xong thì bạn không thể thay đổi được kiểu biến nữa. Ví dụ:

int number = 5;      // integer variable
number = 5.5;        // error
double number;       // error

Trường hợp này, kiểu của biến numberint. Bạn không thể gán giá trị dấu phẩy để biểu thị chữ số thập phân vào biến này được.

Ngoài ra, bạn không thể xác định lại kiểu dữ liệu của biến này thành double được. Để lưu trữ các giá trị thập phân trong lập trình C, bạn cần phải khai báo kiểu của nó là double hoặc float (dấu phẩy động).

2.2 Giá trị của hằng số

Giá trị của hằng số được dùng để biểu thị các giá trị cố định. Chúng được sử dụng trực tiếp trong các mã code. Ví dụ như: 1,2.5,‘c’,…

Trường hợp này, 1, 2,5, ‘c’,… được xem là giá trị của hằng số. Bởi bạn không thể chỉ định các giá trị khác cho những thuật ngữ này

a. Kiểu số nguyên

Một số nguyên là một giá trị chữ số, không có phần phân số hoặc hàm mũ. Có 3 loại giá trị số nguyên trong ngôn ngữ lập trình C như sau:

  • Hệ thập phân (cơ số 10)
  • Hệ bát phân (cơ số 8)
  • Hệ thập lục phân (cơ số 16)

Ví dụ:

Decimal: 0, -9, 22 etc
Octal: 021, 077, 033 etc
Hexadecimal: 0x7f, 0x2a, 0x521 etc

Trong lập trình C, hệ bát phân bắt đầu bằng số 0 và hệ thập lục phân bắt đầu bằng số 0x.

b. Chữ số dấu chấm động

Chữ số dấu chấm động là một chữ số có dạng phân số hoặc dạng lũy thừa. Ví dụ như:

-2.0
0.0000234
-0.22E-5

Lưu ý: E-5 = 10-5

c. Ký tự

Ký tự bằng chữ được tạo ra bằng cách đặt một ký tự độc lập bên trong dấu ngoặc kép. Ví dụ như: ‘a’,‘m’,‘F’,‘2’,‘}’ ,…

d. Chuỗi thoát

Đôi khi, bạn cần sử dụng các ký tự không định sẵn hoặc có ý nghĩa đặc biệt trong lập trình C. Ví dụ như dòng mới (Enter), tab, dấu chấm hỏi,…

Danh sách các chuỗi thoát và ký tự tương ứng:

Chuỗi thoát Ký tự
\b Phím Backspace
\f Nguồn cấp dữ liệu biểu mẫu
\n Dòng mới
\r Trở về
\t Tab ngang
\v Tab dọc
\\ Gạch chéo ngược
\’ Dấu ngoặc đơn
\” Dấu ngoặc kép
\? Dấu chấm hỏi
\0 Ký tự rỗng

Ví dụ: \n được sử dụng để thêm dòng mới. Dấu gạch chéo ngược \ giúp thoát khỏi cách xử lý thông thường của các ký tự đã được định sẵn trong trình biên dịch.

e. String Literal

String Literals là một chuỗi các ký tự được đặt trong dấu ngoặc kép. Ví dụ như:

“good” //string constant

“” //null string constant

” ” //string constant of six white space

“x” //string constant having a single character.

“Earth is round\n” //prints string with a newline

2.3 Hằng số

Nếu bạn muốn xác định một biến có giá trị không đổi, bạn có thể sử dụng từ khóa const. Ví dụ:

const double PI = 3.14;

Lưu ý, thêm từ khóa const vào

Trường hợp này, PI là một hằng số tượng trưng; giá trị của nó là không đổi.

const double PI = 3.14;

PI = 2.9; //Error

Bạn cũng có thể xác định hằng số bằng cách sử dụng chỉ thị tiền xử lý #define.

3. Các kiểu dữ liệu

Trong kiến thức học ngôn ngữ lập trình C cơ bản tiếp theo, bạn sẽ được tìm hiểu về các loại dữ liệu cơ bản như int, float, char,…

Trong lập trình C căn bản, kiểu dữ liệu chính là sự khai báo cho các biến. Điều này giúp xác định loại và kích thước của dữ liệu đã được liên kết với các biến. Ví dụ:

int myVar;

Trường hợp này, myVar là một biến kiểu int (integer). Kích thước của nó là 4 byte.

3.1 Các loại cơ bản

Dưới đây là các kiểu biến thường được dùng trong ngôn ngữ C căn bản:

Loại Kích thước (byte) Định dạng Định dạng

Loại Kích thước (bytes) Trình định dạng
int ít nhất 2, thường là 4 %d, %i
char 1 %c
float 4 %f
double 8 %lf
short int thường là 2 %hd
unsigned int ít nhất 2, thường là 4 %u
long int ít nhất 4, thường là 8 %ld, %li
long long int ít nhất 8 %lld, %lli
unsigned long int ít nhất 4 %lu
unsigned long long int ít nhất 8 %llu
signed char 1 %c
unsigned char 1 %c
long double ít nhất 10,thường là 12 hoặc 16 %Lf

int

Số nguyên bao gồm tất cả các số âm, số dương và số 0 mà không có phần thập phân. Ví dụ: 0, -5, 10

Chúng ta có thể sử dụng int để khai báo một biến số nguyên.

int id;

Trường hợp này, id là một biến kiểu số nguyên.

Bạn có thể khai báo nhiều biến cùng một lúc trong lập trình C. Ví dụ:

int id, tuổi;

Kích thước của biến Int thường là 4 byte (32 bit).

Kích thước của int thường là 4 byte (32 bit). Và, nó có thể có 232 trạng thái khác biệt từ -2147483648 đến 2147483647.

float và double

float và double được sử dụng để chứa các số thực.

float salary;

double price;

Trong lập trình C cơ bản, các số dấu phẩy động cũng có thể được biểu diễn theo cấp số nhân. Ví dụ,

float normalizationFactor = 22.442e2;

float và double khác nhau như thế nào?

Kích thước của float (kiểu dữ liệu float có độ chính xác đơn) là 4 byte. Còn kích thước của double (kiểu dữ liệu float chính xác kép) là 8 byte.

char

Từ khóa char được sử dụng để khai báo các biến kiểu ký tự. Ví dụ,

char test = ‘h’;

Kích thước của biến ký tự là 1 byte.

void

void là một loại không đầy đủ. Nó có nghĩa là “không có gì” hoặc “không có loại nào”. Nó giống như một hàm không trả về bất cứ kết quả nào.

Ví dụ, nếu một hàm không trả về bất cứ kết quả hay giá trị nào thì kiểu trả về của nó chính là void

Lưu ý rằng, bạn không thể tự tạo các biến kiểu void

short và long

Nếu bạn cần sử dụng một số lượng lớn, bạn có thể sử dụng một specifier loại long. Chẳng hạn như:

  • long a;
  • long long b;
  • long double c;

Các biến a và b đều lưu trữ các giá trị nguyên. Trong khi c có thể lưu trữ một số dấu phẩy động.

Nếu sử dụng một số nguyên nhỏ (phạm vi từ ([−32,767, +32,767]) thì bạn có thể sử dụng short

short d;

Bạn có thể kiểm tra kích thước của một biến bằng toán tử sizeof().

#include <stdio.h>

int main() {

short a;

long b;

long long c;

long double d;

 

printf(“size of short = %d bytes\n”, sizeof(a));

printf(“size of long = %d bytes\n”, sizeof(b));

printf(“size of long long = %d bytes\n”, sizeof(c));

printf(“size of long double= %d bytes\n”, sizeof(d));

return 0;

}

signed và unsigned

Trong ngôn ngữ lập trình C, signed và unsigned là các kiểu sửa đổi. Bạn có thể điều chỉnh việc lưu trữ dữ liệu của một kiểu dữ liệu bằng cách sử dụng signed và unsigned. Ví dụ:

unsigned int x;

int y;

Ở đây, biến x chỉ có thể là số 0 hoặc các giá trị dương vì tôi đã sử dụng kiểu sửa đổi unsigned.

Kích thước của int là 4 byte thì biến y có thể có thể chứa giá trị từ -231 đến 231-1 trong khi biến x có thể chứa giá trị từ từ 0 đến 232-1.

Một số kiểu dữ liệu khác được xác định trong lập trình C:

  • bool Type (kiểu dữ liệu bool)
  • Enumerated type (kiểu dữ liệu liệt kê)
  • Complex types (kiểu dữ liệu phức)

3.2 Các kiểu dữ liệu dẫn xuất

Kiểu dữ liệu được trích xuất từ các kiểu dữ liệu cơ bản được gọi là kiểu dẫn xuất. Ví dụ: arrays, pointers, function types, structures,…

Bạn sẽ được tìm hiểu kỹ hơn về kiểu dữ liệu dẫn xuất trong những phần tiếp theo.

4. Input và Output trong ngôn ngữ C cơ bản

Trong phần này, bạn sẽ được tìm hiểu cách sử dụng hàm scanf() để lấy đầu vào từ người dùng và hàm printf () để hiển thị đầu ra cho người dùng.

4.1 Output trong lập trình C

Trong ngôn ngữ lập trình C căn bản, printf () là một trong những hàm output thông dụng nhất. Hàm này sẽ gửi output đã được định dạng sẵn ra màn hình. Ví dụ:

Ví dụ 1: Đầu ra (output) trong ngôn ngữ C

#include <stdio.h>

int main()

{

// Displays the string inside quotations

printf(“C Programming”);

return 0;

}

Đầu ra

Lập trình C

Lập trình này hoạt động như thế nào?

  • Tất cả các lập trình C hợp lệ phải chứa hàm main (). Việc thực hiện mã code bắt đầu từ hàm main ().
  • Printf () là một hàm thư viện để gửi output đã được định dạng sẵn ra màn hình. Hàm này in ra một chuỗi được đặt trong dấu ngoặc kép.
  • Để sử dụng hàm printf () trong lập trình C, bạn cần thêm tệp có phần mở rộng stdio.h bằng cách sử dụng các lệnh trong C: #include <stdio.h>.
  • Câu lệnh return 0; bên trong hàm main () là “Trạng thái thoát” của chương trình. Đây là một tùy chọn.

Ví dụ 2: Đầu ra số nguyên

#include <stdio.h>

int main()

{

int testInteger = 5;

printf(“Number = %d”, testInteger);

return 0;

}

Đầu ra

Number = 5

Tôi sử dụng trình định dạng %d để in các kiểu int. %d trong các dấu ngoặc kép sẽ được thay thế bằng giá trị của testInteger

Ví dụ 3: Đầu ra float và double

#include <stdio.h>

int main()

{

float number1 = 13.5;

double number2 = 12.4;

 

printf(“number1 = %f\n”, number1);

printf(“number2 = %lf”, number2);

return 0;

}

Đầu ra

number1 = 13.500000

number2 = 12.400000

Để in float, tôi sử dụng trình định dạng %f. Tương tự, tôi sử dụng %lf để in các giá trị double.

Ví dụ 4: Các ký tự in

#include <stdio.h>

int main()

{

char chr = ‘a’;

printf(“character = %c”, chr);

return 0;

}

Đầu ra

character = a

Để in char, tôi sử dụng trình định dạng %c

4.2 Input trong ngôn ngữ lập trình C

Trong lập trình C, scanf() là một trong những hàm thường được sử dụng để lấy đầu vào từ người dùng. Hàm scanf() đọc được đầu vào đã được định dạng từ các đầu vào tiêu chuẩn, chẳng hạn như bàn phím.

Ví dụ 5: Input/ Output số nguyên

#include <stdio.h>

int main()

{

int testInteger;

printf(“Enter an integer: “);

scanf(“%d”, &testInteger);

printf(“Number = %d”,testInteger);

return 0;

}

Đầu ra

Enter an integer: 4

Number = 4

Trường hợp này, tôi sử dụng trình định dạng %d bên trong hàm scanf() để lấy đầu vào int từ người dùng. Khi người dùng nhập một số nguyên, nó sẽ được lưu trữ trong biến testInteger.

Lưu ý rằng, tôi đã sử dụng &testInteger bên trong hàm scanf(). Bởi vì &testInteger sẽ lấy địa chỉ của testInteger và giá trị do người dùng nhập vào được lưu trữ trong địa chỉ đó.

Ví dụ 6: Input / Output của Float và Double

#include <stdio.h>

int main()

{

float num1;

double num2;

printf(“Enter a number: “);

scanf(“%f”, &num1);

printf(“Enter another number: “);

scanf(“%lf”, &num2);

printf(“num1 = %f\n”, num1);

printf(“num2 = %lf”, num2);

return 0;

}

Đầu ra

Enter a number: 12.523

Enter another number: 10.2

num1 = 12.523000

num2 = 10.200000

Chúng tôi sử dụng trình định dạng %f và %lf lần lượt cho float và double.

Ví dụ 7: Input/Output của các ký tự trong ngôn ngữ lập trình C

#include <stdio.h>

int main()

{

char chr;

printf(“Enter a character: “);

scanf(“%c”,&chr);

printf(“You entered %c.”, chr);

return 0;

}

Đầu ra

Enter a character: g

You entered g

Khi một ký tự được người dùng nhập vào lập trình trên, nó sẽ không được lưu trữ lại. Thay vào đó, chương trình tự lưu trữ lại một giá trị số nguyên (giá trị theo mã ASCII).

Khi tôi hiển thị giá trị đó bằng định dạng %c text, ký tự nhập vào sẽ được hiển thị. Nếu tôi sử dụng %d để hiển thị ký tự đó, thì giá trị tương ứng trong mã ASCII sẽ được in ra.

Ví dụ 8: Giá trị mã ASCII

#include <stdio.h>

int main()

{

char chr;

printf(“Enter a character: “);

scanf(“%c”, &chr);

// When %c is used, a character is displayed

printf(“You entered %c.\n”,chr);

// When %d is used, ASCII value is displayed

printf(“ASCII value is %d.”, chr);

return 0;

}

Đầu ra

Enter a character: g

You entered g.

ASCII value is 103.

2.3 Nhiều giá trị Input/Output

Đây là cách bạn có thể lấy được nhiều đầu vào từ người dùng và hiển thị chúng.

#include <stdio.h>

int main()

{

int a;

float b;

printf(“Enter integer and then a float: “);

// Taking multiple inputs

scanf(“%d%f”, &a, &b);

printf(“You entered %d and %f”, a, b);

return 0;

}

Đầu ra

Enter integer and then a float: -3

3.4

You entered -3 and 3.400000

2.4 Trình định dạng Input/Output

Trong các ví dụ trên, chúng tôi sử dụng:

%d thay cho int

%f thay cho float

%lf thay cho double

%c thay cho char

Dưới đây là danh sách các kiểu dữ liệu trong ngôn ngữ lập trình C và trình định dạng của chúng.

Data Type Format Specifier
int %d
char %c
float %f
double %lf
short int %hd
unsigned int %u
long int %li
long long int %lli
unsigned long int %lu
unsigned long long int %llu
signed char %c
unsigned char %c
long double %Lf

5. Toán tử trong lập trình ngôn ngữ C

Trong phần này, bạn sẽ được tìm hiểu về các toán tử khác nhau trong ngôn ngữ lập trình C thông qua các ví dụ.

Toán tử là một ký hiệu hoạt động trên một giá trị hoặc một biến. Ví dụ: + chính là một toán tử thể hiện phép cộng. Trong lập trình C, mỗi toán tử đều thể hiện cho một hoạt động nhất định.

5.1 Toán tử số học trong lập trình C

Toán tử số học thể hiện các phép toán như cộng, trừ, nhân, chia,….của các giá trị số (hằng và biến)

Toán tử Ý nghĩa của toán tử
+ phép cộng hoặc cộng một bậc
phép trừ hoặc trừ một bậc
* phép nhân
/ phép chia
% phép toán tìm số dư của phép chia 2 số (chia modulo)

Ví dụ 1: Toán tử số học

// Working of arithmetic operators
#include <stdio.h>
int main()
{
    int a = 9,b = 4, c;
    
    c = a+b;
    printf("a+b = %d \n",c);
    c = a-b;
    printf("a-b = %d \n",c);
    c = a*b;
    printf("a*b = %d \n",c);
    c = a/b;
    printf("a/b = %d \n",c);
    c = a%b;
    printf("Remainder when a divided by b = %d \n",c);
    
    return 0;
}

Đầu ra

a+b = 13
a-b = 5
a*b = 36
a/b = 2
Remainder when a divided by b=1

Các toán tử +, – và * lần lượt thể hiện các phép tính cộng, trừ và nhân.

Trong phép tính thông thường, 9:4 = 2,25. Tuy nhiên, lập trình này chỉ trả về đầu ra là 2.

Bởi vì cả hai biến a và b đều là những số nguyên. Do đó, đầu ra cũng phải là một số nguyên. Trình biên dịch bỏ qua các số hạng sau dấu thập phân và chỉ hiển thị kết quả là 2 thay vì 2,25.

Toán tử modulo % sẽ tính phần dư còn lại sau khi thực hiện xong phép chia 2 số. Khi a=9 chia cho b=4 thì kết quả là 2 và dư 1. Toán tử % chỉ được sử dụng với số nguyên.

Giả sử a = 5.0, b = 2.0, c = 5 và d = 2. Và lập trình C sẽ là:

// Either one of the operands is a floating-point number

a/b = 2.5

a/d = 2.5

c/b = 2.5

// Both operands are integers

c/d = 2

5.2 Các toán tử giảm và tăng trong ngôn ngữ lập trình C

Toán tử tăng ++ và giảm – trong ngôn ngữ C dùng để thay đổi giá trị của một toán hạng (hằng hoặc biến) giảm hoặc thêm 1 đơn vị.

Toán tử tăng ++ làm biến tăng thêm 1 đơn vị trong khi toán tử giảm – làm biến giảm bớt 1 đơn vị. Nghĩa là cả 2 đều là toán tử một ngôi và hoạt động trên cũng một toán hạng duy nhất.

Ví dụ 2: Các toán tử tăng và giảm

// Working of increment and decrement operators

#include <stdio.h>

int main()

{

int a = 10, b = 100;

float c = 10.5, d = 100.5;

printf(“++a = %d \n”, ++a);

printf(“–b = %d \n”, –b);

printf(“++c = %f \n”, ++c);

printf(“–d = %f \n”, –d);

return 0;

}

Đầu ra

++a = 11

–b = 99

++c = 11.500000

–d = 99.500000

Trường hợp này, các toán tử ++ và – được sử dụng như là các tiền tố. Cả 2 toán tử này cũng có thể được sử dụng như là các hậu tố, chẳng hạn như a++ và a–.

5.3 Toán tử gán trong lập trình C

Toán tử gán được sử dụng để gán giá trị cho một biến. Toán tử gán được dùng phổ biến nhất chính là =

Toán tử Ví dụ Tương tự như
= a = b a = b
+= a += b a = a+b
-= a -= b a = a-b
*= a *= b a = a*b
/= a /= b a = a/b
%= a %= b a = a%b

Ví dụ 3: Các toán tử gán

// Working of assignment operators

#include <stdio.h>

int main()

{

int a = 5, c;

c = a; // c is 5

printf(“c = %d\n”, c);

c += a; // c is 10

printf(“c = %d\n”, c);

c -= a; // c is 5

printf(“c = %d\n”, c);

c *= a; // c is 25

printf(“c = %d\n”, c);

c /= a; // c is 5

printf(“c = %d\n”, c);

c %= a; // c = 0

printf(“c = %d\n”, c);

return 0;

}

Đầu ra

c = 5

c = 10

c = 5

c = 25

c = 5

c = 0

5.4 Toán tử quan hệ trong ngôn ngữ C

Toán tử quan hệ giúp kiểm tra mối quan hệ giữa hai toán hạng. Nếu giữa 2 toán hạng đó có mối quan hệ (true) thì giá trị trả về là 1. Nếu giữa 2 toán hạng không có mối quan hệ gì (false) thì giá trị trả về là 0

Các toán tử quan hệ được sử dụng để kiểm tra tính đúng sai của một biểu thức hoặc lệnh lặp Loops.

Toán tử Ý nghĩa của toán tử Ví dụ
== Bằng với 5 == 3 trả về kết quả 0
> Lớn hơn 5 > 3 trả về kết quả 1
< Nhỏ hơn 5 < 3 trả về kết quả 0
!= Không bằng 5 != 3 trả về kết quả 1
>= Lớn hơn hoặc bằng 5 >= 3 trả về kết quả 1
<= Nhỏ hơn hoặc bằng 5 <= 3 trả về kết quả 0

Ví dụ 4: Toán tử quan hệ

// Working of relational operators

#include <stdio.h>

int main()

{

int a = 5, b = 5, c = 10;

printf(“%d == %d is %d \n”, a, b, a == b);

printf(“%d == %d is %d \n”, a, c, a == c);

printf(“%d > %d is %d \n”, a, b, a > b);

printf(“%d > %d is %d \n”, a, c, a > c);

printf(“%d < %d is %d \n”, a, b, a < b);

printf(“%d < %d is %d \n”, a, c, a < c);

printf(“%d != %d is %d \n”, a, b, a != b);

printf(“%d != %d is %d \n”, a, c, a != c);

printf(“%d >= %d is %d \n”, a, b, a >= b);

printf(“%d >= %d is %d \n”, a, c, a >= c);

printf(“%d <= %d is %d \n”, a, b, a <= b);

printf(“%d <= %d is %d \n”, a, c, a <= c);

return 0;

}

Đầu ra

5 == 5 is 1

5 == 10 is 0

5 > 5 is 0

5 > 10 is 0

5 < 5 is 0

5 < 10 is 1

5 != 5 is 0

5 != 10 is 1

5 >= 5 is 1

5 >= 10 is 0

5 <= 5 is 1

5 <= 10 is 1

5.5 Toán tử logic trong lập trình C cơ bản

Biểu thức chứa toán tử logic trả về kết quả là 0 hoặc 1 tùy thuộc vào kết quả biểu thức đó đúng hay sai. Các toán tử logic thường được sử dụng để kiểm tra tính đúng sai trong ngôn ngữ lập trình C.

Toán tử Ý nghĩa Ví dụ
&& Logical AND. Chỉ đúng khi tất cả toán hạng đều đúng If c = 5 and d = 2 then, biểu thức ((c==5) && (d>5)) bằng 0.
|| Logical OR. Sẽ đúng nếu có một toán hạng đúng If c = 5 and d = 2 then, biểu thức((c==5) || (d>5)) bằng 1.
! Logical NOT. Chỉ đúng khi có một toán hạng bằng 0 If c = 5 then, biểu thức !(c==5) bằng 0.

Ví dụ 5: Toán tử logic

// Working of logical operators

#include <stdio.h>

int main()

{

int a = 5, b = 5, c = 10, result;

result = (a == b) && (c > b);

printf(“(a == b) && (c > b) is %d \n”, result);

result = (a == b) && (c < b);

printf(“(a == b) && (c < b) is %d \n”, result);

result = (a == b) || (c < b);

printf(“(a == b) || (c < b) is %d \n”, result);

result = (a != b) || (c < b);

printf(“(a != b) || (c < b) is %d \n”, result);

result = !(a != b);

printf(“!(a != b) is %d \n”, result);

result = !(a == b);

printf(“!(a == b) is %d \n”, result);

return 0;

}

Đầu ra

(a == b) && (c > b) is 1

(a == b) && (c < b) is 0

(a == b) || (c < b) is 1

(a != b) || (c < b) is 0

!(a != b) is 1

!(a == b) is 0

Giải thích lập trình toán tử logic trên:

  • (a == b) && (c> 5) cho kết quả là 1 vì cả hai toán hạng (a == b) và (c> b) đều là 1 (đúng).
  • (a == b) && (c <b) cho kết quả là 0 vì toán hạng (c <b) là 0 (sai).
  • (a == b) || (c <b) cho kết quả là 1 vì (a = b) là 1 (đúng).
  • (a! = b) || (c <b) cho kết quả là 0 vì cả toán hạng (a! = b) và (c <b) đều là 0 (sai).
  • ! (a! = b) cho kết quả là 1 vì toán hạng (a! = b) là 0 (sai). Do đó,! (A! = B) là 1 (đúng).
  • ! (a == b) cho kết quả là 0 vì (a == b) là 1 (đúng). Do đó,! (A == b) là 0 (sai).

5.6. Toán tử Bitwise

Trong quá trình tính toán, các phép toán như: cộng, trừ, nhân, chia,.. đều được chuyển đổi sang mức bít để quá trình xử lý diễn ra nhanh hơn và tiết kiệm điện năng hơn.

Toán tử bitwise được sử dụng trong lập trình C để thể hiện các toán tử vận hành ở mức bit.

Toán tử Ý nghĩa của toán tử
& Toán tử Bitwise VÀ
| Toán tử Bitwise HOẶC
^ Toán tử Bitwise độc quyền HOẶC
~ Toán tử Bitwise bổ sung
<< Chuyển sang trái
>> Chuyển sang phải

Truy cập toán tử bitwise trong lập trình C để biết thêm thông tin chi tiết.

5.7 Một số loại toán tử khác

Toán tử dấu phẩy

Toán tử dấu phẩy được sử dụng để liên kết các biểu thức liên quan với nhau. Ví dụ:

int a, c = 5, d;

Toán tử sizeof

Sizeof là toán tử một ngôi trả về kích thước của dữ liệu (hằng số, biến, mảng, cấu trúc,…)

Ví dụ 6: Toán tử sizeof

#include <stdio.h>

int main()

{

int a;

float b;

double c;

char d;

printf(“Size of int=%lu bytes\n”,sizeof(a));

printf(“Size of float=%lu bytes\n”,sizeof(b));

printf(“Size of double=%lu bytes\n”,sizeof(c));

printf(“Size of char=%lu byte\n”,sizeof(d));

return 0;

}

Đầu ra

Size of int = 4 bytes

Size of float = 4 bytes

Size of double = 8 bytes

Size of char = 1 byte

Một số toán tử khác như toán tử 3 ngôi ?:, toán tử tham chiếu & toán tử gián tiếp * và toán tử lựa chọn giá trị. Sẽ được giới thiệu trong những phần tiếp theo của bài viết ngôn ngữ lập trình C cơ bản.

Để lại một câu trả lời