ChuDe3 LapTrinhCB SV

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 42

10/2/2023

Huỳnh Tuấn Anh 1

 Các khái niệm, Thuật toán


 Ngôn ngữ C
 Các kiểu dữ liệu và phép toán
 Các cú pháp lệnh
 Hàm

Huỳnh Tuấn Anh 2

1
10/2/2023

Huỳnh Tuấn Anh 3

 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.

Huỳnh Tuấn Anh 5

 Các tính chất của thuật toán (tt):


Tính có kết quả: thuật toán phải cho ra kết quả đúng trên cơ sở dữ liệu đầu vào
hợp lệ.
Tính hiệu quả: mỗi bước xử lý phải đơn giản với thời gian thực thi hữu hạn, trong
thực tế điều này có nghĩa là phải thực thi trong khoảng thời gian có thể chấp
nhận được.
Tính phổ dụng: thuật toán có thể áp dụng để xử lý một họ các bài toán.

Huỳnh Tuấn Anh 6

3
10/2/2023

 Sử dụng ngôn ngữ tự nhiên


Đầu vào: a, b thuộc R
Đầu ra: nghiệm phương trình ax + b = 0
Nếu a = 0 thì:
Nếu b = 0 thì:
Phương trình vô số nghiệm
Ngược lại:
Phương trình vô nghiệm.
Ngược lại:
Phương trình có nghiệm x = -b/a

Huỳnh Tuấn Anh 7

 Thể hiện giải thuật thông qua hình


ảnh một cách trực quan Khối giới hạn
Chỉ thị bắt đầu và kết thúc
 phù hợp với những thuật toán ngắn,
đơn giản Khối vào/ra
Nhập/Xuất dữ liệu

Khối điều khiển lựa chọn


Tùy điều kiện sẽ rẽ nhánh

Khối thao tác


Ghi thao tác cần thực hiện

Đường đi
Chỉ hướng thao tác tiếp theo

Huỳnh Tuấn Anh 8

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

Huỳnh Tuấn Anh 9

 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

Huỳnh Tuấn Anh 10

5
10/2/2023

Đầu vào: a, b thuộc R


Đầu ra: nghiệm phương trình ax + b = 0
If a = 0
If b = 0
"Phương trình vô số nghiệm"
else
"Phương trình vô nghiệm"
else
Nghiệm x = -b/a"

Huỳnh Tuấn Anh 11

 Ít được sử dụng, vì người đọc phải rành về ngôn ngữ được sử dụng

Huỳnh Tuấn Anh 12

6
10/2/2023

Huỳnh Tuấn Anh 13

 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…

Huỳnh Tuấn Anh 15

 Đặ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.

Huỳnh Tuấn Anh 16

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

Huỳnh Tuấn Anh 17

#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;
}

//Định nghĩa các hàm


Định nghĩa hàm 1
Định nghĩa hàm 2....
Huỳnh Tuấn Anh 18

9
10/2/2023

 Ngôn ngữ lập trình C có 4 kiểu cơ sở sau:


Kiểu số nguyên: giá trị của nó là các số nguyên như 2912, -1706, …
Kiểu số thực: giá trị của nó là các số thực như 3.1415, 29.12, -17.06, …
Kiểu luận lý (logic): giá trị đúng hoặc sai.
Kiểu ký tự: 256 ký tự trong bảng mã ASCII.

Huỳnh Tuấn Anh 19

Kiểu số nguyên có dấu

Kiểu (Type) Độ lớn(Byte) Miền giá trị (Range)

char 1 –128 … +127


int 4 –2.147.483.648 … +2.147.483.647
short 2 –32.768 … +32.767
long 4 hoặc 8 –2.147.483.648 … +2.147.483.647

 compiler 64 bit: kiểu long có kích thước 8 byte


 compiler 32 bit: kiểu long có kích thước 4 byte

Huỳnh Tuấn Anh 20

10
10/2/2023

 Kiểu số nguyên không dấu

Kiểu (Type) Độ lớn(Byte) Miền giá trị (Range)


unsigned char 1 0 … 255
unsigned int 4 0 … 4.294.967.295
unsigned short 2 0 … 65.535
unsigned long 4 hoặc 8 0 … 4.294.967.295

Huỳnh Tuấn Anh 21

Kiểu (Type) Độ lớn(Byte) Miền giá trị (Range)


float 4 ±3.4*10–38 … ±3.4*1038
double 8 ±1.7*10–308 … ±1.7*10308

Huỳnh Tuấn Anh 22

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.

Huỳnh Tuấn Anh 23

 Dùng để lưu các ký tự


 Kiểu char là một kiểu số nguyên do nó lưu tất cả dữ liệu ở dạng số nguyên
