Tải bản đầy đủ (.pdf) (26 trang)

Kỹ thuật lập trình cơ sở EHOU

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (564.52 KB, 26 trang )

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ế_trái --

++ vế_phải



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



×