Chương 1. M đầu
Chương này gii thiu nhng phn cơ bn ca mt chương trình C++. Chúng ta s dng
nhng ví d đơn gin để trình bày cu trúc các chương trình C++ và cách thc biên dch
chúng. Các khái nim cơ bn như là hng, biến, và vic lưu tr chúng trong b nh cũng
s được tho lun trong chương này. Sau đây là mt đặc t sơ b v khái nim lp trình.
Lp trình
Máy tính s là mt công c để gii quyết hàng lot các bài toán ln. Mt li gii cho mt
bài toán nào đó được gi là mt gii thut (algorithm); nó mô t mt chui các bước cn
thc hin để gii quyết bài toán. Mt ví d đơn gin cho mt bài toán và mt gii thut có
th là:
Bài toán: Sp xếp mt danh sách các s theo th t tăng dn.
Gii thut:Gi s danh sách đã cho là list1; to ra mt danh sách rng, list2,
để lưu danh sách đã sp xếp. Lp đi lp li công vic, tìm s nh nht trong
list1, xóa nó khi list1, và thêm vào phn t kế tiếp trong danh sách list2, cho
đến khi list1 là rng.
Gii thut được din gii bng các thut ng tru tượng mang tính cht d hiu. Ngôn
ng tht s được hiu bi máy tính là ngôn ng máy. Chương trình được din đạt bng
ngôn ng máy được gi là có th thc thi. Mt chương trình được viết bng bt k mt
ngôn ng nào khác thì trước hết cn được dch sang ngôn ng máy để máy tính có th
hiu và thc thi nó.
Ngôn ng máy cc k khó hiu đối vi lp trình viên vì thế h không th s dng
trc tiếp ngôn ng máy để viết chương trình. Mt s tru tượng khác là ngôn ng
assembly. Nó cung cp nhng tên d nh cho các lnh và mt ký hiu d hiu hơn cho
d liu. B dch được gi là assembler chuyn ngôn ng assembly sang ngôn ng máy.
Ngay c nhng ngôn ng assembly cũng khó s dng. Nhng ngôn ng cp cao
như C++ cung cp các ký hiu thun tin hơn nhiu cho vic thi hành các gii thut.
Chúng giúp cho các lp trình viên không phi nghĩ nhiu v các thut ng cp thp, và
giúp h ch tp trung vào gii thut. Trình biên dch (compiler) s đảm nhim vic dch
chương trình viết bng ngôn ng cp cao sang ngôn ng assembly. Mã assembly được
to ra bi trình biên dch sau đó s được tp hp li để cho ra mt chương trình có th
thc thi.
Chương 1: M đầu
1
1.1. Mt chương trình C++ đơn gin
Danh sách 1.1 trình bày chương trình C++ đầu tiên. Chương trình này khi
chy s xut ra thông đip Hello World.
Danh sách 1.1
1
2
3
4
5
#include <iostream.h>
int main (void)
{
cout << "Hello World\n";
}
Chú gii
1 Hàng này s dng ch th tin x#include để chèn vào ni dung ca tp
tin header iostream.h trong chương trình. iostream.h là tp tin header chun
ca C++ và cha đựng các định nghĩa cho xut và nhp.
2 Hàng này định nghĩa mt hàm được gi là main. Hàm có th không có
hay có nhiu tham s (parameters); các tham s này luôn xut hin sau
tên hàm, gia mt cp du ngoc. Vic xut hin ca t void gia du
ngoc ch định rng hàm main không có tham s. Hàm có thkiu tr
v; kiu tr v luôn xut hin trước tên hàm. Kiu tr v cho hàm main
int (ví d: mt s nguyên). Tt c các chương trình C++ phi có mt hàm
main duy nht.Vic thc thi chương trình luôn bt đầu t hàm main.
3 Du ngoc nhn bt đầu thân ca hàm main.
4 Hàng này là mt câu lnh (statement). Mt lnh là mt s tính toán để
cho ra mt giá tr. Kết thúc mt lnh thì luôn luôn được đánh du bng
du chm phy (;). Câu lnh này xut ra chui "Hello World\n" để gi đến
dòng xut cout. Chui là mt dãy các ký t được đặt trong cp nháy kép.
Ký t cui cùng trong chui này (\n) là mt ký t xung hàng (newline).
Dòng là mt đối tượng được dùng để thc hin các xut hoc nhp. cout
là dòng xut chun trong C++ (xut chun thường được hiu là màn hình
máy tính). Ký t << là toán t xut, nó xem dòng xut như là toán hng
trái và xem biu thc như là toán hng phi, và to nên giá tr ca biu
thc được gi đến dòng xut. Trong trường hp này, kết qu là chui
"Hello World\n" được gi đến dòng cout, làm cho nó được hin th trên
màn hình máy tính.
5 Du ngoc đóng kết thúc thân hàm main.
1.2. Biên dch mt chương trình C++
Bng 1.1 trình bày chương trình trong danh sách 1.1 được biên dch và chy
trong môi trường UNIX thông thường. Phn in đậm được xem nhưđầu vào
(input) ca người dùng và phn in thường được xem nhưđáp ng ca h
thng. Du nhc hàng lnh UNIX xut hin như là ký t dollar($).
Chương 1: M đầu
2
Bng 1.1
1
2
3
4
$ CC hello.cc
$ a.out
Hello World
$
Chú gii
1 Lnh để triu gi b dch AT&T ca C++ trong môi trường UNIX là CC.
Đối s cho lnh này (hello.cc) là tên ca tp tin cha đựng chương trình.
Theo qui định thì tên tp tin có phn m rng là .c, .C, hoc là .cc. (Phn
m rng này có th là khác nhau đối vi nhng h điu hành khác nhau)
2 Kết qu ca s biên dch là mt tp tin có th thc thi mc định là a.out.
Để chy chương trình, chúng ta s dng a.out như là lnh.
3 Đây là kết qu được cung cp bi chương trình.
4 Du nhc tr v h thng ch định rng chương trình đã hoàn tt s thc
thi ca nó.
Lnh cc chp nhn các phn tùy chn. Mi tùy chn xut hin như name,
trong đó name là tên ca tùy chn (thường là mt ký t đơn). Mt vài tùy
chn yêu cu có đối s. Ví d tùy chn xut (-o) cho phép ch định rõ tp tin
có th được cung cp bi trình biên dch thay vì là a.out. Bng 1.2 minh ha
vic s dng tùy chn này bng cách ch định rõ hello như là tên ca tp tin có
th thc thi.
Bng 1.2
1
2
3
4
$ CC hello.cc -o hello
$ hello
Hello World
$
Mc dù lnh thc s có th khác ph thuc vào trình biên dch, mt th
tc biên dch tương t có th được dùng dưới môi trường MS-DOS. Trình
biên dch C++ da trên Windows dâng tng mt môi trường thân thin vi
người dùng mà vic biên dch rt đơn gin bng cách chn lnh t menu. Qui
định tên dưới MS-DOS và Windows là tên ca tp tin ngun C++ phi có
phn m rng là .cpp.
1.3. Vic biên dch C++ din ra như thế nào
Biên dch mt chương trình C++ liên quan đến mt s bước (hu hết các bước
là trong sut vi người dùng):
Đầu tiên, b tin x C++ xem qua mã trong chương trình và thc hin
các ch th được ch định bi các ch th tin x lý (ví d, #include). Kết
qu là mt mã chương trình đã sa đổi mà không còn cha bt k mt ch
th tin x lý nào c.
Chương 1: M đầu
3
Sau đó, trình biên dch C++ dch các mã ca chương trình. Trình biên
dch có th là mt trình biên dch C++ tht s phát ra mã assembly hay
mã máy, hoc ch là trình chuyn đổi dch mã sang C. trường hp th
hai, mã C sau khi được dch ra s to thành mã assembly hay mã máy
thông qua trình biên dch C. Trong c hai trường hp, đầu ra có th
không hoàn chnh vì chương trình tham kho ti các th tc trong thư
vin còn chưa được định nghĩa như mt phn ca chương trình. Ví d
Danh sách 1.1 tham chiếu ti toán t << mà thc s được định nghĩa
trong mt thư vin IO riêng bit.
Cui cùng, trình liên kết hoàn tt mã đối tượng bng cách liên kết nó vi
đối tượng ca bt k các module thư vin mà chương trình đã tham
kho ti. Kết qu cui cùng là mt tp tin thc thi.
Hình 1.1 minh ha các bước trên cho c hai trình chuyn đổi C++ và trình
biên dch C++. Thc tế thì tt c các bước trên được triu gi bi mt lnh
đơn (nhưCC) và người dùng thm chí s không thy các tp tin được phát
ra ngay lp tc.
Hình 1.1 Vic biên dch C++
C++
Program
C
Code
Object
Code
Execut-
able
C++
COMPILER
NATIVE
C++
TRANSLATOR
LINKER
C
COMPILER
C++
Program
1.4. Biến
Biến là mt tên tượng trưng cho mt vùng nh mà d liu có th được lưu tr
trên đó hay là được s dng li. Các biến được s dng để gi các giá tr d
liu vì thế mà chúng có th được dùng trong nhiu tính toán khác nhau trong
mt chương trình. Tt c các biến có hai thuc tính quan trng:
Kiu được thiết lp khi các biến được định nghĩa (ví d như: integer,
real, character). Mt khi đã được định nghĩa, kiu ca mt biến C++
không th được chuyn đổi.
Chương 1: M đầu
4
Giá tr có th được chuyn đổi bng cách gán mt giá tr mi cho biến.
Loi giá tr ca biến có th nhn ph thuc vào kiu ca nó. Ví d, mt
biến s nguyên ch có th gi các giá tr nguyên (chng hn, 2, 100, -12).
Danh sách 1.2 minh ha s dng mt vài biến đơn gin.
Danh sách 1.2
1
2
3
4
5
6
7
8
9
10
11
#include <iostream.h>
int main (void)
{
int workDays;
float workHours, payRate, weeklyPay;
workDays = 5;
workHours = 7.5;
payRate = 38.55;
weeklyPay = workDays * workHours * payRate;
cout << "Weekly Pay = "<< weeklyPay<< '\n';
}
Chú gii
4 Hàng này định nghĩa mt biến int (kiu s nguyên) tên là workDays, biến
này đại din cho s ngày làm vic trong tun. Theo như lut chung, trước
tiên mt biến được định nghĩa bng cách ch định kiu ca nó, theo sau
đó là tên biến và cui cùng là được kết thúc bi du chm phy.
5 Hàng này định nghĩa ba biến float (kiu s thc) ln lượt thay cho s gi
làm vic trong ngày, s tin phi tr hàng gi, và s tin phi tr hàng
tun. Như chúng ta thy hàng này, nhiu biến ca cùng kiu có th định
nghĩa mt lượt qua vic dùng du phy để ngăn cách chúng.
6 Hàng này là mt câu lnh gán. Nó gán giá tr 5 cho biến workDays. Vì thế,
sau khi câu lnh này được thc thi, workDays biu th giá tr 5.
7 Hàng này gán giá tr 7.5 ti biến workHours.
8 Hàng này gán giá tr 38.55 ti biến payRate.
9 Hàng này tính toán s tin phi tr hàng tun t các biến workDays,
workHours, và payRate (* là toán t nhân). Giá tr kết qu được lưu vào
biến weeklyPay.
10-12 Các hàng này xut ba mc tun t là: chui "Weekly Pay = ", giá tr
ca biến weeklyPay, và mt ký t xung dòng.
Khi chy, chương trình s cho kết qu như sau:
Weekly Pay = 1445.625
Khi mt biến được định nghĩa, giá tr ca nó không được định nghĩa
cho đến khi nó được gán cho mt giá tr tht s. Ví d, weeklyPay có mt giá
tr không được định nghĩa cho đến khi hàng 9 được thc thi. Vic gán giá tr
cho mt biến ln đầu tiên được gi là khi to. Vic chc chn rng mt
Chương 1: M đầu
5