và không lưu trực tiếp ký tự mà chỉ lưu mã ASCII của ký tự đó.
 Các kiểu kí tự
char: 1 byte, có giá trị −128..127
unsigned char: 1 byte, có giá trị 0..255
wchar_t dùng để lưu các ký tự 2 byte (16 bit). Miền giá trị là 256 ký tự trong bảng
mã ASCII.
 Ví dụ:
char ch; // khai báo biến ch kiểu char
ch=65; // biến ch có giá trị 65
ch='A'; // biến ch có giá trị là mã ASCII của biến A, giá trị là 65

Huỳnh Tuấn Anh 24

12
10/2/2023

 Biến là đại lượng được sử dụng để lưu


trữ dữ liệu trong khi chương trình hoạt
động.
 Tên biến: Định danh dùng để phân biệt
các biến với nhau
 Khi khai báo một biến a:
Chương trình sẽ cấp một ô nhớ có kích a
thước tương ứng với kiểu dữ liệu trong
bộ nhớ chương trình cho biến a.
Thông qua biến a, chương trình có thể
ghi hay đọc dữ liệu ở ô nhớ.
Mỗi ô nhớ có một địa chỉ xác định

Huỳnh Tuấn Anh 25

 Các ký tự được sử dụng trong ngôn ngữ lập trình C gồm:


Các kí tự Latinh A, B, C, …, Z, a, b, c, …, z ;
Các chữ số thập phân 0, 1, 2, …, 9 ;
Các ký hiệu toán học + – * / = < > ( ) ;
Các ký tự đặc biệt . , : ; [ ] % \ # $ ' ";
Ký tự gạch nối _ và khoảng trắng ' ' .

Huỳnh Tuấn Anh 26

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>...;

Huỳnh Tuấn Anh 27

 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

//Cú pháp //ví dụ


#define <tênhằng> <giá trị> #define MAX 100 //Lưu ý: không có dấu ;
const <KDL> <tên hằng>=giá trị; const int MAX = 100;

 Từ khóa #define khai báo hằng được xử lý trước khi biên dịch

Huỳnh Tuấn Anh 28

14
10/2/2023

Huỳnh Tuấn Anh 29

 Các phép toán số học: +, -, *, /, %


a/b:
 Là phép chia lấy phần nguyên nếu cả a, b đều là số nguyên
 Kết quả là số thực nếu một trong hai số a, b là số thực
a%b:
 Kết quả là phần dư của phép chia a/b
 Chỉ có ý nghĩa khi a, b đều là số nguyên
 Các phép toán tự tăng, giảm: i++, ++i, i--, --i
So sánh i++ và ++i
 Nếu trong biểu thức có i++: i tham gia vào biểu thức, sau đó giá trị của i tăng lên 1;
 Nếu trong biểu thức có ++i: giá trị của i được tăng lên 1 sau đó mới tham gia vào biểu
thức

Huỳnh Tuấn Anh 30

15
10/2/2023

 Các phép toán so sánh và logic


Trả về giá trị 1 (đúng), 0 (sai)
C++ quan niệm một giá trị bất kỳ khác không là đúng và 0 là giá trị sai
 Các phép toán so sánh: ==, !=, >, >=, <, <=
 Các phép toán logic: &&, ||, ! (And, Or, Not)
 Toán tử có điều kiện: điều_kiện ? biểu_thức_1 : biểu_thức_2
Diễn giải: Nếu điều kiện đúng thì thực hiện biểu thức 1, nếu điều kiện sai thi thực
hiện biểu thức 2

Huỳnh Tuấn Anh 31

 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

Huỳnh Tuấn Anh 32

16
10/2/2023

Phép gán Ý nghĩa


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;
a@=b; a=a@b; // @ là một toán tử nào đó

Huỳnh Tuấn Anh 33

 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ử

Huỳnh Tuấn Anh 34

17
10/2/2023

TOÁN TỬ CHIỂU TÍNH TOÁN


(), [], -> LR
-, ++, --, ~ (phép đảo bit), sizeof() (toán tử 1 ngôi) RL
*, /, % LR
+, - LR
<<, >> LR
<. <=, >, >= LR
==, != LR
& (phép AND bit)
^ (phép XOR bit) LR
| (Phép OR bit) LR
&& (phép AND logic) LR
|| (phép OR logic) LR
=, +=, -=, /=, %=, &=, ^=,|=,,<<=, >>= RL

Huỳnh Tuấn Anh 35

 Sự hiệu chỉnh kiểu của biểu thức theo chiều sau:


charintlongfloatdoublelong double
Không có chiều chuyển đổi ngược lại
 Ví dụ

Huỳnh Tuấn Anh 36

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

Huỳnh Tuấn Anh 37

 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 đó

Huỳnh Tuấn Anh 38

19
10/2/2023

