Professional Documents
Culture Documents
Chương 1 - Thanh Phan Co Ban Cua Ngon Ngu C (8t) PDF
Chương 1 - Thanh Phan Co Ban Cua Ngon Ngu C (8t) PDF
NGÔN NGỮ C
GIẢNG VIÊN
2
MỤC TIÊU CỦA HỌC PHẦN
3
TIÊU CHUẨN ĐÁNH GIÁ SINH VIÊN
4
TÀI LIỆU HỌC TẬP
• Trương Công Tuấn. Ngôn ngữ lập trình C – Các vấn đề cốt yếu, NXB
Đại học Huế, 2008.
• Nguyễn Thanh Thủy. Ngôn ngữ C. NXB Khoa học và Kỹ thuật, 1999.
• Phạm Văn Ất. Kỹ thuật lập trình C. NXB Khoa học và Kỹ thuật, 1995.
5
NỘI DUNG MÔN HỌC
1
• Các thành phần cơ bản của C
2
• Xuất nhập dữ liệu và các lệnh có cấu trúc
3
• Mảng, Con trỏ và Chuỗi ký tự
4
• Cấu trúc và Hàm
6
Giới thiệu về máy tính, lập trình
7
Máy tính là gì?
• Một máy tính bao gồm một bộ xử lý trung tâm (CPU), bộ nhớ
(memory), đĩa cứng (hard disk), đĩa mềm (floppy disk), màn hình, máy
in, và thiết bị liên lạc
Bus
8
Kiến trúc cơ bản của máy tính
9
CPU
• Bộ xử lý trung tâm (CPU) là bộ não cả một máy tính. Nó nhận chỉ dẫn
từ bộ nhớ máy tính và thực thi chúng. Đơn vị đo lường tốc độ CPU là
hertz (Hz), 01 Hz tương đương 1 xung nhịp mỗi giây.
• CPU có tốc độ được tính bằng megahertz (MHz) ở những năm 1990,
hiện nay tốc độ CPU được đo bằng gigahertz (GHz).
Bus
• Bộ nhớ (Memory) được sử dụng để lưu trữ dữ liệu và các chương trình
hướng dẫn cho CPU hoạt động. Một đơn vị lưu trữ là một chuỗi có thứ
tự của bytes, mỗi byte có 8 bits.
• Một chương trình và dữ liệu của nó phải được lưu trữ trong bộ nhớ
trước khi được thực thi. Dữ liệu trong mỗi byte thường được ghi đè lên.
Bus
• Bộ nhớ có tính lưu trữ tạm thời, bở bì thông tin sẽ bị mất khi máy tính
bị tắt nguồn. Chương trình và dữ liệu được lưu trữ dài hạn ở những thiết
bị lưu trữ và được di chuyển đến bộ nhớ khi cần thiết.
• Có nhiều loại thiết bị lưu trữ: Disk driver (hard disk), CD drives (CD-R,
CD-RW), USB flash drives…
Bus
• Màn hình trình chiếu thông tin (văn bản hay đồ họa). Độ phân giải và
dot pitch (độ sắc nét) được sử dụng để đánh giá chất lượng hiển thị.
Bus
14
Thiết bị kết nối mạng
• Một regular modem (modem thông thường) sử dụng đường dây điện thoại để truyền tải
dữ liệu với tốc độ tối đa 56,000 bps (bit per second).
• Một DSL (digital subscriber line) sử dụng đường dây điện thoại và có thể truyền tải dữ
liệu nhanh hơn 20 lần một modem thông thường.
• Một cable modem sử dụng cáp TV và có tốc độ tương đương DSL.
• Network Interface Card (NIC) là một thiết bị được sử dụng để kết nối máy tính vào mạng
LAN. Tốc độ mạng LAN có thể đạt đến 1 Gbp.
Bus
• Chương trình (program) máy tính, hay còn được gọi là phần mềm, là
những chỉ dẫn cho máy tính.
• Sử dụng programs, chúng ta có thể sai khiến máy tính làm việc. Không
có program, máy tính có thể xem như bộ máy trống rỗng.
• Máy tính không hiểu được ngôn ngữ con người, vì vậy chúng ta sử
dụng ngôn ngữ máy tính để giao tiếp với nó.
• Programs được viết bằng những ngôn ngữ lập trình.
16
Lập trình
17
Ngôn ngữ lập trình (1/3)
Machine Language Assembly Language High-Level Language
• Ngôn ngữ máy là một tập hợp các chỉ dẫn sơ khai (primitive
instructions) được xây dựng sẵn trong tất cả máy tính.
• Những chỉ dẫn này được biểu diễn dưới dạng mã nhị phân, vì vậy chúng
ta phải sử dụng mã nhị phân để lập trình.
• Lập trình với mã máy là một quá trình dễ làm chán nãn.
• Thêm vào đó chương trình được viết ra thường khó đọc và sửa đổi.
• Ví dụ, để cộng hai số, chúng ta viết một chỉ dẫn nhị phân như sau:
1101101010011010
18
Ngôn ngữ lập trình (2/3)
Machine Language Assembly Language High-Level Language
• Ngôn ngữ Assembly được phát triển để giúp việc lập trình dễ dàng hơn.
• Bởi vì máy tính không hiểu ngôn ngữ assembly nên một chương trình
trung gian gọi là assembler được sử dụng để chuyển đổi chương trình
viết bằng ngôn ngữ assembly sang mã máy.
• Ví dụ, cộng hai số, chúng ta có thể viết một chỉ dẫn bằng assembly như
sau: ADDF3 R1, R2 R3
19
Ngôn ngữ lập trình (3/3)
Machine Language Assembly Language High-Level Language
• Ngôn ngữ lập trình bậc cao giúp việc viết chương trình trở nên dễ dàng
hơn (tương tự việc sử dụng tiếng Anh).
• Ví dụ, cộng hai số, chúng ta có thể viết một đoạn mã bằng ngôn ngữ lập
trình bậc cao để tính diện tích hình tròn với bán kính 5 như sau:
area = 5 * 5 * 3.1415
20
Popular High-Level Languages
Language Description
Ada Named for Ada Lovelace, who worked on mechanical general-purpose computers. The Ada
language was developed for the Department of Defense and is used mainly in defense projects.
BASIC Beginner’s All-purpose Symbolic Instruction Code. It was designed to be learned and used easily
by beginners.
C Developed at Bell Laboratories. C combines the power of an assembly language with the ease of
use and portability of a high-level language.
C++ C++ is an object-oriented language, based on C.
C# Pronounced “C Sharp.” It is a hybrid of Java and C++ and was developed by Microsoft.
COBOL COmmon Business Oriented Language. Used for business applications.
FORTRAN FORmula TRANslation. Popular for scientific and mathematical applications.
Java Developed by Sun Microsystems, now part of Oracle. It is widely used for developing platform-
independent Internet applications.
Pascal Named for Blaise Pascal, who pioneered calculating machines in the seventeenth century. It is a
simple, structured, general-purpose language primarily for teaching programming.
Python A simple general-purpose scripting language good for writing short programs.
Visual Visual Basic was developed by Microsoft and it enables the programmers to rapidly develop
Basic graphical user interfaces.
21
Các khía cạnh của ngôn ngữ
22
Thông dịch/ biên dịch mã nguồn
• Chương trình máy tính được viết bằng ngôn ngữ lập trình bậc cao được
gọi là “chương trình nguồn” hay “mã nguồn”.
• Vì máy tính không hiểu mã nguồn, chúng cần phải được dịch ra ngôn
ngữ máy để được thực thi.
• Việc biên dịch được thực hiện thông qua những công cụ lập trình như
trình thông dịch (interpreter) hoặc biên dịch (complier).
23
Thông dịch mã nguồn
• Trình thông dịch đọc một dòng lệnh trong mã nguồn, dịch nó thành mã
máy, sau đó thực thi lệnh đó ngay lập tức (xem hình vẽ).
• Lưu ý rằng một dòng lệnh ở mã nguồn có thể được dịch ra nhiều chỉ
dẫn cho máy tính.
24
Biên dịch mã nguồn
• Trình biên dịch chuyển đổi toàn bộ mã nguồn sang một tệp mã máy.
• Sau đó tệp này được thực thi (xem hình vẽ)
25
Hệ điều hành - Operating Systems
26
1 - Lịch Sử Phát Triển Của Ngôn Ngữ C
27
Sự ra đời của C
• Nhu cầu viết lại HĐH Unix cho các hệ máy tính khác nhau
– Dùng Assembly
• Công việc nặng nề, phức tạp
• Khó chuyển đổi chương trình giữa các hệ máy tính
• khác nhau
– Cần ngôn ngữ mới
• Đơn giản việc lập trình
• Tính khả chuyển cao
• Đặc điểm
– Ngôn ngữ lập trình hệ thống
– Tính khả chuyển, linh hoạt cao
– Có thế mạnh trong xử lý dữ liệu số, văn bản, cơ sở dữ liệu,..
• • Phạm vi sử dụng
– Viết các chương trình hệ thống
• Hệ điều hành Unix có 90% mã C, 10% mã hợp ngữ
– Các trình điều khiển thiết bị (device driver)
– Xử lý ảnh
29
Ngôn ngữ lập trình C (2/2)
30
2 - Các Thành Phần Cơ Bản Của
Ngôn Ngữ C
31
Các phần tử cơ bản
1. Tập ký tự 6. Biến
2. Từ khóa 7. Hàm
3. Định danh 8. Biểu thức
4. Các kiểu dữ liệu 9. Câu lệnh
5. Hằng 10.Chú thích
32
(1) Tập ký tự
33
Tập ký tự trong C
34
(2) Từ khóa (Keyword)
35
Từ khóa thông dụng trong C
• Lưu ý:Tất cả từ khóa trong C đều viết bằng chữ cái thường
36
(3) Định danh (identifier)
• Định danh (Tên) là một dãy các kí tự dung để gọi tên các đối tượng
trong chương trình.
– Các đối tượng trong chương trình:
• Biến
• Hằng số
• Hàm
• Kiểu dữ liệu
• Định danh được bắt đầu bởi chữ cái hoặc dấu gạch dưới “_”
(underscore)
• Các kí tự tiếp theo chỉ có thể là: chữ cái, chữ số hoặc dấu gạch dưới “_”
• Định danh do người lập trình đặt không được trùng với các từ khóa của
ngôn ngữ C
• Độ dài định danh tùy thuộc phiên bản C
– Turbo C++, không giới hạn độ dài tên, nhưng trình biên dịch chỉ sử dụng 32 ký tự đầu
• Chú ý: C là ngôn ngữ có phân biệt chữ hoa và chữ thường
38
Ví dụ: Định danh
39
Một số quy ước (Code convention)
• Một số phép toán được định nghĩa trên kiểu dữ liệu int của C
• Hằng (constant) là đại lượng có giá trị không đổi trong chương trình.
• Giá trị hằng do người lập trình xác định
• Các loại hằng:
– Hằng số nguyên
– Hằng số thực
– Hằng ký tự
– Hằng chuỗi/xâu kỹ tự
42
Hằng số nguyên
Giá trị thập phân Giá trị thập lục phân Giá trị bát phân
2011 0x7DB 03733
396 0x18C 0614
43
Hằng số thực
44
Hằng ký tự
45
Hằng chuỗi/ xâu ký tự
• Hằng chuỗi/xâu kí tự được biểu diễn bởi đặt dãy các kí tự trong xâu
trong cặp dấu nháy kép.
• •Ví dụ:
– “ngon ngu lap trinh C”
– “Tin hoc dai cuong”
– “Dai hoc Bach Khoa Ha Noi”
46
(6) Biến (variable)
• Biến là đại lượng mà giá trị có thể thay đổi trong chương trình.
• Tên biến phải được đặt theo quy tắc đặt tên
– Về thực chất, biến là các ô nhớ trong bộ nhớ máy tính dành cho 1 kiểu dữ
liệu nào đó và được đặt tên để tiện tham khảo
– Ví dụ: Biến kiểu int chiếm 2 ô nhớ
• Lưu ý:
– Hằng số và biến được sử dụng để lưu trữ dữ liệu trong chương trình và
phải thuộc một kiểu dữ liệu nào đó
47
(7) Hàm (function)
48
Một số hàm toán học
Hàm Ý nghĩa Ví dụ
sqrt(x) Căn bậc 2 của x sqrt(16.0) -> 4.0
pow(x, y) X mũ y pow(2, 3) -> 8
fabs(x) Trị tuyệt đối x fabs(-5.0) -> 5.0
exp(x) E mũ x exp(1.0) -> 2.71828
log(x) Logarithm tự nhiên của x (ln x) log(2.2718) -> 0.999
log10(x) Logarithm cơ số 10 của x log10(100) -> 2.00
ceil(x) Số nguyên nhỏ nhất không nhỏ ceil(2.5)= 3
hơn x ceil(-2.5) = -2
floor(x) Số nguyên lớn nhất không lớn floor(2.5) = 2
hơn x floor(-2.5) = -3
49
(8) Biểu thức
• Biểu thức là sự kết hợp các các toán hạng (operand) bởi các toán tử
(operator) theo một quy tắc xác định.
– Các toán hạng có thể là biến, hằng, hàm…
– Các toán tử rất đa dạng: cộng, trừ, nhân, chia
• Ví dụ: Thể tích hình hộp: V=Rộng*Cao*Dày
– Phép nhân (*) là toán tử
– Các toán hạng Rộng, Cao, Dày
50
(9) Câu lệnh (Statement)
• Câu lệnh diễn tả một hoặc một nhóm các thao tác trong giải thuật.
– Chương trình được tạo thành từ dãy các câu lệnh.
• Các câu lệnh trong C, được kết thúc bởi dấu chấm phẩy (;)
– Dấu chấm phẩy (;) dùng phân cách các lệnh
51
Phân loại câu lệnh
52
(10) Chú thích (Comment)
• Lời mô tả, giải thích vắn tắt cho một câu lệnh, một đoạn chương trình
hoặc cả chương trình
– Giúp việc đọc hiểu chương trình dễ dàng hơn
– Chú thích không phải là câu lệnh ⇒ không ảnh hưởng tới chương trình
– Khi gặp chú thích, trình biên dịch sẽ bỏ qua
• Cách viết chú thích
– Chú thích một dòng: sử dụng “//”
– Chú thích nhiều dòng: sử dụng “/*” và “*/”
53
3 - Cấu Trúc Cơ Bản Của Chương Trình C
54
Các phần cơ bản
Khai báo các tệp tiêu đề
#include
55
Khai báo các tệp tiêu đề
• Liệt kê danh sách thư viện sẽ được sử dụng trong chương trình
– Các hàm của C đều thuộc một thư viện nào đó
– Không khai báo thư viện, trình biên dịch không hiểu được hàm (có thể báo lỗi)
• Cách thức (cú pháp) khai báo
1. #include<ThuVien.h>
– Thư viện phải nằm trong thư mục chứa các header file
– Thường được sử dụng
– Ví dụ: #include<stdio.h>
2. #include “ThuVien.h”
– Tìm kiếm thư viện tại thư mục hiện tại
56
Khai báo các đối tượng toàn cục (1/3)
• Các đối tượng toàn cục có phạm vi sử dụng trong toàn bộ chương trình
– Các kiểu dữ liệu mới
– Các hằng, biến
– Các nguyên hàm
• Tuân theo nguyên tắc khai báo đối tượng
57
Khai báo các đối tượng toàn cục (2/3)
61
Chú ý
62
Chương trình C đầu tiên: Hello World!
#include <stdio.h>
int main() { //Không cần tham số dòng lệnh
printf("Hello world! \n");
return 0; //Trả về giá trị 0
}
1. Nạp thư viện stdio.h vào, đây là thư viện vào ra chuẩn (standard input output) chứa
khai báo nguyên hàm cho hàm printf
2. Điểm bắt đầu thực hiện của chương trình. Máy tính thực hiện các câu lệnh nằm trong cặp
ngoặc {} của main()
3. Hàm printf in ra một hằng chuỗi, có kết thuc bởi dấu xuống dòng (\n)
4. Trả về hệ điều hành một giá trị. Giá trị 0 dùng để thể hiện chương trình không có lỗi
63
4 - Biên Dịch Chương Trình C
64
Biên dịch chương trình
• Chương trình được viết bằng ngôn ngữ bậc cao phải được dịch ra
mã máy để thực thi
– Công việc dịch được thực hiện bởi trình biên dịch (compiler)
• Các giai đoạn dịch chương trình
65
Trình biên dịch
66
Cài đặt Visual Studio Code
https://code.visualstudio.com/download
67
Cài đặt phần mở rộng cho VS Code
68
Giao diện Visual Studio Code cho C/C++
69
Sử dụng Visual Studio Code
• Xem kết quả của chương trình ở phần output/terminal bên dưới
70
Chương trình Hello world!
71
5 - Các kiểu dữ liệu chuẩn trong C
72
Các kiểu đơn
Kiểu dữ liệu Ý nghĩa Kích thước Miền dữ liệu
char Ký tự; số nguyên có dấu 1 byte -128 ~ 127
int
Số nguyên có dấu 2 byte -32.768 ~ 32.767
short int
long -2,147,483,648
Số nguyên có dấu 4 byte
long int ~ 2,147,483,647
float Số thực dấu phẩy động, ± 3.4E-38 ~
4 byte
độ chính xác đơn ± 3.4E+38
double Số thực dấu phẩy động, ±1.7E-308 ~
8 byte
độ chính xác kép ± 1.7E+308
Các kiểu kết hợp
74
Biểu diễn hằng số
Kiểu dữ liệu Ví dụ Ý nghĩa
Số nguyên 123, -12 Số thập phân
012, 03777 Số bát phân
0x7F, 0x3fe15 Số thập lục phân
39u 0267u, 0xFFu Số không dấu
Số nguyên lớn 2L, 07723L
0xFFL, -10L
0xFFUL,0xFFLU
Số thực 3.1415, -12.3, .327
10e-12, -15.3E12
3.1415F, -12.F
75
Khai báo biến (1/2)
• Sau khi khai báo, biến chưa có giá trị xác định.
– Biến cần được gán giá trị trước khi sử dụng
• C cho phép kết hợp khai báo và khởi tạo biến
KieuDuLieu TenBien = GiaTriBanDau;
KieuDuLieu Bien1=GiaTri1, BienN=Gia_TriN;
• Ví dụ:
//Khai báo biến nguyên a và khởi tạo gia tri bằng 3
int a = 3;
//Khai báo biến thực x,y và khởi tạo giá tri bằng 5.0 và 7.6
float x = 5.0, y = 7.6;
77
Khai báo hằng (1/3)
• Ví dụ:
#define MAX_SINH_VIEN 50
#define CNTT “Cong nghe thong tin”
#define DIEM_CHUAN 23.5
78
Khai báo hằng (2/3)
• Ví dụ:
const int MAX_SINH_VIEN = 50;
const char CNTT[20] = “Cong nghe thong tin”;
const float DIEM_CHUAN = 23.5;
79
Khai báo hằng (3/3)
• Chú ý:
– Giá trị của các hằng phải được xác định ngay khi khai báo.
– Trong chương trình, KHÔNG thể thay đổi được giá trị của hằng.
• #define là chỉ thị tiền xử lý
– Dễ đọc, dễ thay đổi
– Dễ chuyển đổi giữa các nền tảng phần cứng hơn
– Tốc độ nhanh hơn
80
6 – Biểu thức trong C
81
Mục đích sử dụng
• Các toán hạng được thay thế bởi giá trị tương ứng
• Các phép tính được thực hiên
• Chương 2: Kiểu dữ liệu và biểu thức trong C
• Ví dụ (alpha = 10, beta = 81)
Biểu thức: alpha + sqrt(beta)
: alpha + sqrt(81)
: alpha + 9.0
: 10 + 9.0
: 19.0
83
Các loại biểu thức
84
Biểu thức số học
• Là biểu thức mà giá trị của nó là các đại lượng số học (số nguyên, hoặc
số thực).
– Sử dụng các toán tử là các phép toán số học (cộng, trừ, nhân, chia…),
– Các toán hạng là các đại lượng số học (hằng số, biến, biểu thức khác).
• Ví dụ: a, b, c là các biến thuộc kiểu số thực.
3 * 3.7
8 + 6/3
a + b – c
85
Biểu thức quan hệ
• Là những biểu thức có sử dụng các toán tử quan hệ như lớn hơn, nhỏ
hơn, khác nhau…
• Chỉ có thể trả về một trong 2 giá trị logic Đúng (TRUE) hoặc Sai
(FALSE)
86
Biểu thức logic
5 * (12 > 6) →?
88
7 – Các toán tử trong C
89
Các toán tử chính
Các toán tử cho phép tạo nên các biểu thức từ các hằng và biến
• Toán tử số học
• Toán tử quan hệ
• Toán tử logic
• Toán tử logic bit
• Toán tử gán
Các toán tử số học
Toán Ý nghĩa Kiểu dữ liệu của toán hạng Ví dụ
(int a = 12; float x = 3.0)
tử
- Đảo dấu -12, -12.34, - a, - x
float, double, int, long,…
- -a →12, --a →?
+ Cộng float, double, int, long,… 12 + -x → 9.0
* 12 * 3.0 →36.0
Nhân float, double, int, long,…
12 * 3 → 36
/ 17.0/3.0 →5.666667
Nếu có ít nhất 1 toán hạng
Chia 17/3.0 →5.666667
là số thực 17.0/3 →5.666667
/ Chia lấy nguyên Số nguyên int, long,.. 17/3→5
• Cho phép so sánh giá trị 2 toán hạng <, >, <=, >=, ==, !=
• Kết quả phép so sánh là một số nguyên
– 1 nếu quan hệ có kết quả là đúng,
– 0 nếu quan hệ có kết quả sai
• Ví dụ:
6 > 4 → Trả về giá trị 1
6 < 4 → Trả về giá trị 0
5 * (12 > 6) → 5
int b =(x !=y);
Nếu x và y khác nhau, biểu thức đúng và b mang giá trị 1.
Ngược lại biểu thức sai và b mang giá trị 0
92
Các toán tử logic (1/2)
• Và logic ( && ) :
– Cho kết quả đúng (trả về giá trị 1) khi cả 2 toán hạng đều đúng (khác 0)
– Ví dụ: 3 < 5 && 4 < 6 →1; 3 < 5 && 5 > 6 → 0
• Hoặc logic ( || ):
– Cho kết quả sai (trả về giá trị 0) chỉ khi cả 2 toán hạng đều sai (bằng 0)
– Ví dụ: 4 || 5 < 3 → 1; 5 < 5 || 2 > 6 → 0
• Phủ định logic ( ! ):
– Cho kết quả đúng (1) hoặc sai (0) khi toán hạng là sai (0) hoặc đúng (khác 0)
– Ví dụ: ! 3 → 0; !(2 > 3) → 1;
94
Toán tử logic bit (1/3)
96
Toán tử logic bit (3/3)
char r = Op1 >> Op;
char Op1 = 83, Op2 = -38,
0 1 0 1 0 0 1 1 Op = 3;
r = 0 0 0 0 1 0 1 0 → (10)
99
Toán tử gán (3/3)
Var <op>= Exp ⇔ Var = Var <op> Exp
Toán tử số học:
+= -= *= /= %=
Ví dụ: a *= b // a= a * b
Toán tử dịch:
<<= >>=
Ví dụ: s <<= 4 // s = s << 4
100
8 – Một số toán tử đặc trưng
101
Các toán tử
• Toán tử phẩy
102
Tăng giảm tự động một đơn vị
++ Tăng tự động ++Var, Var++
Variable: Biến
-- Giảm tự động --Var, Var--
• Tiền tố (hậu tố): biến được tăng/giảm trước (sau) khi sử dụng để tính
toán biểu thức
• Ví dụ:
int a = 5, b, c, d, e;
b = a++; // b = 5 sau đó a = 6
c = ++a; // a = 7 rồi tới c = 7
d = a--; // d = 7 rồi tới a = 6
e = --a; // a = 5 sau đó e= 5
103
Toán tử lấy địa chỉ
& Tên_biến
• Ký tự & là toán tử lấy địa chỉ biến
• Biến thực chất là một vùng nhớ của máy tính được đặt tên
→ tên của biến
• Mọi ô nhớ trên bộ nhớ máy tính đều được đánh địa chỉ.
→ Mọi biến đều có địa chỉ
• Ví dụ:
int a = 2006;
&a → Địa chỉ của ô nhớ dung chứa giá trị biến a Kiểu địa chỉ?
104
Toán tử phỏng điều kiện (biểu thức điều kiện)
exp1 ? exp2 : exp3 expression: Biểu thức
• Nếu exp1 ≠ 0 (giá trị đúng), biểu thức điều kiện trả về giá trị của exp2
• Nếu exp1 = 0 (giá trị sai) biểu thức điều kiện trả về giá trị của exp3
• Ví dụ:
float x= 5.2, y = 3.8, z;
z = (x < y) ? x : y;
→ z = 3.8 // z min{x, y}
⇔ if (x < y) z = x; else z = y;
105
Toán tử phẩy
biểu_thức_1, biểu thức_2,..
• Toán tử phẩy ( , ) cho phép sử dụng nhiều biểu thức tại nơi chỉ cho phép
viết một biểu thức
• Các biểu thức được tính toán từ trái qua phải
• Giátrị và kiểu của biểu thức là giá trị và kiểu của biểu thức cuối cùng,
bên phải
• Ví dụ:
if (i = 0, a !=b)…
for(i = 0, j = 0; i < 100; i++, j++)….
106
Chuyển kiểu
(Kiểu) biểu thức
• Chuyển kiểu tự động
– Chương trình dịch tự động chuyển đổi từ kiểu có phạm vi biểu diễn thấp tới kiểu có
phạm vi biểu diễn cao
char → int → long int → float →
double → long double
• Ép kiểu
– Bằng câu lệnh tường minh trong chương trình
– Được sử dụng khi muốn chuyển sang kiểu có phạm vi biểu diễn thấp hơn
107
Ví dụ - Chuyển kiểu
#include <stdio.h>
#include <conio.h>
void main(){
long L = 0xABCDEF; float f = 123.456;
int i;
L = 11259375; i = -12817(CDEF)
int clrscr();
f = 123.456001; L = 123; i = 123
i = (int) L;
printf("\n L = %ld; i = %d(%X)", L, i, i);
i = (int) f; L = (long) f;
printf("\n f = %f; L = %ld; i = %d", f, L, i);
}
108
Thứ tự ưu tiên các toán tử
Mức Toán tử Chức năng Chiều
1 -> . [ ] () ++ hậu tố --hậu tố Lựa chọn, chỉ số… →
2 ++ -- ~ ! + - * & () sizeof Toán tử 1 ngôi, ép kiểu,… ←
• Nguyên tắc
– Biểu thức con trong ngoặc được tính toán trước
– Phép toán một ngôi đứng bên trái toán hạng đượckết hợp với toán hạng đi liền nó.
– Toán hạng đứng cạnh hai toán tử
• Nếu hai toán tử có độ ưu tiên khác nhau thì toán tử nào có độ ưu tiên cao hơn sẽ kết hợp
với toán hạng
• Nếu hai toán tử cùng độ ưu tiên thì dựa vào trật tự kết hợp của các toán tử để xác định toán
tử được kết hợp với toán hạng.
• Ví dụ:
a < 10 && 2 * b < c ≡ ( a < 10 ) && ( ( 2 * b ) < c )
Chú ý: int x = 5, a = 5 * x++; → a = 25, x = 6
110
Ví dụ
int k ,num=30;
k =num>5 ? (num <=10 ? 100 : 200): 500;
k=?
111
Tóm tắt
• Kiểu dữ liệu
– Nguyên : char, unsigned char, int, long, unsigned int, unsigned long
– Thực : float, double, long double
• Giá trị logic
– Đúng/TRUE : 1 (Khác 0)
– Sai/FALSE : 0
• Toán tử
– Một ngôi : + -; ++ --; ~ !; &; (); &, ^, |
– Hai ngôi : + - * / %; == != < <= > >=; << >>; && ||; = *= +=…
– 3 ngôi : ? :
112
Q&A
113