Trung tâm Đào tạo E-Learning
Cơ hội học tập cho mọi người
BÀI 2: GIỚI THIỆU VỀ NGƠN NGỮ LẬP TRÌNH C/C++
Mục đích:
Bài này giới thiệu các vấn đề cơ bản về ngơn ngữ lập trình C/C++. Bắt đầu từ các
khái niệm đơn giản như tập ký hiệu, tên/từ khóa, câu lệnh, khối lệnh... cho đến các quy
tắc viết lệnh, viết chương trình. Một khái niệm rất quan trọng xuyên suốt quá trình
mơn học là biến nhớ, cách khai báo và các vấn đề sử dụng. Trọng tâm là các kiểu dữ
liệu, phép toán và cách viết biểu thức. Các quy tắc viết lệnh nhập, lệnh in dữ liệu và
một số lệnh đơn giản cũng được trình bày trong bài này. Trong bài, mỗi vấn đề đều có
các ví dụ minh họa về cách viết lệnh, chỉ ra các trường hợp sử dụng và bài tập nhằm
nêu bật được vai trò của từng vấn đề trong lập trình C/C++.
2.1. Các thành phần cơ bản của ngơn ngữ lập trình
Chúng ta thấy trong ngôn ngữ tự nhiên như tiếng Anh hay tiếng Việt được cấu
tạo từ các phần tử nhỏ nhất, cơ bản nhất là bảng các chữ cái và các dấu. Bằng các quy
tắc, cú pháp và ngữ nghĩa để ghép chúng lại với nhau tạo nên các từ, sau đó ghép các
từ với nhau tạo nên câu, đoạn văn và cuối cùng là tạo nên bài văn.
Ngơn ngữ lập trình cũng vậy, được cấu tạo từ những phần tử cơ bản được gọi là
bảng ký hiệu. Một chương trình phần mềm được hình thành từ các ký hiệu này bằng
cách áp dụng các quy tắc của ngơn ngữ lập trình được áp dụng và dựa trên các quy
trình đã được thiết kế cho chương trình.
Sau đây là các khái niệm cơ bản trong ngơn ngữ lập trình nói chung và các quy
tắc áp dụng trong ngơn ngữ lập trình C/C++.
Cơ sở lập trình – Bài 2
Trang 1
Trung tâm Đào tạo E-Learning
Cơ hội học tập cho mọi người
2.1.1. Bảng ký hiệu
Như đề cập ở trên, bảng ký hiệu gồm các phần tử cơ bản nhất của một ngơn ngữ
lập trình. Hầu hết các ngơn ngữ đều sử dụng bảng ký hiệu là các chữ cái, chữ số và các
dấu trong ngôn ngữ tự nhiên (tiếng Anh). Điều này sẽ làm đơn giản đối với người lập
trình trong khi áp dụng để viết chương trình.
Cụ thể với ngơn ngữ C/C++, bảng ký hiệu được sử dụng bao gồm:
- Nhóm các chữ cái: chữ in hoa A,B,C,...,Z và chữ in thường a,b,c,...,z
- Nhóm các chữ số: 0,1,2,...,9
- Nhóm các dấu: +,-,*,/,>,<,=,&,...
Một số ngôn ngữ, chẳng hạn Pascal, Visual Basic,… không phân biệt chữ hoa
hay chữ thường. Trong khi một số khác, trong đó có C/C++, sẽ phân biệt giữa chữ hoa
và chữ thường, do đó chúng ta phải thận trọng khi sử dụng các chữ cái hoa và thường.
2.1.2. Tên và từ khóa
Tên (name) là một dãy các chữ cái, chữ số và dấu gạch nối. Tên phải bắt đầu
bằng chữ cái hoặc dấu gạch nối (không được bắt đầu bằng chữ số, trong tên không
dùng dấu cách và các dấu đặc biệt khác).
Trong các ngơn ngữ lập trình, tên được dùng để định danh các thành phần trong
chương trình như tên biến, tên hàm, tên hằng, tên con trỏ,… sẽ đề cập chi tiết ở các
phần sau.
Ví dụ:
Baitap1, Hanoi2, Viet3nam là những tên đúng.
1Baitap, Ha noi, Viet%nam là những tên sai, vì chữ số đứng đầu hay sử dụng
dấu cách, ký hiệu đặc biệt %.
Có một nhóm các tên do ngơn ngữ lập trình quy định để đưa ra các quy tắc viết
lệnh trong chương trình được gọi là từ khóa (keywords). Người lập trình khơng được
đặt các tên trong chương trình trùng với hệ thống từ khóa của ngơn ngữ lập trình.
Cơ sở lập trình – Bài 2
Trang 2
Trung tâm Đào tạo E-Learning
Cơ hội học tập cho mọi người
Trong C/C++, nhóm các từ khóa được giới thiệu trong bảng sau (ý nghĩa của
chúng sẽ được trình bày chi tiết và cách áp dụng ở các phần tiếp theo).
__asm
else
main
struct
__assume
enum
__multiple_inheritanc
switch
e
auto
__except
__single_inheritance
template
__based
explicit
__virtual_inheritance
this
bool
extern
mutable
thread
break
false
naked
throw
case
__fastcall
namespace
true
catch
__finally
new
try
__cdecl
float
noreturn
__try
char
for
operator
typedef
class
friend
private
typeid
const
goto
protected
typename
const_cast
if
public
union
continue
inline
register
unsigned
__declspec
__inline
reinterpret_cast
using declaration,
using directive
default
int
return
uuid
delete
__int8
short
__uuidof
dllexport
__int16
signed
virtual
dllimport
__int32
sizeof
void
do
__int64
static
volatile
double
__leave
static_cast
wmain
Cơ sở lập trình – Bài 2
Trang 3
Trung tâm Đào tạo E-Learning
dynamic_cast
long
Cơ hội học tập cho mọi người
__stdcall
while
Ngồi ra, có một nhóm các tên được cung cấp bởi mơi trường lập trình thơng qua
thư viện được gọi là tên chuẩn. Nhóm này được dùng để định danh các thành phần có
sẵn trong hệ thống các thư viện, phục vụ cho việc khai thác và sử dụng thư viện trong
chương trình.
Ví dụ về một số tên chuẩn trong C/C++
cout, cin, scanf, printf, gets, getch, fstream...
2.1.3. Các kiểu dữ liệu
Chúng ta đã biết máy tính khơng thể chứa hết mọi thứ thông tin trong thực tế,
cũng như vậy trong các ngơn ngữ lập trình chỉ cung cấp một kiểu dữ liệu nguyên thủy
(primitive types). Trong C/C++ có các kiểu cơ bản sau để người lập trình có thể sử
dụng trong việc biểu diễn, tính tốn và xử lý thơng tin trong chương trình.
a) Kiểu ký tự: dùng để chứa ký tự trong bảng ASCII
- Tên kiểu : char, unsigned char
- Miền giá trị : một trong 256 ký tự thuộc bảng mã ASCII
- Độ lớn : 1 byte
Trong ngôn ngữ C/C++, kiểu ký tự được lưu dưới dạng mã của nó từ 0 đến 255
quy định trong bảng ASCII như sau (Dec là mã thập phân, Char (Chr) là ký tự).
b) Kiểu số :
Chứa dữ liệu số nguyên hoặc số thực, bảng sau thể hiện tên kiểu (Type), độ lớn
tính bằng bít (Length) và miền giá trị (Range)
Tên kiểu
Độ lớn (bít)
Miền giá trị có dấu
unsigned char
8
0 đến 255 (mã ký tự)
char
8
-128 đến 127
enum
16
-32,768 đến 32,767
unsigned int
16
0 đến 65,535
Cơ sở lập trình – Bài 2
Trang 4
Trung tâm Đào tạo E-Learning
Cơ hội học tập cho mọi người
int
16
-32,768 đến 32,767
unsigned long
32
0 đến 4,294,967,295
long
32
-2,147,483,648 đến 2,147,483,647
float
32
3.4*10-38 đến 3.4*10+38
double
64
1.7*10-308 đến 1.7*10+308
long double
80
3.4*10-4932 đến 3.4*10+4932
Thông thường chúng ta hay dùng kiểu int cho số nguyên và kiểu float cho số
thực. Tuy nhiên, một số trường hợp có thể phải dùng các kiểu phù hợp. Chẳng hạn,
kiểu double có độ chính xác cao hơn float, tức là nó chứa được số thực có phần thập
phân gồm nhiều chữ số hơn.
Ví dụ: cho biểu thức sau,
sin(0.1)
10 10
,
nếu dùng kiểu float để chứa thì kết quả sẽ bằng 0, khi đó phải dùng kiểu double.
Tuy nhiên, khi lũy thừa 10 của biểu thức trên thì kiểu double khơng chứa được, mà
phải dùng kiểu long double.
c) Kiểu lơgíc:
Biểu diễn giá trị đúng/sai trong chương trình,
- Tên kiểu : bool
- Miền giá trị : true, false
- Độ lớn : 1 byte
Tuy nhiên, trong ngôn ngữ C/C++ cũng xem xét số nguyên như là kiểu lơgíc với
giá trị 0 tương ứng sai, giá trị 1 hoặc khác 0 tương ứng đúng.
2.1.4. Khái niệm về hằng và biến nhớ
a) Đại lượng hằng trong chương trình
Cơ sở lập trình – Bài 2
Trang 5
Trung tâm Đào tạo E-Learning
Cơ hội học tập cho mọi người
Hằng (consts) là một đại lượng không thể thay đổi giá trị trong tồn bộ chương
trình. Nó có thể là số nguyên, số thực, ký tự hoặc chuỗi ký tự. Để biểu diễn các giá trị
hằng, tùy theo từng ngôn ngữ, nhưng trong C/C++ ta viết như sau:
- Đối với số ngun: chúng ta viết bình thường như trong tốn học (các chữ số
liền nhau), ví dụ 100 hoặc 175 hoặc 200000.
- Đối với số thực: chúng dùng dấu chấm để ngăn cách phần nguyên và phần thập
phân, ví dụ 1.5 hoặc 0.15 hoặc 5.0.
- Đối với ký tự: chúng ta viết vào trong hai nháy đơn ( „...‟ ), ví dụ „a‟ hay „Z‟
hay „0‟ hay „@‟.
- Đối với chuỗi ký tự: chúng ta viết các ký tự vào trong hai nháy kép ( “...” ), ví
dụ “Ha noi Viet nam” hoặc “Ngay 10 thang 11 nam 1976” hoặc “Hello, how are
you?”.
Trong C/C++, một hằng có thể được viết trực tiếp trong chương trình hoặc được
định nghĩa và sử dụng thông qua một tên hằng được gọi là macro (#define) như sau:
#define
tên_hằng
giá_trị_cần_định_nghĩa
Ví dụ: chúng ta định nghĩa hai hằng sau
#define
MY_NAME
#define
MY_BIRTHYEAR
“Duong Nguyen Long Khanh”
2002
Từ đó trở đi bất kỳ chỗ nào sử dụng một trong hai tên hằng trên thì máy tự động
thay thế bởi giá trị tương ứng.
b) Biến nhớ
Biến nhớ (variables) là một đại lượng có thể thay đổi giá trị trong chương trình.
Biến nhớ được sử dụng để chứa dữ liệu của chương trình, do vậy nó rất quan trọng
trong lập trình, nếu khơng có biến nhớ thì chúng ta khơng thể lập trình được bởi vì
khơng có chỗ chứa dữ liệu cho việc tính tốn và xử lý.
Mỗi biến nhớ sẽ được quy định một kiểu dữ liệu, quy định này đảm bảo biến nhớ
chứa được các dữ liệu tương ứng với kiểu đó và các tính tốn xử lý trên biến.
Cơ sở lập trình – Bài 2
Trang 6
Trung tâm Đào tạo E-Learning
Cơ hội học tập cho mọi người
Mỗi biến nhớ sẽ chiếm một ô nhớ trên bộ nhớ của máy tính, độ lớn của ơ nhớ
phụ thuộc vào kiểu dữ liệu của biến đó (xem bảng kiểu dữ liệu ở trên).
Ví dụ: biến kiểu int chỉ chứa được các số nguyên trong miền cho phép từ -
32768 đến 32767, biến kiểu float chứa được số thực, biến kiểu char chứa được ký tự...
Trong C/C++, để sử dụng một biến nhớ nào đó chúng ta phải khai báo theo quy
tắc sau:
kiểu_dữ_liệu
tên_biến ;
Ví dụ: khai một biến số nguyên a và một biến số thực b như sau
int
a;
float
b;
2.1.5. Các phép tốn cơ bản
Các ngơn ngữ lập trình đều cung cấp các phép toán để tác động lên dữ liệu nhằm
tính tốn và xử lý. Trong C/C++ cung cấp danh sách các phép toán (được gọi là các
toán tử - operators) được viết như sau,
và được chia thành các nhóm.
a) Các phép toán về số học
- Ký hiệu : +, -, *, /, %
- Ý nghĩa : cộng, trừ, nhân, chia, chia dư
- Dữ liệu tác động : kiểu số nguyên hoặc số thực (trong đó phép % chỉ tác động
lên số nguyên)
- Kết quả : các phép toán số học cho kết quả là dữ liệu kiểu số
Cơ sở lập trình – Bài 2
Trang 7
Trung tâm Đào tạo E-Learning
Cơ hội học tập cho mọi người
Các phép tốn này là 2 ngơi, tức là nó sẽ tác động lên 2 dữ liệu để cho ra kết quả
tương ứng. Cách viết như sau:
vế_trái
ký_hiệu_phép_tốn
vế_phải
Ví dụ:
5 + 3 hoặc 5 - 3 hoặc 5 * 3 hoặc 5 / 3 hoặc 5 % 3
Chú ý: Đối với phép chia ( / ) nếu hai vế là dữ liệu số nguyên thì máy sẽ chia lấy
phần nguyên, nếu một trong vế là số thực thì máy cho kết quả chính xác.
Ví dụ:
7/4 sẽ cho kết quả là 1 (là phần nguyên của 7 chia 4)
7.0/4 hoặc 7/4.0 sẽ cho kết quả là 1.75
7%4 sẽ cho kết quả là 3 (là phần dư của 7 chia 4)
b) Các phép toán quan hệ
- Ký hiệu : >, <, >=, <=, ==, !=
- Ý nghĩa : lớn hơn, nhỏ hơn, lớn hơn hoặc bằng, nhỏ hơn hoặc bằng, so sánh
bằng và khác.
- Dữ liệu tác động : là các dữ liệu kiểu số hoặc chữ, nếu là chữ thì máy sẽ so sánh
mã ASCII của các chữ đó.
- Kết quả : phép tốn quan hệ cho kết quả là lơgíc (đúng hoặc sai)
Ví dụ:
5 > 3 sẽ cho kết quả đúng
7 <= 7 sẽ cho kết quả đúng
6 == 5 sẽ cho kết quả sai
„A‟ == „a‟ sẽ cho kết quả sai
„A‟ < „a‟ sẽ cho kết quả đúng
c) Các phép kết nối lơgíc
- Ký hiệu : &&, ||, !
- Ý nghĩa : và, hoặc, phủ định
Cơ sở lập trình – Bài 2
Trang 8
Trung tâm Đào tạo E-Learning
Cơ hội học tập cho mọi người
- Dữ liệu tác động : là các dữ liệu có giá trị đúng hoặc sai (kiểu lơgíc)
- Kết quả : phép tốn kết nối lơgíc cho kết quả là lơgíc (đúng hoặc sai)
Ta có bảng kết quả của phép kết nối lơgíc trên hai đại lượng lơgic (đúng/sai) E1
và E2 như sau:
E1
E2
E1 && E2
E1 || E2
! E1
Đúng
Đúng
Đúng
Đúng
Sai
Đúng
Sai
Sai
Đúng
Sai
Sai
Đúng
Sai
Đúng
Đúng
Sai
Sai
Sai
Sai
Đúng
Chú ý: phép và (&&) cho kết quả đúng khi và chỉ khi cả 2 toán hạng đều đúng,
phép hoặc (||) cho kết quả sai khi và chỉ khi cả 2 toán hạng đều sai, phép phủ định (!)
cho kết quả ngược lại.
Ví dụ:
3 && 5 sẽ cho kết quả đúng vì máy hiểu số 3 và 5 là giá trị đúng (khác 0)
6 || 0 sẽ cho kết quả đúng
! 0 sẽ cho kết quả đúng vì máy hiểu số 0 là giá trị sai
! (4 > 5) sẽ cho kết quả đúng
d) Phép gán và biểu thức
Phép gán thực hiện tính toán và chuyển dữ liệu vào biến nhớ trong chương trình,
cách thức như sau:
vế_trái = vế_phải ;
Máy sẽ thực hiện tính tốn vế phải và đưa kết quả vào vế trái, do đó vế trái ln
ln là một biến nhớ. Vế phải có thể là một giá trị hằng, một biến nhớ hoặc một biểu
thức (tức gồm các phép toán và dữ liệu để tính tốn).
Một biểu thức có thể sử dụng thêm các cặp dấu mở đóng ngoặc nhằm đặt sự ưu
tiên thực hiện cao nhất từ trong ra ngồi.
Cơ sở lập trình – Bài 2
Trang 9
Trung tâm Đào tạo E-Learning
Cơ hội học tập cho mọi người
Ví dụ:
a = 5;
b = 5 + 3;
x = 17.0/2;
y = (2.5+4*2)/(2+4/(1.5-3));
e) Các phép tốn thao tác bít
Các phép tốn này sẽ tác động lên từng bít của hai tốn hạng để thực hiện theo
bảng kết quả sau:
Ví dụ:
5 & 3 sẽ cho kết quả là 1
5 | 3 sẽ cho kết quả là 7
5 ^ 3 sẽ cho kết quả là 4
Minh họa bằng hình vẽ dưới dạng các bít như sau:
PT
5&3
5|3
5^3
5
1
0
1
1
0
1
1
0
1
3
0
1
1
0
1
1
0
0
1
KQ
0
0
1
1
1
1
1
0
0
f) Các phép tốn mở rộng
Ngồi các phép tốn cơ bản trên, trong ngơn ngữ C cung cấp một số phép tốn
mở rộng giúp cho người lập trình viết chương trình thuận tiện và nhanh hơn, bao gồm:
- Các phép tăng 1, giảm 1 : ++ và -Cơ sở lập trình – Bài 2
Trang 10
Trung tâm Đào tạo E-Learning
Cơ hội học tập cho mọi người
Cách viết phép toán này như sau:
vế_trái ++
và
vế_trái --
++ vế_phải
và
-- vế_phải
hoặc
Chú ý: Phép tăng giảm tác động lên một dữ liệu, có thể sử dụng tiền tố hoặc hậu
tố và sự khác nhau đó là thứ tự ưu tiên khi thực hiện phép toán. Tiền tố sẽ được ưu tiền
cao hơn so với hậu tố và so với những phép tốn khác.
Ví dụ:
a = 5; và
b = a++; thì b sẽ có giá trị bằng 5 và a sẽ có giá trị bằng 6, hoặc
b = ++a; thì kết quả cả b và a đều bằng 6
Phép tăng giảm chỉ thực hiện trên các biến nhớ dữ liệu kiểu số ngun (khơng
thực hiện được trên hằng số hoặc số thực).
Ví dụ:
5++ sẽ báo sai, hoặc
(a + 7) ++ cũng báo sai, máy tính khơng thực hiện được.
- Các phép kết hợp với gán : +=, -=, *=, /=, %=,...
Cách viết phép tốn kết hợp:
vế_trái
ký_hiệu_phép_tốn
vế_phải
Ví dụ:
a = 5; và
a += 7; sẽ cho kết quả a bằng 12, hoặc
a %=3; sẽ cho kết quả a bằng 2, hoặc
a /=4.0; sẽ cho kết quả a bằng 1.25.
Cơ sở lập trình – Bài 2
Trang 11
Trung tâm Đào tạo E-Learning
Cơ hội học tập cho mọi người
g) Phép chuyển đổi kiểu dữ liệu
Phép chuyển đổi kiểu dữ liệu là việc chuyển một dữ liệu từ kiểu này sang kiểu
khác, khi chuyển có thể sẽ bị mất dữ liệu.
Cú pháp để chuyển như sau:
(tên_kiểu_mới) dữ_liệu_cần_chuyển_kiểu
Ví dụ:
a = 1/2; sẽ cho kết quả là 0 vì 2 tốn hạng đều là số nguyên
a = (float)1/2; sẽ cho kết qủa 0.5 vì số 1 được chuyển thành số thực
Nếu kiểu dữ liệu mới có miền giá trị lớn hơn kiểu dữ liệu cũ thì việc chuyển sẽ
khơng mất dữ liệu, ví dụ từ số nguyên (int) sang số thực (float). Nếu chuyển từ số thực
sang số nguyên thì sẽ bị mất phần thập phân sau dấu phẩy.
Ví dụ:
a = (int)35.687; sẽ cho kết quả a bằng 35
Đối với phép gán (=), một số trường hợp máy sẽ tự động chuyển đổi kiểu từ dữ
liệu ở vế phải của phép gán về kiểu phù hợp với biến nhớ ở vế trái. Do đó, chúng ta
phải cẩn thận để khơng bị mất dữ liệu một cách nguy hiểm và rất khó kiểm sốt về sau
đối với chương trình lớn.
Chẳng hạn, đối với phép gán sau:
int a = 1.5/2;
Rõ ràng, kết quả của vế phải sẽ là 0.75 nhưng khi gán vào biến “a” ở vế trái kiểu
nguyên (int) thì tự động ép kiểu về số nguyên với giá trị ở đây là 0. Vậy biến “a” sẽ
bằng 0 thay vì bằng 0.75.
Cơ sở lập trình – Bài 2
Trang 12
Trung tâm Đào tạo E-Learning
Cơ hội học tập cho mọi người
2.2. Quy tắc mã hóa (coding) chương trình
2.2.1. Câu lệnh và khối lệnh
Để yêu cầu máy tính thực hiện các thao tác chúng ta phải viết các lệnh tương
ứng, bằng cách sử dụng các tên chuẩn và từ khóa kết hợp với biểu thức. Trong C/C++,
kết thúc một câu lệnh phải có dấu chấm phẩy (;).
Ví dụ:
a = 5*3/2.5-4;
//sẽ u cầu máy tính tốn vế phải và đưa kết quả sang vế trái là a
clrscr();
//sẽ yêu cầu máy xóa màn hình
printf(“Hello, how are you?”);
//sẽ yêu cầu máy hiện lên màn hình dịng chữ trong cặp dấu nháy kép
Một câu lệnh được viết trên một dịng, trên một dịng có thể viết được nhiều câu
lệnh.
Thông thường một câu lệnh chưa đủ để thực hiện một chức năng hay thao tác nào
đó được yêu cầu, do vậy chúng ta phải viết nhiều câu lệnh và tạo thành một khối lệnh.
Khối lệnh phải được viết vào trong cặp dấu ngoặc nhọn { và }.
Ví dụ:
{
a = 5*2-3; b = a/2.5+1;
printf(“ %d ”, a+b );
}
Khối lệnh có thể lồng nhau, tức là trong khối lệnh có thể có các khối lệnh con
bên trong.
Cơ sở lập trình – Bài 2
Trang 13
Trung tâm Đào tạo E-Learning
Cơ hội học tập cho mọi người
Ví dụ:
{
a = 5*7; b = a/4.5-2;
{
c = a+b;
printf(“ %d ”,c);
}
printf(“ %d ”,b);
}
2.2.2. Cấu trúc các thành phần một chương trình C/C++
Để viết một chương trình bằng ngơn ngữ C/C++ chúng ta sử dụng cấu trúc chung
như sau:
1- khai báo các thư viện cần dùng
2- định nghĩa các giá trị hằng
3- định nghĩa các kiểu dữ liệu mới
4- định nghĩa các chương trình con (hàm)
5- khai báo các biến nhớ tồn cục
6- viết chương trình chính
Giải thích:
- Phần 1 dùng để nạp các thư viện cần sử dụng trong chương trình được viết như
sau:
#include<stdio.h>
#include<conio.h>
Ở đây chúng ta chỉ nạp 2 thư viện là <stdio.h> và <conio.h>, trong những
chương trình lớn hoặc địi hỏi thì chúng ta phải sử dụng thêm các thư viện khác. Danh
sách và ý nghĩa của một số thư viện cơ bản như sau:
Cơ sở lập trình – Bài 2
Trang 14
Trung tâm Đào tạo E-Learning
Cơ hội học tập cho mọi người
Tên thư viện
Ý nghĩa
<stdio.h>
Chứa các lệnh nhập xuất dữ liệu
<conio.h>
Các lệnh hỗ trợ xử lý màn hình, bàn phím
<iostream.h>
Các lớp & đối tượng xử lý nhập xuất dữ liệu
<iomanip.h>
Xử lý hỗ trợ nhập xuất dữ liệu trên đối tượng
<stdlib.h>
Các tiện ích hỗ trợ xử lý
<math.h>
Các xử lý tính toán số học
<string.h>
Các xử lý xâu ký tự
<time.h>
Các hỗ trợ xử lý thời gian
- Phần 2 dùng để định nghĩa các giá trị hằng, cách thức viết đã trình bày ở trên
(sử dụng #define).
- Phần 3, 4, 5 sẽ được trình bày trong những chương tiếp theo.
- Phần 6 để viết chương trình chính, mỗi một chương trình có duy nhất một
chương trình chính và nó sẽ điều khiển các hoạt động của tồn bộ chương trình.
Chương trình chính được viết như sau:
void
main()
{
… viết các lệnh yêu cầu máy thực hiện …
}
Ở đây void là một kiểu dữ liệu không xác định và chúng ta sử dụng nó trong
chương trình chính này. Tuy nhiên có thể bỏ qua từ khóa void thì máy sẽ mặc định là
kiểu int, hoặc viết int thay cho void. Khi đó cuối chương trình chính này phải có lệnh
“return 0”. Trong một số mơi trường, trình biên dịch sẽ u cầu chương trình “main”
này phải có kiểu “int”.
Trong cấu trúc ở trên yêu cầu tối thiểu là phần 1 và phần 6 phải có trong một
chương trình, do đó một chương trình đơn giản sẽ được viết như sau:
Cơ sở lập trình – Bài 2
Trang 15
Trung tâm Đào tạo E-Learning
Cơ hội học tập cho mọi người
#include<stdio.h>
#include<conio.h>
void
main()
{
… khai báo biến nhớ ở đầu chương trình …
… viết các lệnh vào đây …
}
Chú ý: Các biến nhớ cần phải được khai báo trước khi sử dụng. Trong một phạm
vi (khối lệnh) thì một biến chỉ được phép khai báo 1 lần. Quy tắc khai báo biến đã
được đề cập ở phần trên.
Có thể định nghĩa nhiều biến nhớ cùng kiểu dữ liệu bằng một lệnh khai báo, các
biến nhớ phải cách nhau bởi dấu phẩy.
Ví dụ:
int
a, b, c; //khai báo 3 biến số nguyên
float
x, y, z; //khai báo 3 biến số thực
Có thể sử dụng tốn tử gán trong khai báo biến nhớ để gán dữ liệu ban đầu cho
biến nhớ theo cách như sau:
int
float
a=5, b=8, c=0;
x=1.5, y=576;
Chú ý: Khi cần chú thích cho một dịng lệnh, trong C/C++ có thể chú thích trên
một dịng bằng cách dùng cặp dấu “//” hoặc trên nhiều dòng bằng cặp dấu “/*” và “*/”.
Ví dụ:
int
a;
float b;
// đây là chú thích trên một dịng
/* đây là chú thích viết trên nhiều dịng */
Cơ sở lập trình – Bài 2
Trang 16
Trung tâm Đào tạo E-Learning
Cơ hội học tập cho mọi người
2.2.3. Quy trình thực hiện một chương trình trên máy
Để lập trình trên máy tính bằng một ngơn ngữ nào đó, chúng ta phải sử dụng mơi
trường lập trình (IDE - Integrated Development Enviroment). Nó là một bộ phần mềm
cung cấp các chức năng cơ bản cho việc lập trình.
Sau đây là các bước để viết một chương trình và chạy thử trên máy tính:
Bước 1) Khởi động phần mềm mơi trường lập trình (IDE)
Bước2) Tạo tệp chương trình nguồn (có thể cả dự án)
Bước 3) Biên soạn mã lệnh (code) cho chương trình, được gọi là
chương trình nguồn (source)
Bước 4) Kiểm tra lỗi và biên dịch chương trình
Bước 5) Chạy thử chương trình
Đối với C/C++, tệp tin chứa nội dung chương trình nguồn phải có phần mở rộng
là *.C hoặc *.CPP. Hiện nay thường sử dụng mở rộng là *.CPP (viết tắt của C Plus
Plus / C++).
Khi thực hiện chương trình thì máy tính sẽ tự động vào thực hiện các lệnh trong
chương trình chính (“main”). Q trình thực hiện sẽ tuần tự từ trên xuống dưới và từ
trái sang phải.
Ví dụ: chúng ta có chương trình như sau
#include<stdio.h>
#include<conio.h>
void
{
main()
A1;
A2; B1;
A3; B2; B3;
C1;
}
Máy sẽ thực hiện các lệnh theo thứ tự: A1, A2, B1, A3, B2, B3, C1.
Cơ sở lập trình – Bài 2
Trang 17
Trung tâm Đào tạo E-Learning
Cơ hội học tập cho mọi người
Hình vẽ sau minh họa quá trình lập trình, kiểm tra lỗi, biên dịch và chạy thử một
chương trình trên máy tính.
*.CPP
Lập
trình
*.EXE
Biên dịch
Chạy thử
Chương
Chương trình
trình nguồn
mã máy
Lỗi biên dịch (cú pháp)
Lỗi chạy thử, kết quả sai
2.3. Một số lệnh cơ bản mang tính tuần tự
2.3.1. Lệnh nhập/xuất dữ liệu
Nhập/xuất dữ liệu là 2 thao tác cơ bản trong lập trình, chúng ln cần thiết đối
với mọi chương trình nhằm cung cấp tương tác giữa người dùng với máy tính khi chạy
chương trình.
Có thể minh họa cấu trúc nhập/xuất dữ liệu của một chương trình đơn giản:
Chương trình
Xử lý dữ liệu
Xuất kết quả
Nhập dữ liệu
Các biến nhớ
chứa dữ liệu
Trong C/C++ cung cấp hai chế độ nhập/xuất dữ liệu, thứ nhất dựa trên cơ chế
vào/ra dữ liệu chuẩn (standard input/output) và thứ hai dựa trên cơ chế dòng vào/ra
(input/output stream). Cả hai chế độ này có thể dùng kết hợp nhưng thơng thường
Cơ sở lập trình – Bài 2
Trang 18
Trung tâm Đào tạo E-Learning
Cơ hội học tập cho mọi người
được sử dụng tách biệt, tức một chương trình chỉ dùng một trong hai chế độ trên cho
việc nhập/xuất dữ liệu.
Sau đây là bảng giới thiệu sơ bộ các lệnh nhập/xuất dữ liệu theo hai cơ chế.
Nhập/xuất theo chế độ chuẩn, thư viện Nhập/xuất theo chế độ dòng, thư viện
<stdio.h> và <conio.h>
<iostream.h> và <iomanip.h>
printf( “F” , D ); Hiện dữ liệu ra cout<< D;
Hiện dữ liệu
màn hình
scanf( “F”, &B Nhập dữ liệu
cin>> B;
Nhập dữ liệu
cin.get( X , n );
Nhập xâu ký tự
);
gets( X );
Nhập xâu ký tự
fflush(stdin);
Xóa bộ đệm bàn cin.ignore();
Bỏ trơi qua 1 ký
phím
tự trên dịng nhập
cin.ignore(256,\n); Bỏ qua các ký tự
cho đến khi gặp
dấu xuống dịng
Trong đó,
- “F” là định dạng dữ liệu nhập/xuất bao gồm : + “%d” nhập/xuất số nguyên,
“%f” nhập/xuất số thực, “%s” nhập/xuất xâu ký tự, “%c” nhập/xuất 1 ký tự, “%x”
nhập xuất số hexa.
- D là dữ liệu cần hiển thị có thể hằng, biến hoặc biểu thức.
- B là biến nhớ chứa dữ liệu nhập (dấu & trước biến nhớ để lấy địa chỉ của biến).
- X là xâu ký tự, với độ dài tối đa có thể chứa là n.
Trong cả hai chế độ này, chúng ta sẽ làm việc với chế độ văn bản do đó trên màn
hình sẽ được chia thành các ô theo hàng và cột để hiển thị ký tự, chiều ngang có các
cột được đánh số thứ tự từ 0 và chiều dọc có các hàng đánh số thứ tự từ 0, được minh
họa bởi hình vẽ sau.
Cơ sở lập trình – Bài 2
Trang 19
Trung tâm Đào tạo E-Learning
Cơ hội học tập cho mọi người
cột thứ j
hàng thứ i
ô j,i
Mỗi một ô trên màn hình có tọa độ là cột thứ mấy và hàng thứ mấy, tại mỗi ô chỉ
hiện được một ký tự. Trên màn hình văn bản cũng có một con trỏ màn hình nhấp nháy
để xác định tạo độ của ơ hiện thời.
Ví dụ:
printf( “ %d ” , 65 ); hoặc
cout<<65;
thì máy sẽ hiện ra số 65.
printf(“ Ha noi, ngay %d thang %d nam %d ”, 14, 2, 1976); hoặc
cout<<“Ha noi, ngay ” << 14 << “ thang ” << 2 << “ nam ” <<1976;
thì kết quả trên màn hình sẽ là : Ha noi, ngay 14 thang 2 nam 1976.
Ở đây, nếu hiển thị nhiều dữ liệu thì lệnh printf phải sử dụng nhiều định dạng
tương ứng và các dữ liệu viết ở cuối cách nhau dấu phẩy (,), cịn lệnh cout thì các dữ
liệu được viết cách nhau bởi dấu “<<”.
Các lệnh dưới dây,
printf(“Nhap 2 so nguyen a,b:”); scanf(“%d%d”, &a, &b); //hoặc
cout<<“Nhap 2 so nguyen a,b:”; cin>>a>>b;
để nhập dữ liệu 2 số nguyên cho 2 biến a và b.
Cơ sở lập trình – Bài 2
Trang 20