Huỳnh Tuấn Anh 39

 Xuất dữ liệu ra màn hình:


Cú pháp:
printf(“Chuỗi định dạng ”, Các biểu thức);

Ví dụ printf("%d-%d=%d\n",a,b, a - b);


Các ký tự hằng được in nguyên văn
Các ký tự định dạng được thay bằng giá trị của biểu thức tương ứng:
%d: ký tự định dạng số nguyên kiểu int
Các ký tự điều khiển: \n – xuống dòng; \t – dấu tab; \\ – dấu \; \“– dấu “ …
Thư viện: stdio.h

Huỳnh Tuấn Anh 40

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ố.

%o Xuất số nguyên hệ bát phân


%x Xuất số nguyên hệ thập lục phân
%c Xuất một ký tự
%s Xuất chuỗi ký tự
%e hoặc %E hoặc %g hoặc %G Xuất số nguyên dạng khoa học (nhân 10 mũ x)
Ví dụ
%d In ra số nguyên
%4d In số nguyên tối đa 4 ký số, nếu số cần in nhiều hơn 4 ký số thì in hết
%f In số thực
%6f In số thực tối đa 6 ký số (tính luôn dấu chấm), nếu số cần in nhiều hơn 6 ký số thì in hết

%.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.

Huỳnh Tuấn Anh 41

Huỳnh Tuấn Anh 42

21
10/2/2023

Nhập dữ liệu từ bàn phím


scanf(“Chuỗi định dạng”, địa chỉ của các biến);
scanf("%d %d", &a, &b);
 Trong chuỗi định dạng chỉ có ký tự định dạng và khoảng trắng.
 Dữ liệu phải được nhập vào các biến.
 Trước tên biến phải ghi dấu & - toán tử địa chỉ. Nếu không có toán tử địa chỉ, giá trị của biến
sẽ không được cập nhật
 scanf() sử dụng những ký tự không được in như ký tự khoảng trắng, ký tự phân cách (tab), ký
tự xuống dòng để quyết định khi nào một trường nhập kết thúc và bắt đầu
 Kết hợp câu lệnh printf để hướng dẫn nhập dữ liệu
 Thư viện: stdio.h

Huỳnh Tuấn Anh 43

Một số lỗi thường gặp

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

 Mẫu lệnh 1  Mẫu lệnh 2


if(điều_kiện) lệnh_1; if(điều_kiện) lệnh_1;
 Hoặc else lệnh_2;
if(điều_kiện) Hoặc
{ if(điều_kiện){
Các lệnh
Các lệnh
}
}
else{
Các lệnh
}

Huỳnh Tuấn Anh 45

 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

Huỳnh Tuấn Anh 46

23
10/2/2023

Huỳnh Tuấn Anh 47

Mô hình lệnh switch: i?

case 0: case 1: case 2:


break; break; break;

Huỳnh Tuấn Anh

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.

Huỳnh Tuấn Anh 49

Ví dụ: In số ngày của một tháng

Huỳnh Tuấn Anh 50

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

Huỳnh Tuấn Anh 51

i=1;
tong +=i;

1 2 3 4 5 6 7 8 9 10

Huỳnh Tuấn Anh 52

26
10/2/2023

i=i+1;//2
tong +=i;

1 2 3 4 5 6 7 8 9 10

Huỳnh Tuấn Anh 53

i=i+1;//3
tong +=i

1 2 3 4 5 6 7 8 9 10

Huỳnh Tuấn Anh 54

27
10/2/2023

i=i+1;//4
tong +=i

1 2 3 4 5 6 7 8 9 10

Huỳnh Tuấn Anh 55

i=i+1;//5
tong +=i;

1 2 3 4 5 6 7 8 9 10

Huỳnh Tuấn Anh 56

28
10/2/2023

i=i+1;//6
tong +=i;

1 2 3 4 5 6 7 8 9 10

Huỳnh Tuấn Anh 57

i=i+1;//7
tong +=i;

1 2 3 4 5 6 7 8 9 10

Huỳnh Tuấn Anh 58

29
10/2/2023

i=i+1;//8
tong +=i;

1 2 3 4 5 6 7 8 9 10

Huỳnh Tuấn Anh 59

i=i+1;//9
tong +=i;

1 2 3 4 5 6 7 8 9 10

Huỳnh Tuấn Anh 60

30
10/2/2023

i=i+1;//10
tong +=i;

1 2 3 4 5 6 7 8 9 10

tong = 55

Huỳnh Tuấn Anh 61

 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

<biểu thức 1>

<biểu thức 2>

Đ
<điều kiện lặp> <lệnh>

Huỳnh Tuấn Anh 63

 Tính tổng các số từ 1 đến n (n được nhập từ bàn phím)

Huỳnh Tuấn Anh 64

32
10/2/2023

