Professional Documents
Culture Documents
ChuDe3 LapTrinhCB SV
ChuDe3 LapTrinhCB SV
ChuDe3 LapTrinhCB SV
1
10/2/2023
Chương trình: Một tập hợp các câu lệnh theo một trật tự xác định nhằm tự
động thực hiện một số chức năng hoặc giải quyết một vấn đề bằng máy tính
Lập trình viên: Người viết các chương trình máy tính
Trình biên dịch (Compiler):
Chương trình máy tính làm công việc dịch một chuỗi các câu lệnh được viết bằng
một ngôn ngữ lập trình (gọi là ngôn ngữ nguồn hay mã nguồn), thành một
chương trình tương đương nhưng ở dưới dạng một ngôn ngữ máy tính mới (gọi
là ngôn ngữ đích) và thường là ngôn ngữ ở cấp thấp hơn, như ngôn ngữ máy.
Trình thông dịch (Interpreter):
Chương trình máy tính trực tiếp thực thi các lệnh được viết bằng một ngôn ngữ
lập trình hay ngôn ngữ kịch bản, mà không yêu cầu phải biên dịch trước thành
một chương trình ngôn ngữ máy
Huỳnh Tuấn Anh 4
2
10/2/2023
Thuật toán là tập hợp (dãy) hữu hạn các chỉ thị (hành động) được định nghĩa
rõ ràng nhằm giải quyết một bài toán cụ thể nào đó.
Các tính chất của thuật toán
Tính hữu hạn: thuật toán phải kết thúc thực thi sau một số lượng hữu hạn các
bước xử lý.
Tính xác định: mỗi bước xử lý phải được mô tả rõ ràng, chính xác, không nhập
nhằng.
Tồn tại dữ liệu đầu vào: thuật toán phải có dữ liệu đầu vào hợp lệ, được mô tả rõ
ràng.
3
10/2/2023
Đường đi
Chỉ hướng thao tác tiếp theo
4
10/2/2023
Bắt đầu
a, b
Đ S
a = 0
Đ S Tính
b = 0
x = -b/a
Xuất Xuất
Xuất x
“PTVSN” “PTVN”
Kết
thúc
Dựa vào cú pháp của một hoặc một nhóm ngôn ngữ lập trình thông dụng
nào đó để hình thành nên cú pháp của mã giả
Nhận được sự hỗ trợ từ ngôn ngữ tự nhiên và hệ thống ký hiệu toán học nên
giải thuật được mô tả bằng công cụ này vừa gần gũi với con người, vừa
không quá xa với ngôn ngữ lập trình.
Cách tốt nhất để mô tả thuật toán
5
10/2/2023
Ít được sử dụng, vì người đọc phải rành về ngôn ngữ được sử dụng
6
10/2/2023
Khái niệm ngôn ngữ lập trình: ngôn ngữ được lập trình viên sử dụng để
viết chương trình cho máy tính.
Các loại ngôn ngữ lập trình gồm:
Ngôn ngữ máy (Machine Language): Mã lệnh chỉ ở dạng nhị phân
Hợp ngữ (Assembly Language): Cấu trúc giống như mã máy nhưng các chỉ thị có
thể viết dưới dạng chữ. Chương trình hợp ngữ cũng cần phải dịch ra mã máy
mới có thể chạy được
Ngôn ngữ cấp cao (High level language).
Các câu lệnh dạng văn bản, gần với ngôn ngữ tự nhiên
Dễ diễn đạt các ý tưởng trong lập trình
Để máy tính thực hiện được các lệnh trong chương trình nguồn thì phải có một
"chương trình dịch" để dịch chương trình nguồn thành dạng chương trình có khả năng
thực thi (chương trình đích).
Huỳnh Tuấn Anh 14
7
10/2/2023
Ngôn ngữ lập trình C được phát triển từ đầu thập niên 1970 bởi Dennis
Ritchie tại phòng thí nghiệm Bell và được dùng trong hệ điều hành UNIX
Ngôn ngữ C được dùng cho các lập trình viên chuyên nghiệp để viết các hệ
điều hành, cài đặt các hệ quản trị cơ sở dữ liệu, các tính toán số trong các
lĩnh vực khoa học khác
Đặc điểm:
- Tính cô đọng (compact): C chỉ có 32 từ khóa chuẩn và 40 toán tử chuẩn, được
biểu diễn bằng những chuỗi ký tự ngắn gọn.
- Tính cấu trúc (structured): C có một tập hợp những chỉ thị của lập trình như cấu
trúc lựa chọn, lặp…
Đặc điểm
Tính tương thích (compatible): C có bộ tiền xử lý và một thư viện chuẩn vô cùng
phong phú nên khi chuyển từ máy tính này sang máy tính khác các chương trình
viết bằng C vẫn hoàn toàn tương thích.
Tính linh động (flexible): C là một ngôn ngữ rất uyển chuyển về cú pháp, chấp
nhận nhiều cách thể hiện, có thể thu gọn kích thước của các mã lệnh làm
chương trình chạy nhanh hơn.
Biên dịch (compile): Cho phép biên dịch nhiều tập tin chương trình riêng rẽ thành
các tập tin đối tượng (object) và liên kết (link) các đối tượng đó lại với nhau thành
một chương trình có thể thực thi được (executable) thống nhất.
8
10/2/2023
Môi trường tích hợp để lập trình viên phát triển chương trình bao gồm các
công cụ:
Soạn thảo mã nguồn
Quản lý hệ thống tập tin mã nguồn
Quản lý các phiên bản của mã nguồn
Gỡ lỗi (Debug)
Biên dịch
Một số IDE dùng cho C/C++
Dev C/C++
Visual Studio Code
Code::Blocks
#include
#define
typedef
Khai báo các biến ngoài
Function prototype
int main(){
Các lệnh, lời gọi hàm
return;
}
9
10/2/2023
10
10/2/2023
11
10/2/2023
Kí hiệu bool
Chỉ nhận hai giá trị
Khác 0: Đúng, true
bằng 0: Sai, false
Các phép toán luận lý:
Phép logic and (và): ký hiệu là &&, biểu thức A && B chỉ đúng khi cả A và B đều
đúng.
Phép logic or (hay):
ký hiệu là ||, biểu thức A || B chỉ sai khi cả A và B đều sai.
Phép logic not (phủ định): ký hiệu là !, biểu thức A chỉ đúng khi A sai.
12
10/2/2023
13
10/2/2023
Dãy ký tự liên tiếp (không chứa dấu cách) và phải bắt đầu bằng chữ cái
hoặc gạch dưới _.
Đinh danh có phân biệt kí tự in hoa và thường.
Không được trùng với từ khóa có sẵn trong C
Số lượng chữ cái dùng để phân biệt tên gọi có thể tối đa 255 kí tự.
Cú pháp khai báo biến
<Kiểu dữ liệu> <tên_biến>;
<Kiểu dữ liệu> <tên_biến_1>, <tên_biến_2>...;
<Kiểu dữ liệu> <tên_biến = giá_trị>;
<Kiểu dữ liệu> <tên_biến_1 = giá_trị_1>, <tên_biến_2 = giá_trị_2>...;
Hằng là đại lượng được sử dụng để lưu trữ dữ liệu có giá trị không đổi khi
chương trình hoạt động. Được phân biệt qua tên gọi (định danh).
Cách khai báo hằng
Từ khóa #define khai báo hằng được xử lý trước khi biên dịch
14
10/2/2023
15
10/2/2023
biến = (điều_kiện) ? a: b ;
Nếu điều_kiện đúng biến nhận giá trị a, ngược lại biến nhận giá trị b
Ví dụ
Tìm số lớn nhất trong hai số a, b
max = (a>b)? a:b
16
10/2/2023
Biểu thức là dãy kết hợp các toán hạng, toán tử, dấu () theo một qui tắc
nhất định
Các toán hạng: Hằng , biến, hàm
Thứ tự ưu tiên của các toán tử trong C++ như sau
1. các phép toán trong dấu ()
2. Các phép toán 1 ngôi (tự tăng, giảm, lấy địa chỉ, lấy nội dung con trỏ …)
3. Các phép toán số học.
4. Các phép toán quan hệ, logic.
5. Các phép gán.
Nên sử dụng các dấu () trong biểu thức khi không rõ về trật tự ưu tiên
của các toán tử
17
10/2/2023
18
10/2/2023
Trong một số trường hợp ta cần ép kiểu để được kết quả tính toán như mong muốn
VD
int a=5; b=2;
printf(“%d”,a/b);
printf(“%f”, float(a)/b);
C++ chấp nhận 2 cách viết ép kiểu:
Tên_kiểu(biến) // viết theo cách của C++
(Tên_kiểu) biến //Viết theo cách của C
Chỉ nên ép từ kiểu dữ liệu có số byte ít sang kiểu dữ liệu có số byte nhiều.
Phép ép kiểu theo chiều ngược lại sẽ gây mất dữ liệu
VD: ép kiểu tử kiểu float sang kiểu int sẽ cắt bỏ đi phần thực của số thực
Trong C/C++ mỗi câu lệnh được kết thúc bởi dấu ;
Mỗi khối lệnh được bắt đầu bằng dấu { và kết thúc bằng dấu }
Tất cả các biến được khai báo trong khối lệnh nào thì chỉ có tác dụng trong
khối lệnh đó
19
10/2/2023
20
10/2/2023
%d Xuất số nguyên
%[.số chữ số thập phân] f Xuất số thực có <số chữ số thập phân> theo quy tắc làm tròn số.
%.3f In số thực có 3 số lẻ, nếu số cần in có nhiều hơn 3 số lẻ thì làm tròn.
21
10/2/2023
Lỗi Ví dụ
Thiếu dấu & scanf(“%d”, a);// lỗi này rất hay gặp phải
Thiếu %d... cho biến scanf(“%d”, &a, &b);
Sai kiểu dữ liệu scanf(“%f”, &a);//a là biến kiểu số nguyên
Không được định dạng scanf(“%9d”, &a);
Huỳnh Tuấn Anh 44
22
10/2/2023
Câu lệnh if (có else hoặc không có else) có thể có nhiều câu lệnh if khác (có
else hoặc không có else) lồng nhau
Lệnh else thuộc về if phía trên gần nó nhất mà lệnh if đó chưa có một lệnh else
thuộc về nó
Biểu thức điều kiện
Là một biểu thức logic
Hoặc là một biểu thức số học bất kỳ
Giá trị khác 0 của biểu thức được hiểu là true
Giá trị 0 của biểu thức được hiểu là false
23
10/2/2023
24
10/2/2023
Cú pháp:
switch <biến/biểu_thức>{
case giá_trị_1: lệnh_1; break;
case giá_trị_2: lệnh_2; break;
…
case giá_trị_n-1: lệnh_n-1;
break;
[default: lệnh_n ;]
}
biến/biểu thức điều khiển phải có giá trị rời rạc.
Nếu trong các dãy lệnh ứng với case i không có lệnh break thì dãy lệnh i và
các dãy lệnh sau nó sẽ thực hiện nếu biểu thức điều khiển có giá trị i.
25
10/2/2023
tong = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10
tong =0;
1 2 3 4 5 6 7 8 9 10
i=1;
tong +=i;
1 2 3 4 5 6 7 8 9 10
26
10/2/2023
i=i+1;//2
tong +=i;
1 2 3 4 5 6 7 8 9 10
i=i+1;//3
tong +=i
1 2 3 4 5 6 7 8 9 10
27
10/2/2023
i=i+1;//4
tong +=i
1 2 3 4 5 6 7 8 9 10
i=i+1;//5
tong +=i;
1 2 3 4 5 6 7 8 9 10
28
10/2/2023
i=i+1;//6
tong +=i;
1 2 3 4 5 6 7 8 9 10
i=i+1;//7
tong +=i;
1 2 3 4 5 6 7 8 9 10
29
10/2/2023
i=i+1;//8
tong +=i;
1 2 3 4 5 6 7 8 9 10
i=i+1;//9
tong +=i;
1 2 3 4 5 6 7 8 9 10
30
10/2/2023
i=i+1;//10
tong +=i;
1 2 3 4 5 6 7 8 9 10
tong = 55
Cú pháp
for([biểu thức 1] ; [điều kiện lặp] ; [biểu thức 2]) {
khối lệnh lặp;
}
Các biểu thức trong dấu ngoặc vuông có thể có hay không tùy ý
[biểu thức 1]: biểu thức dùng để tạo giá trị ban đầu cho biến điều khiển.
Chỉ sử dụng trong lần lặp đầu tiên
[điều kiện lặp]: điều kiện để tiếp tục vòng lặp.
Được sử dụng để kiểm tra trong mỗi lần lặp
[biểu thức 2]: biểu thức dùng để thay đổi giá trị của biến điều khiển.
Được sử dụng sau khi kết thúc mỗi lần lặp
Huỳnh Tuấn Anh 62
31
10/2/2023
Đ
<điều kiện lặp> <lệnh>
32
10/2/2023
S
T
Lệnh S BTĐK
T
F BTĐK
33
10/2/2023
34
10/2/2023
35
10/2/2023
Các hàm trong C/C++ có vai trò ngang nhau không được xây dựng một hàm bên
trong một hàm khác
Khai báo hàm:
<kiểu giá trị trả về> <tên hàm>([khai báo các đối số]);
Định nghĩa hàm:
<kiểu giá trị trả về> tên_hàm(khai báo các đối){
khai báo các biến cục bộ
các câu lệnh
[return [biểu thức];] // Giá trị trả về của hàm
}
Lời gọi hàm khi sử dụng hàm:
tên_hàm(danh sách đối thực sự);
Huỳnh Tuấn Anh 72
36
10/2/2023
37
10/2/2023
Biến cục bộ: Được khai báo trong một phạm vi { } cụ thể.
Phạm vi sử dụng của biến cục bộ được bắt đầu từ lúc khai báo cho đến khi gặp
toán tử phạm vi } tương ứng
Biến toàn cục: Biến toàn cục là biến được khai báo trước hàm main. Vị trí
của biến toàn cục thường nằm sau khai báo các tập thư viện và khai báo
hằng.
Phạm vi biến toàn cục được sử dụng bắt đầu từ vị trí khai báo cho đến hết
chương trình.
Trong cùng một phạm vi { } không được phép khai báo hai biến cùng tên.
Nếu có hai biến cùng tên nhưng khác phạm vi thì biến được khai báo trong
phạm vi hẹp hơn sẽ được ưu tiên sử dụng
38
10/2/2023
Trong C/C++ chỉ truyền tham số cho hàm theo một kiểu duy nhất: truyền giá trị
Giá trị của tham số trước và sau gọi hàm không thay đổi
Truyền nội giá trị biến (nội dung ô nhớ) cho hàm
Giá trị biến sau khi thực hiện xong hàm không thay đổi
Truyền địa chỉ biến cho hàm
Địa chỉ biến sau khi ra khỏi hàm không thay đổi
Giá trị biến sau khi ra khỏi hàm có thể thay đổi
Có hai cách truyền theo địa chỉ:
Truyền tham số bằng con trỏ (sẽ học sau)
Truyền tham số bằng tham chiếu (khai báo hàm với các tham số &a, &b...)
Trong trường hợp không muốn thay đổi nội dung của con trỏ hay biến tham
chiếu ta khai báo thêm từ khóa const vào trước tên kiểu của biến con trỏ hay
biến tham chiếu
Huỳnh Tuấn Anh 78
39
10/2/2023
40
10/2/2023
41
10/2/2023
Hàm Ý nghĩa
double sqrt(double x); Tính căn bậc hai của số thực x ≥ 0
double pow(double x, double y); Tính x lũy thừa y, xy với x ≥ 0
double exp(double x); Tính ex với e là cơ số logarit tự nhiên (với e≈2.71828)
double log(double x); Tính logarit tự nhiên (logarit cơ số e) của x
double log10(double x); Tính logarit cơ số 10 của x, log10(x)
int abs(int x);
long labs(long x); Tính trị tuyệt đối |x| với x nguyên (int), nguyên dài (long), số thực (double)
double fabs(double x);
double cos(double x);
double sin(double x); Các hàm lượng giác: tính cos(x), sin(x), tg(x) của góc x cho bằng đơn vị radian
double tan(double x);
double acos(double x);
Các hàm lượng giác ngược: tính góc arccos(x), arcsin(x), arctg(x) khi đã biết trước giá trị
double asin(double x);
lượng giác x
double atan(double x);
double floor(double x); Trả về số nguyên lớn nhất không vượt quá x
double ceil(double x); Trả về số nguyên nhỏ nhất lớn hơn hay bằng x;
Huỳnh Tuấn Anh 83
42