S
T
Lệnh S BTĐK
T
F BTĐK

Lưu đồ vòng lặp while: Lưu đồ vòng lặp do..while:


Cú pháp: Cú pháp:
while (biểu _thức){ do{
các câu lệnh; các câu lệnh;
} }while(biểu thức);
Chú ý trong các câu lệnh của vòng lặp while, do...while phải có một câu lệnh có khả năng làm thay đổi giá trị của
biểu thức điều kiện
Huỳnh Tuấn Anh 65

Huỳnh Tuấn Anh 66

33
10/2/2023

 Tính tổng các số từ 1 đến 10

Huỳnh Tuấn Anh 67

 Lệnh break dùng để thoát ra khỏi for, while, do...while và switch


Khi có nhiều chu trình lồng nhau câu lệnh break sẽ đưa chương trình thoát khỏi
chu trình (hoặc switch) bên trong nhất chứa nó
 Câu lệnh continue
Dùng để bắt đầu một vòng mới của chu trình bên trong nhất chứa nó
Chỉ áp dụng cho các chu trình chứ không áp dụng cho switch.

Huỳnh Tuấn Anh 68

34
10/2/2023

 Tính tổng các số từ 1 đến 10;

Huỳnh Tuấn Anh 69

Huỳnh Tuấn Anh 70

35
10/2/2023

 Hàm là chương trình con trong chương trình lớn


 Lý do để xây dựng hàm
Vấn đề lớn phức tạp được phân rã thành các vấn đề nhỏ dễ quản lý hơn
Các hàm có thể được gọi nhiều lần trong chương trình chính do đó mã code của
chương trình gọn hơn.
 Trong chương trình C/C++ luôn có ít nhất một hàm đó là hàm main();

Huỳnh Tuấn Anh 71

 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

Các #include dùng để khai báo các thư viện


Các #define dùng để khai báo các hằng
Khai báo các đối tượng dữ liệu ngoài (biến, mảng, cấu
trúc, hợp, ...)
Khai báo các nguyên mẫu của hàm
Hàm main
Định nghĩa các hàm;

Huỳnh Tuấn Anh 73

 Viết hàm max tìm số lớn nhất


trong 3 số

Huỳnh Tuấn Anh 74

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

Huỳnh Tuấn Anh 75

 Khi khai báo một biến a:


Chương trình sẽ cấp một ô nhớ có kích thước
tương ứng với kiểu dữ liệu trong bộ nhớ
chương trình cho biến a.
Thông qua biến a, chương trình có thể ghi hay
đọc dữ liệu ở ô nhớ.
Mỗi ô nhớ có một địa chỉ xác định a
 Thông qua biến a ta có thể:
Thay đổi giá trị của ô nhớ tương ứng với a bằng
cách gán cho a một giá trị mới.
Truy xuất tới địa chỉ của ô nhớ: &a

Huỳnh Tuấn Anh 76

38
10/2/2023

 Con trỏ trong C/C++: là một biến kiểu địa chỉ


Ví dụ: int* px; //biến địa chỉ kiểu int
 Tham chiếu trong C: Địa chỉ của biến
Ví dụ: int x;
Tham chiếu của biến x là: &x
 Biến kiểu địa chỉ (con trỏ) có thể nhận các giá
trị là các tham chiếu
Ví dụ: px = &x
 Khác nhau giữa con trỏ và tham chiếu: px = &x
Con trỏ có thể thay đổi giá trị
Tham chiếu không thể thay đổi giá trị
 Ví dụ: không thể thực hiện phép gán &a = &b;

Huỳnh Tuấn Anh 77

 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

 Khai báo hàm với tham số là các tham chiếu


Ví dụ void swap(int &a, int &b);
 Tham chiếu có thể xem là một hằng địa chỉ với sự điều hướng tự động, có
nghĩa là
Không cần phải sử dụng toán tử * khi truy xuất đến giá trị của biến trong cài đặt
thân hàm, compiler tự động làm công việc này.
Khi gọi hàm, chỉ cần truyền các biến, compiler sẽ tự động chuyển thành các tham
chiếu.

Huỳnh Tuấn Anh 79

Huỳnh Tuấn Anh 80

40
10/2/2023

Huỳnh Tuấn Anh 81

Tệp tiêu đề Nội dung trong tệp tiêu đề


stdio.h Các hàm liên quan đến nhập, xuất.
math.h Các hàm toán học.
stdlib.h Các hàm để thực hiện các chức năng chung (số ngẫu
nhiên, cấp phát vùng nhớ, tìm kiếm, và xếp thứ tự, ..)
string.h Các hàm thao tác với các mảng ký tự (chuỗi).
time.h Các hàm để thao tác ngày và giờ.

Huỳnh Tuấn Anh 82

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

You might also like