Tải bản đầy đủ (.doc) (45 trang)

Tài liệu Giới thiệu về ngôn ngữ C docx

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 (402.46 KB, 45 trang )

Chơng 1
Giới thiệu về ngôn ngữ C++
Khả năng tổ chức và xử lý thông tin là yếu tố chính dẫn đến thành công
trong thời đại hiện nay. Các máy tính đợc thiết kế để kết nối và xử lý một lợng
lớn các thông tin nhanh và hiệu quả. Tuy nhiên chúng không thể làm đợc bất
cứ việc gì khi mà một ngời nào đó cha nói với chúng những gì phải làm.
Những công việc mà ngời ta yêu cầu phải thực hiện, thì đó chính là những cái
mà C++ có thể làm. C++ là một ngôn ngữ lập trình bậc cao, nó cho phép
những kỹ s phần mềm trao đổi thông tin một cách hiệu quả đối với máy tính.
C++ là một ngôn ngữ có khả năng thích ứng và có tính mềm dẻo cao. Từ
khi nó đợc tạo ra năm 1980, nó đã đợc sử dụng rộng rãi với các chơng trình
bao gồm cơ sở cho các bộ vi điều khiển, các hệ thống điều hành, các ứng dụng,
và đồ hoạ. C++ nhanh chóng trở thành một ngôn ngữ lập trình đợc a chuộng.
Có một sự yêu cầu lớn đối với những ngời làm việc với máy tính là họ phải có
khả năng yêu cầu làm những công việc mà họ cần, và C++ cho phép họ làm
việc nhanh chóng và hiệu quả.
Sơ lợc về lịch sử phát triển của C++
Năm 1970 hai nhà lập trình là Brian Kemighan và Dennis Ritchie tạo ra
một ngôn ngữ mới đợc gọi là C (Gọi là ngôn ngữ C bởi vì C đứng trớc một
ngôn ngữ cũ mà họ sử dụng có tên là B). C đợc thiết kế với một mục đích chủ
yếu là: viết hệ thống điều hành. Ngôn ngữ này rất đơn giản, mềm dẻo và nó
sớm đợc sử dụng rộng rãi cho nhiều dạng chơng trình khác nhau. Cuối cùng C
đã nhanh chóng trở thành một trong những ngôn ngữ thông dụng nhất trên thế
giới.
Tuy nhiên ngôn ngữ C có một vấn đề chính, nó là một ngôn ngữ hớng đối
tợng, nghĩa là khi thiết kế một chơng trình C, ngời lập trình bắt đầu với việc
mô tả dữ liệu và viết các thủ tục để thao tác với các dữ liệu đó.
Cuối cùng những ngời lập trình khám phá ra rằng ngững quá trính trên nó
làm cho chơng trình trở lên rõ ràng và dễ hiểu nếu họ có thể đa vào một bunch
dữ liệu và nhóm chúng vào với nhau với các thao tác mà làm việc trên các dữ
liệu đó. Nh vậy một nhóm đợc gọi là một object (đối tợng) hoặc class (lớp).


Thiết kế các chơng trình bằng cách thiết kế các class đợc biết đến nh thiết kế
hớng đối tợng (object-oriented design _ OOD)
Năm 1980 Bjarne Stroustrup bắt đầu làm việc trên một ngôn ngữ mới gọi là
C với class. Ngôn ngữ này cải tiến từ ngôn ngữ C bằng cách thêm một số đặc
điểm mới, và đặc biệt quan trọng là về class. Ngôn ngữ này đợc cải tiến, bổ
sung, và cuối cùng nó trở thành C++.
C++ với những thành công của nó, trên thực tế là nó cho phép những ngời
lập trình tổ chức và xử lý thông tin hiệu quả hơn hầu hết các ngôn ngữ khác.
Hơn nữa, nó đợc xây dựng trên những việc đã đợc làm với ngôn ngữ C. Trên
thực tế hầu hết các chơng trình C có thể chuyển đổi sang chơng trình C++ với
một chút thay đổi. Những chơng trình này thờng không sử dụng hết tất cả
những đặc điểm mới của C++, nhng chúng vẫn có thể thực hiện đợc công việc.
Trong trờng hợp này, C++ cho phép các nhà lập trình xây dựng dựa trên những
nền tảng tồn tại của mã của C.
Sự tổ chức của C++
C++ đợc thiết kế nh là một cầu nối giữa những ngời lập trình và máy tính
raw. ý tởng chính là cho phép ngời lập trình tổ chức một chơng trình theo một
cách mà họ có thể dễ dàng hểu đợc chúng. Chơng trình dịch sau đó dịch từ
ngôn ngữ sang dạng mà máy có thể sử dụng.
Các chơng trình máy tính bao gồm hai phần chính là: dữ liệu và các lệnh.
Các máy tính tác động một chút hoặc không có sự tổ chức(organization) trên
hai phần này. Sau cùng, các máy tính đợc thiết kế một cách chung nhất có thể
đợc. Một ý tởng cho các nhà lập trình là tác động lên tổ chức trên máy tính của
họ và không phải bằng cách khác.
Dữ liệu trong máy tính đợc chứa nh một chuỗi bao gồm các byte. C++ sử
dụng những byte này để chứa các dữ liệu có ích. Các khái báo dữ liệu đợc
dùng bởi những ngời lập trình để biểu thị thông tin mà họ đang làm việc. Ví
dụ:
int total; //Total number accounts
Khai báo trên yêu cầu C++ rằng bạn muốn dùng một phần bộ nhớ của máy

tính để chứa một số nguyên với tên là total. Bạn có thể cho phép chơng trình
dịch lựa chọn những byte đặc biệt nào đó của bộ nhớ để sử dụng.
Biến total là một biến đơn giản. Nó có thể chỉ chứa duy nhất một số nguyên
và miêu tả duy nhất với một total. Một chuỗi các số nguyên có thể đợc tổ chức
vào trong một mảng. Mặt khác, C++ sẽ kết nối các chi tiết, tác động lên
(imposing) sự tổ chức trên bộ nhớ của máy tính.
int balance[1001; //Balance (in cents) for all 100 accounts
Cuối cùng, có thêm các kiểu dữ liệu phức hợp. Ví dụ, một hình chữ nhật có
thể có chiều rộng, độ cao, màu và mẫu tô. C++ cho phép bạn tổ chức bốn
thuộc tính trên vào một nhóm gọi là một cấu trúc (structure).
struct rectangle {
int width; //Width of rectangle in pixels
int height; //Height of rectangle in pixels
color_type color; //color of the rectangle
fill-type fill; //Fill pattern
};
Tuy nhiên, dữ liệu chỉ là một phần của chơng trình, ngoài ra bạn còn cần đến
các lệnh. Đến mức độ mà máy tính đợc quan tâm, nó không biết một chút gì về
cách sắp xếp của các lệnh. Nó chỉ biết rằng nó đang làm gì với lệnh hiện tại và
tại đâu nó có lệnh kế tiếp.
C++ là một ngôn ngữ bậc cao, nó cho phép bạn viết một câu lệnh bậc cao
nh:
area = (base*height)/2.0; // Compute area of triangle
Chơng trình dịch dịch lệnh này vào một chuỗi các chỉ dẫn (lệnh) của máy.
Các kiểu lệnh này đợc gọi là một assignment statement. Nó đợc sử dụng để tính
và chứa các giá trị của một biểu thức số học.
Bạn cũng có thể dùng control statement (lệnh điều khiển) để điều khiển
thứ tự của quá trình xử lý. Các lệnh nh if và switch làm cho máy tính tạo các
quyết định dơn giản. Các lệnh có thể đợc lặp lại bằng cách dùng vòng lặp nh
while và for.

Các nhóm của các lệnh có thể nằm trong các hàm. Vì vậy bạn chỉ cần viết
một hàm với mục đích chung để vẽ hình chữ nhật và sau đó có thể sử dụng lại
hàm đó những nơi mà bạn muốn vẽ hình chữ nhật. C++ cung cấp một bộ
phong phú các hàm tiêu chuẩn (standard function) những hàm mà thực hiện
các chức năng thông thờng nh tìm kiếm (searching), phân loại (sorting), nhập
vào (input), và đa ra (output).
Một bộ các hàm quan hệ có thể đợc nhóm với nhau để tạo ra các modul, và
các modul đợc nối với nhau tạo thành các chơng trình.
Một trong những mục tiêu chính của ngôn nhữ C++ là tổ chức các lệnh hợp
thành các phần để có thể sử dụng lại đợc. Cuối cùng, bạn có thể viết một chơng
trình nhanh hơn nếu bạn mợn hầu hết các mã của bạn ở một nơi nào đó khác.
Nhóm các modul có khả năng dùng lại có thể kết hợp vào trong một th viện. Ví
dụ, nếu bạn cần một bộ sắp xếp thông thờng, bạn có thể dùng các hàm chức
năng qsort từ th viện và liên kết nó với chơng trình của bạn.
Một máy tính chia thế giới thành dữ liệu và các lệnh. Trong cả một thời
gian dài, các ngôn ngữ bậc cao nh C vẫn giữ nguyên cách phân chia này. Trong
ngôn ngữ C, bạn có thể định nghĩa dữ liệu hoặc viết các lệnh nhng không thể
kết hợp cả hai.
Một sự cải tiến chính trong C++ là ý tởng kết hợp dữ liệu và lệnh lại với
nhau trong một cấu trúc gọi là lớp (class) hoặc đối tợng (object). Lập trình h-
ớng đối tợng cho phép nhóm dữ liệu với các lệnh thao tác trên dữ liệu đó. Khái
niệm này đợc nâng lên một bớc nữa trong C++: nó cho phép ta nhận đợc các
class mới từ những cái đã tồn tại.
Đặc điểm cuối này là một tính năng rất mạnh. Nó cho phép bạn xây dựng
các class phức tạp từ những class đơn giản hơn, nhỏ hơn. Nó cũng cho phép
bạn định nghĩa một class trìu tợng (abstract), cơ bản và sau đó tạo ra (derive)
các class chi tiết hơn từ các class ban đầu. Ví dụ, một class trìu tợng về hình
dạng có thể đợc dùng để định nghĩa các hình dạng nh: hình chữ nhật, tam giác,
hình tròn.
Tổ chức (organization) là một mấu chốt để viết các chơng trình hoàn hảo.

Nh trong cuốn sách này, bạn biết rằng bảng nội dung ở đằng trớc, bảng mục
lục ở đằng sau, nó là một cách mà các quyển sách đợc tổ chức. Tổ chức làm
cho quyển sách này sử dụng đợc dễ hơn.
Ngôn ngữ C++ cho phép bạn tổ chức các chơng trình của mình dùng cú
pháp (syntax) đơn giản mà hiệu quả. Cuốn sách này sẽ đi sâu vào cú pháp của
C++ và hớng dẫn bạn định kiểu các quy tắc để tạo các chơng trình tin cậy và
dễ đọc. Bằng cách kết hợp một cú pháp hiệu quả với kiểu (style) lập trình tốt
bạn có thể tạo những chơng trình mạnh thực hện các phép toán phức tạp.
Cách học ngôn ngữ C++
Chỉ có duy nhất một cách học viết chơng trình là phải viết các chơng trình.
Bạn sẽ học đợc rất nhiều bằng cách viết và gỡ rối (debugging) các chơng trình
hơn là khi mà bạn đã đọc song cuốn sách này (than you ever will by reading
this book). Cuốn sách này bao gồm nhiều bài tập về lập trình, và bạn cố gắng
làm đợc càng nhiều trong số chúng càng tốt. Khi làm các bài tập bạn phải luôn
nghĩ đến kiểu chơng trình hoàn hảo nhất, phải luôn luôn chú thích (comment)
các chơng trình của bạn, thậm chí cả khi bạn đang làm bài tập đó cho riêng
mình. Sự chú thích giúp bạn tổ chức các ý tởng của mình, và chú thích các ch-
ơng trình của bạn là một cách luyệnn tập tôt nhất khi bạn đi vào thực tế (real
world).
Bạn hãy đừng nghĩ rằng, Tôi chỉ viết những chơng trình này cho riêng
mình, vì vậy tôi không cần chú thích chúng. Trớc tiên, những mã mà bạn thấy
rất rõ ràng khi viết, nó có thể thờng rất rối và khó hiểu khi bạn xem lại một
tuần sau đó. Viết các câu chú thích, nó còn giúp bạn tổ chức các ý tởng của
mình (Nừu bạn có thể viết ra một ý tởng bằng tiếng Anh, thì bạn mới chỉ hoàn
thành một nửa công việc viết nó bằng C++)
Cuối cùng, các chơng trình có xu hớng xa hơn là chúng ta mong đợi. Một
lần tôi viết một chơng trình đợc thiết kế chỉ làm việc duy nhất trên một máy
tính tại Caltech. Chơng trình phụ thuộc vào hệ thống rất cao. Bởi vì tôi là ngời
duy nhất sẽ dùng chơng trình, chơng trình sẽ in ra một thông báo theo sau nếu
tôi có một dòng lệnh sai:

?LSTUIT User is a twit
Vài năm sau đó tôi là một sinh viên tại trờng đại học Syracuse. Ngời th ký
tại trờng Computer Science cần một chơng trình tơng tự nh chơng trình danh
sách của tôi ở Caltech, vì vậy tôi sửa chơng trình của tôi cho cô ta. Thật không
may, tôi đã quên cái thông báo lỗi nhỏ bé buồn cời đó của tôi.
Tởng tợng rằng nó sẽ khủng khiếp nh thế nào khi tôi bớc vào văn phòng
của Computer Science và bị hỏi bởi ngời th ký trởng. Ngời đàn bà này có nhiều
quyền lực đến mức mà bà ta có thể làm cho trởng khoa phải kính nể. Cô ta
nhìn tôi và nói, Ngời sử dụng là đần, hả? (User is a twit, huh?) Rất may mắn là
cô ta có tính hài hớc, hoặc ngày nay tôi không ở đây nữa.
Rải rắc suốt cuốn sách này là các chơng trình bị đứt quãng (broken),
và bỏ thời gian để tìm ra tại sao chúng không làm việc. Thông thờng những
vấn đề này rất đơn giản nh dấu chấm phẩy không đúng chỗ, hoặc dùng = thay
cho ==. Những chơng trình này giúp bạn học cách tìm các lỗi ở các chơng
trình nhỏ, từ đó bạn làm tơng tự ở các chơng trình lớn, và bạn sẽ tạo các lỗi, đ-
ợc luyện tập để tìm chúng.
Chơng 2
Các máy tính là các công cụ mà có thể chứa, tổ chức và xử lý một lợng lớn
thông tin. Tuy nhiên chúng không thể làm đợc bất cứ cái gì khi mà ai đó cha đ-
a cho chúng những lệnh chi tiết.
Thông tin với các máy tính không dễ dàng. Nó yêu cầu các lệnh chính xác
và chi tiết. Cuộc sống có dễ dàng hơn không nếu chúng ta có thể viết chơng
trình bằng tiếng Anh? Tiếp theo chúng ta yêu cầu máy tính, Thêm vào tất cả
các kiểm tra và các deposit của tôi và nói với tôi toàn bộ, và máy sẽ cân bằng
(balancce) các kiểm tra của chúng ta (checkbook).
Nhng tiêng Anh là một ngôn ngữ rất hạn chế nếu bạn phải viết các câu
lệnh chính xác. Ngôn ngữ hoàn toàn không rõ nghĩa và không chính xác.
Grace Hopper, một bà nổi tiếng về tính toán (computing), một lần bình luận về
các chỉ dẫn ở hộp dầu gội đầu:
Wash (gội)

Rinse (gội qua)
Repeat (lặp lại)
Bà ta cố gắng theo sự chỉ dẫn, nhng đã đùng hết hộp dầu (Wash-rinse-
repeat. Wash-rinse-repeat. Wash-rinse-repeat ).
Tất nhiên chúng ta sẽ cố gắng viết bằng tiếng Anh rõ ràng. Chúng ta phải
rất cẩn thận và chắc chắn để đánh vần rõ ràng mọi thứ và chắc chắn tính đến
các lệnh (chỉ dẫn) cho mọi trờng hợp xảy ra. Nếu chúng ta làm việc cật lực,
chúng ta có thể viết các lệnh tiếng Anh chính xác, đúng không?
Chính vì vậy, có một nhóm ngời tập trung thời gian cố gắng viết tiếng Anh
chính xác. Họ đợc gọi là chính phủ, và các văn bản họ viết đợc gọi là quy định
của chính phủ. Một cách đáng tiếc, trong sự cố gắng để làm cho các quy định
chính xác, chính phủ đã làm cho các văn bản hầu hết rất khó đọc. Nếu bạn đã
từng đọc quyển hớng dẫn kèm theo với biểu thuế của bạn, thì bạn sẽ thấy đợc
tiếng Anh chính xác sẽ nh thế nào.
Thậm chí, ngay cả với những phụ từ không cần thiết mà chính phủ thêm
vào thì các vấn đề có thể xảy ra. Một vài năm trớc đây, California thông qua
điều luật yêu cầu tất cả những ngời đi xe máy phải đeo mũ bảo hiểm. Ngay sau
đó điều luật này có hiệu lực, một cảnh sát dừng một ngời không đeo mũ bảo
hiểm lại, ngời đàn ông đề nghị cảnh sát xem kỹ hơn điều luật.
Điều luật có hai điểm: 1) Ngời đi xe máy phải có mũ bảo hiểm đợc xác
nhận là chống đợc va chạm và 2) Nó phải đợc thít một cách chắc chắn. Ngời
cảnh sát không thể phạt anh ta khi mà anh ta có mang mũ và thít chắc chắn vào
đầu gối.
Vì những vấn đề hạn chế đó của tiếng Anh, nên nó không thể trở thành
một ngôn ngữ máy tính đợc. Vậy bây giờ chúng ta sẽ trao đổi thông tin với
máy tính nh thế nào?
Các máy tính đầu tiên trị giá hàng triệu dollar, trong khi cùng thời gian đó
thì lơng của một ngời lập trình thành thạo (good) là 15,000 dollar một năm.
Các nhà lập trình bắt buộc phải viết chơng trình bằng một ngôn ngữ mà tất cả
các lệnh đợc chuyển thành chuỗi các con số, gọi là ngôn ngữ máy. Ngôn ngữ

này có thể đa trực tiếp vào trong máy tính. Một kiểu chơng trình ngôn ngữ máy
có dạng nh sau:
1010 1111
0011 0111
0111 0110
và tiếp tục nh vậy cho hàng trăm lệnh.
Trong khi máy nghĩ với các con số mà con ngời không thể. Để lập trình
với các máy tính cổ này, các kỹ s phần mềm đã phải viết ra những chơng trình
của họ, sử dụng một ngôn ngữ đơn giản, một ngôn ngữ mà mỗi từ sẽ đặc trng
(stand for) cho một lệnh đơn. Nó đợc gọi là ngôn ngữ assembly, bởi vì những
ngời lập trình phải dịch bằng tay, hoặc tổ hợp (assemble) mỗi dòng ra mã máy.
Một kiểu chơng trình ngôn ngữ assembly có thể giống nh sau:
Program Translation
MOV A,47 1010 1111
ADD A,B 0011 0111
HALT 0111 0110
và tiếp tục nh vậy cho hàng trăn lệnh.
Quá trình này đợc minh hoạ bằng hình 2.1.
Hình 2-1.
Quá trình dịch là một nhiệm vụ buồn tẻ và chán ngắt, nó đòi hỏi phải kiên
trì. Một kỹ s phần mềm đã xét thấy đây là công việc hoàn chỉnh cho một máy
tính, vì vậy anh ta viết một chơng trình thực hiện công việc này một cách tự
động, nó đợc gọi là assambler.
Anh ta trình bày sáng tạo mới này lên ông chủ và ngay lập tức bị ca cẩm
Anh dám nghĩ ngay cả việc sử dụng một chiếc máy đắt nh vậy cho một nhiệm
vụ thuộc văn phòng? Đa ra trị giá thời gian một tiếng của máy tính để đổi lại
trị giá thời gian một tiếng của ngời lập trình, điều này không phải là một quan
điểm không có lý.
Assembly
language

Assembly
(translation)
Machine Language
Program
MOV A,47
ADD A,B
HALT

MOV A,47
ADD A,B
HALT

1010 1111
0011 0111
0111 0110
1010 1111
0011 0111
0111 0110
May thay, thời gian qua đi thì giá trị của ngời lập trình đợc tăng lên và giá
trị của máy tính giảm đi. Vì vậy nó sẽ mang lại hiệu quả hơn khi các nhà lập
trình viết các chơng trình bằng ngôn ngữ assembly và sử dụng một chơng trình
gọi là assembler để dịch chơng trình đó ra ngôn ngữ máy.
Ngôn ngữ assembly tổ chức chơng trình theo một cách mà các ngời lập
trình dễ hiểu hơn. Tuy nhiên, máy sẽ khó khăn hơn khi sử dụng chơng trình
này. Chơng trình phải đợc dịch trớc khi máy có thể thực hiện chúng. Đây là sự
khởi đầu cho một xu hớng. Các ngôn ngữ lập trình ngày càng trở lên thuận tiện
hơn cho những ngời lập trình sử dụng và nó cũng bắt đầu yêu cầu ngày càng
nhiều thời gian của máy tính để dịch chúng ra dạng mà các máy tính có thể sử
dụng.
Qua hàng năm các ngôn ngữ bậc cao đã đợc phát minh ra. Những ngôn

ngữ này cố gắng để cho những ngời lập trình viết ra những chơng trình mà họ
dễ dàng hiểu đợc và nó cũng đủ rõ ràng và đơn giản để các máy tính có thể
hiểu.
Các ngôn ngữ bậc cao ban đầu đợc thiết kế để xử lý (handle) các kiểu đặc
trng của các ứng dụng. FORTRAN đợc thiết kế dùng cho kỹ thuật, COBOL, để
viết các báo cáo thơng mại, và PASCAL dùng cho sinh viên. (Số lớn trong
những ngôn ngữ này phát triển lớn hơn là khi nó đợc sử dụng ban đầu. Nh có
đồn đại rằng Nicklaus Wirth đã nói, Nếu tôi biết rằng PASCAL trở lên thành
công nh vậy, thì tôi đã cẩn thận hơn khi thiết kế chúng.)
Sau đó, Brian Kemighan và Dennis Ritchie phát triển ngôn ngữ C và Bjarne
Stroustrup chuyển nó thành C++.
Các chơng trình từ khái niệm đến thực hiện
Các chơng trình C++ đợc viết bằng ngôn ngữ bậc cao sử dụng các chữ cái,
các chữ số, và các biểu tợng khác mà bạn thấy trên bàn phím. Trên thực tế máy
tính thực hiện một ngôn ngữ bậc rất thấp gọi là macbine code (một chuỗi các
con số). Vì vậy, trớc khi một chơng trình có thể đợc sử dụng, nó phải qua một
vài sự biến đổi.
Các chơng trình đợc xuất phát nh là một ý tởng trong đầu của nhà lập trình.
Anh ta viết những ý tởng của mình bằng một trình soạn thảo (text editor) trong
một file gọi là file nguồn (sourcefile) hoặc mã nguồn (source code). File này đ-
ợc biến đổi bằng một trình biên dịch (compiler) ra một file đối tợng
(objectfile). Tiếp theo một chơng trình gọi là trình liên kết (linker) đa các file
đối tợng này, kết hợp nó với các thủ tục đợc định nghĩa trớc từ th viện tiêu
chuẩn (standard library), và tạo một chơng trình có thể thực hiện đợc (một bộ
các lệnh của ngôn ngữ máy). Trong các phần tiếp theo, bạn sẽ thấy đợc những
dạng khác nhau làm việc với nhau để tạo một chơng trình cuối cùng.
Hình 2-2 đa ra những bớc mà bắt buộc phải thực hiện để chuyển đổi một
chơng trình viết bằng ngôn ngữ bậc cao ra một chơng trình mà có thể thực hiện
đợc.


Hình 2-2. Sự chuyển đổi của một ngôn ngữ bậc cao ra chơng trình
Wrappers
Rất may mắn là bạn không phải chạy bản thân chơng trình biên dịch,
assembler, trình liên kết. Hầu hết các trình biên dịch C++ dùng các chơng
trình wrapper , chơng trình mà xác định những công cụ nào cần thiết để chạy
nối tiếp nhau.
Một số hệ thống lập trình thậm chí còn đi xa hơn và cung cấp cho những
ngời lập trình một môi trờng phát triển khép kín (IDE-integrated development
environment). IDE bao gồm một trình soạn thảo, trình biên dịch, trình liên kết
quản lý project, trình gỡ rối
and more in one convenient package.
Cả Borland và Microsoft cùng cung cấp các IDE với các trình biên dịch
của họ.
Tạo một chơng trình thực sự
Trớc khi bạn thực sự bắt đầu tạo các chơng trình của mình, bạn cần thiết
phải biết các công cụ lập trình cơ bản. Phần này sẽ giúp bạn từng bớc thực hiện
gõ vào, biên dịch, và chạy một chơng trình đơn giản. Nó trình bày cách sử
dụng hai kiểu trình biên dịch khác nhau. Kiểu thứ nhất là độc lập (standalone)
hoặc trình biên dịch gõ dòng lệnh (command-line compiler). Kiểu trình biên
dịch này đợc khép kín trong một chế độ xử lý theo lô (batch mode) từ dòng
Mã bậc cao
Chơng trình
ngôn ngữ assembly
Trình biên dịch
Mã đối tợng
Trình liên kết
Chơng trình có khả
năng thực hiện
Assembler
Th viện

lệnh. Nói một cách khác, bạn gõ một lệnh và trình biên dịch chuyển từ mã
nguồn của bạn thành một chơng trình có thể thực hiện đợc. Một kiểu trình biên
dịch khác đợc chứa trong một IDE.
Hầu hết các hệ thống UNIX dùng các trình biên dịch gõ dòng lệnh. Một
vài trình biên dịch kiểu IDE sẵn có cho UNIX, nhng nó rất ít. Mặt khác, hầu
hết các trình biên dịch sử dụng với MS-Dos và Windows chứa một môi trờng
phát triển khép kín.
For command-line die-hards, these compilers do contain command-line
compilers as well.
Tạo một chơng trình
dùng một trình biên dịch dòng lệnh
Trong phần này bạn sẽ xem xét kỹ từng bớc một quá trình cần thiết để tạo
một chơng trình dùng một trình biên dịch dòng lệnh. Chỉ dẫn đợc đa ra cho sử
dụng một một trình biên dịch UNIX chung, trình biên dịch Free Software
Foundation's g++, Turbo-C++, Borland C++, và Microsoft Visual C++.
Tuy nhiên, nếu bạn đang sử dụng một chơng trình dịch Borland hoặc
Microsoft bạn có thể muốn nhảy đến đoạn dùng IDE
However, if you are using a Borland or Microsoft compiler, you might want to
skip ahead to the section on using the IDE.
Bớc 1:
Nó rất dễ dàng quản lý nếu bạn tạo một th mục riêng cho mỗi chơng trình
mà bạn đang làm việc. Trong trờng hợp này bạn sẽ tạo một th mục hello để
chứa chơng trình hello của bạn.
Trong UNIX:
% mkdir hello
% cd hello
Trong MS-DOS:
C: MKDIR HELLO
C: CD HELLO
Bớc 2: tạo chơng trình

Một chơng trình khởi đầu nh một file văn bản. Ví dụ 2-1 là chơng trình
hello dạng nguồn
#include <iostream.h>
int main()
{
cout << "Hello World\n";
return (0);
}
Sử dụng chơng trình soạn thảo a thích của bạn để gõ vào chơng trình trên.
Trong UNIX tên file của bạn nên lấy tên là hello.cc và trong MS-DOS/Windows
là hello.ccp.
Cảnh báo (Warning)
Những ngời sử dụng MS-DOS/Windows không nên sử dụng chơng trình
xử lý word nh Microsoft Word hoặc WordPerfect để viết chong trình của
mình. Các chơng trình xử lý word thêm vào file các mã tạo dạng làm xáo trộ
trình biên dịch. Bạn phải sử dụng trình soạn thảo văn bản nh trình soạn thảo
MS-DOS vì những trình soạn thảo này có khả năng soạn thảo các file ASCII
Bớc 3: Chạy trình biên dịch
Trình biên dịch chuyển đổi file nguồn bạn vừa tạo ra chơng trình có thể th-
ợc hiện đợc. Mỗi trình biên dịch có một dòng lệnh khác nhau. Các dòng lệnh
cho hầu hết các trình biên dịch phổ biến đợc liệt kê dới đây.
UNIX CC Compiler (Generic uNix)
Hầu hết các trình biên dịch UNIx-based theo một tiêu chuẩn chung giống
nhau. Trình biên dịch C++ đợc gọi là cc. Để dịch chơng trình hello, chúng ta
phải cần lệnh sau:
% CC -g -ohello hello.cc
Trong đó, chọn g tạo khả năng gỡ rối. (Trình biên dịch thêm các thông tin
phụ vào chơng trình để làm cho chúng gỡ rối đợc dễ hơn.) Thay đổi hello nói
với trình biên dịch rằng chơng trình đợc gọi là hello, và cuối cùng hello.cc là
tên của file nguồn. Xem sổ tay trình biên dịch của bạn cho các chi tiết với tất

cả các lựa chọn có thể. Có một số trình biên dịch C++ khác nhau cho UNIX, vì
vậy dòng lệnh của bạn có thể khác chút ít.
Free Software Foundation's g++ Compiler
The Free Software Foundation, the GNU people, publishes a number of
highquality programs. (See the glossary entry "Free Software Foundation" for
information on how to get their software.) Among their offerings is a C++ compiler
called g++.
Để dịch một chơng trình dùng trình biên dịch g++, dùng dòng lệnh sau:
% g++ -g -Wall -ohello hello.cc
Thêm vào thay đổi -Wall bật lên tất cả các cảnh báo.
Borland's Turbo C++ in MS-DOS
Hãng quốc tế Borland tạo một trình biên dịch low-cost MA-DOS C++ gọi
là Turbo-C++. Trình biên dịch này rất lý tởng để học. Dòng lệnh cho Turbo-C+
+ là:
C:> tcc -ml -v -N -P -w -ehello hello.cpp
Thông số ml yêu cầu Turbo-C++ để dùng mô hình bộ nhớ rộng. (Máy PC
này có rất nhiều mô hình bộ nhớ khác nhau có thể đợc dùng khi tạo các chơng
trình. Cuốn sách này sẽ không nói về những bộ nhớ này. Thay vì thế, chúng ta
có quan điểm, Sử dụng mô hình bộ nhớ rộng và không phải lo nghĩ gì cho đến
khi bạn trở thành chuyên gia lập trình.)
Thay đổi v nói với Turbo-C đa thông tin gỡ rối vào chơng trình. Cảnh
báo đợc bật lên với w, kiểm tra ngăn xếp bằng N. Trên thực tế trình biên
dịch sẽ dịch cả C và C++ We force a C++ compile using the -P switch. Cuối
cùng, -ehello nói với Turbo-C++ để tạo một chơng trình có tên là hello, và
hello.ccp là tên của file nguồn. Xem sổ tay tham khảo Turbo-C++ để có danh
sách hoàn chỉnh các lựa chọn.
Borland C++ in MS-DOS and Window
Cùng với Turbo-C++, hãng quốc tế Borland cũng tạo một trình biên dịch
chuyên gia hoàn hảo cho MS-DOS/Windows gọi là Borland C++. Dòng lệnh
của nó là:

C:> bcc -ml -v -N -P -w -ehello hello.cpp
Các lựa chọn dòng lệnh trong Turbo-C++ và Borland C++ là giống nhau.
Microsoft Visual C++
Microsoft Visual C++ là một trình biên dịch khác cho MS-DOS/Windows.
Nó không mạnh và hoàn hảo nh là bản tơng ứng Borland của nó. Nhng nó sẽ
dịch hầu hết các chơng trình trong cuốn sách này (Version 1.5 fails to handle
templates and exceptions.). Để dịch, dùng dòng lệnh sau:
C:> cl /AL /Zi /Wl hello.cpp
Chọn /AL yêu cầu máy tính dùng mô hình bộ nhớ rộng. Gỡ rối đợc bật lên
với lựa chọn /Zi và cảnh báo với lựa chọn /W1.
Bớc 4: thực hiện chơng trình
Bây giờ, khi bạn chạy chơng trình, ví dụ nh:
hello
Tại dấu nhắc của UNIX hoặc MS-DOS, dòng thông báo sau xuất hiện trên màn
hình:
Hello World
Tạo một chơng trình
dùng một môi trờng tổ hợp khép kín
Các mội trờng tổ hợp khép kín provide a one-stop shop when it comes to
programming. Chúng cung cấp một trình biên dịch, trình soạn thảo, trình gỡ rối
và kết hợp chúng trong một khối ngăn lắp cho nhà lập trình.
Since development environments tend to change, the particular version you use
may require slightly different keystrokes.
Bớc 1:
Nó rất dễ dàng quản lý nếu bạn tạo một th mục riêng cho mỗi chơng trình
mà bạn đang làm việc. Trong trờng hợp này bạn sẽ tạo một th mục HELLO để
chứa chơng trình hello của bạn.
Trong MS-DOS
C: MKDIR HELLO
C: CD HELLO

Bớc 2: gõ, dịch và chạy chơng trình của bạn
Mỗi IDE khác nhau một chút, vì vậy chúng ta xét đến các lệnh riêng biệt
cho mỗi loại:
Turbo-C++
1. khởi động Turbo-C IDE với dòng lệnh:
C: TC
2. Dùng các lệnh Options/Compiler/Code Generation để lấy ra hộp hội
thoại Code Generation, nh trên hình 2-3. Đổi mô hình nhớ (model memory) về
dạng rộng.
3. Dùng các lệnh Option/Compiler Entry/Exit để bật kiểm tra ngăn xếp,
nh trong hình 2-4.
Hình 2-3. Hộp hội thoại Code Generation
Hình 2-4. Hộp hội thoại Entry/Exit Code Generation
4. Sử dụng lệnh Option/Compiler/Messages/Display để hiện ra hộp hội
thoại Compiler Messages nh ở hình 2-5. Chọn All để hiện lên tất cả các cảnh
báo.
5. Sử dụng lệnh Option/Save để nghi tất cả các lựa chọn bạn đã dùng.
H×nh 2-5. Hép héi tho¹i Conpiler Messages
6. Dïng hép héi tho¹i Open Project File ®Ó chän mét file project. Trong tr-
êng hîp nµy, file project cña b¹n cã tªn lµ HELLO.PRJ. Mµn h×nh nªn cã d¹ng
gièng nh h×nh 2-6 khi b¹n kÕt thóc.
H×nh 2-6. Hép héi tho¹i Open Project File
7. NhÊn phÝm Insert ®Ó céng mét file vµo project. File mµ b¹n muèn céng
lµ HELLO.CCP nh trªn h×nh 2-7.
H×nh 2-7. Hép héi tho¹i Add to Project List
8. NhÊn ESC ®Ó tho¸t ra kho¶i vßng “céng file”.
9. NhÊn phÝm mòi lªn ®Ó nhÈy qua mét dßng. Dßng víi hello.cpp b©y giê ®-
îc s¸ng lªn nh h×nh 2-8.
H×nh 2-8. "Hello" project
10. NhÊn Return ®Ó so¹n th¶o file nµy.

11. Gâ vµo nh÷ng m· sau:
# include <iostream.h>
int main()
{
cout << "Hello World\n";
return (0);
}
KÕt qu¶ cã d¹ng nh h×nh 2-9.
Hình 2-9. Kết thúc project
12. Sử dụng lệnh Run/Run để thực hiện chơng trình.
13. Sau khi chơn trình chạy, điều khiển quay về IDE. Điều này có nghĩa là
bạn không thể xem kết quả chơng trình của mình. Để xem nó bạn phải chuyển
về màn hình ngời sử dụng bằng cách sử dụng lệnh Windows/User.
Nhấn một phím bất kỳ nó sẽ trả bạn về màn hình IDE. Hình 2-10 hiển thị
kết quả đa ra của chơng trình.
14. Khi kết thúc, bạn có thể ghi chơng trình của mình với lệnh File/Save.
15. Để thoát khỏi IDE, dùng lệnh File/Quit.
Hình 2-10. User screen
Borland C++
1. Tạo một th mục HELLO để chứa các file cho chơng trình hello của chúng
ta. Bạn có thể tạo th mục bằng cách sử dụng chơng trình quản lý file của
Windows hoặc gõ dòng lệnh sau tại dấu nhắc của MS-DOS:
mkdir\HELLO
2. Từ Windows, nháy kép vào biểu tợng Borland C++ để khởi động IDE.
Chơng trình bắt đầu đợc thực hiện và hiển thị một không gian làm việc trống
nh trong hình 2-11.
3. Chon mục Project/New Project để tạo một project cho chơng trình của
chúng ta. Điền vào ô trống "Project Pathand Name:" với c:\hello\hello.ide.
4. Nhấn nút Advanced để hiển thị hội thoại Advanced Options. Xoá các
mục .rc và .def nh hiển thị trong hình 2-13.

5. Nhấn nút OK để quay về hội thoại New Target.
6. Nhấn Alt-F10 để hiển thị menu phụ nh trong hình 2-14.
7. Chọn Edit Node Attributes để hiển thị hội thoại nh trong hình 2-15.
Trong ô trống Style Sheet, chọn mục "Debug Info and Diagnostics." Nhấn OK để trở
lại cửa sổ chính.
Hình 2-11. Màn hình chính của Borland C++
H×nh 2-12. Hép héi tho¹i New Target
H×nh 2-13. Hép héi tho¹i Advenced Options
H×nh 2-14. Menu phô Target Options
H×nh 2-15. Hép héi tho¹i Node Attributes
8. Vào phần hội thoại Project Optión bằng cách chọn mục Options/Project
Options. Nhẩy xuống mục Compiler và nhấn lên dấu "+" để mở rộng các mục
chọn.
Quay về phần chọn kiểm tra tràn ô nhớ nh trong hình 2-16. Nhấn OK để
ghi các lựa chọn này.
9. Chọn OK để quay về cửa sổ chính. Nhấn phím mũi tên xuống để chọn
mục hello[.cpp] trong project (xem trong hình 2-17).
10. Nhấn Return để bắt đầu soạn thảo file hello.cpp. Gõ các mã dới đây:
# include <iostream.h>
int main()
{
cout <<"Hello World\n";
return (0);
}
Khi kết thúc, màn hình của bạn giống nh hình 2-18.
11. Dịch và chạy chơng trình bằng cách chọn mục menu Debug/Run. Ch-
ơng trình sẽ chạy và hiển thị Hello World trong cửa sổ nh biểu diễn trong
hình 2-19.
Hình 2-16. Hôp hội thoại Project Options
H×nh 2-17. Hello Project

Hình 2-18. Chơng trình "Hello World"
Hình 2-19. "Hello World" sau khi thực hiện
Microsoft Visual C++
1. Tạo một th mục HELLO để chứa các file cho chơng trình hello của chúng
ta. Bạn có thể tạo th mục bằng cách sử dụng chơng trình quản lý file của
Windows hoặc gõ dòng lệnh sau tại dấu nhắc của MS-DOS:
mkdir \ HELLO
2. Từ Windows, nháy kép vào biểu tợng Borland C++ để khởi động IDE.
Một không gian hiển thị trống sẽ hiện ra nh trong hình 2-20.
3. Nhấn chuột trên Project/New để hiển thị hội thoại New Project nh trong
hình 2-21.
Điền vào ô trống Project Name với \hello\hello.mak. Thay đổi Project Type thành
QuickWin application [.EXE].
4. Visual C++ vào hội thoại cho phép bạn đặt tên các file nguồn trong
project này (xem hình 2-22). Trong trờng hợp này chúng ta chỉ có file hello.cpp.
Nhấn vào Add để gõ vào tên trong project và nhấn Close để xác nhận với
Visual C++ rằng không có thêm file nào nữa trong chơng trình.
5. Chọn Options/Project Options để hiển thị hội thoại Project Options nh trong
hình 2-23.
Nhấn lên nút Compiler để thay đổi các lựa chọn trình biên dịch.
6. Nhẩy xuống mục Custom Options trong Category và thay đổi mức độ cảnh
báo thành 4 nh trong hình 2-24.
7. Thay đổi loại (category) Memory Model và thay đổi mô hình bộ nhớ về
Large (xem hình 2-25).
8. Đóng hội thoại bằng cách nhấn nút OK, nó sẽ quay lại hội thoại Project
Options. Cũng nhấn OK để bỏ hội thoại này.
9. Chọn "File/New" để bắt đầu một file chơng trình mới. Gõ các dòng lệnh
sau:
#include <iostream.h>
int main()

{
cout <<"Hello World\n";
return (0);
}
Kết quả, nên giống nh trong hình 2-26.
10. Dùng mục menu File/Save As để ghi các file với tên là hello.cpp.
11. Dùng lệnh Project/Build để biên dịch chơng trình. Trình biên dịch đa ra
các thông báo nh nó tạo lên. Khi nó kết thúc, màn hình của bạn nên trông
giống nh trong hình 2-27.
12. Chơng trình bây giờ có thể đợc bắt đầu với lệnh Dedug/Go. Các kết quả
xuất hiện nh trong hình 2-28.
Gọi Help trong UNIX
Hầu hết các hệ thống UNIX có hệ thống cung cấp tài liệu trực tuyến đợc
gọi là "man pages". Các hệ thống này có thể đợc truy nhập đến bằng lệnh man.
(UNIX dùng man nh sự viết tắt của "manual.") Để có thông tin về các chủ đề
đặc biệt, dùng lệnh:
man subject
Lệnh ngoài ra có một từ khoá định dạng kiểu:
man k keyword
Để xác định tên của tất cả trang man với từ "output" trong tiêu đề của nó, dùng
lệnh:
man k output
Gọi Help trong một môi trờng phát triển tổ hợp
Các môi trờng phát triển tổ hợp nh Turbo-C++, Borland C++, và Microsoft
C++ có một mục menu Help. Mục này
Các bài tập lập trình
Bài tập 2-1: Trên máy tính của bạn, gõ chơng trình hello và chạy nó.
Bài tập 2-2: Lấy vài ví dụ lập trình từ file nguồn nào đó, đa vào máy và chạy
chúng.
Chơng 3

Kiểu (style)
Chơng này sẽ trình bày dùng kiểu lập trình hoàn hảo nh thế nào để tạo một
chơng trình đơn giản và dễ đọc. Nó dờng nh lạc hậu để trình bày về style trớc
khi bạn biết về lập trình. Nhng style là một phần quan trọng nhất của lập trình.
Style là những cái gì khác nhau giữa sự toàn diện và sự bỏ đi. Nó là những cái
gì khác nhau giữa nghệ thuật lập trình và những cái gì thô thiển. Trớc tiên bạn
phải bạn bắt buộc phải học kiểu lập trình hoàn thiện, bạn gõ những dòng mã
lệnh đầu tiên, vì vậy mọi cái bạn viết sẽ có chất lợng cao nhất.
This chapter discusses how to use good programming style to create a simple,
easy-to-read program. It may seem backward to discuss style before you know how
to program, but style is the most important part of programming. Style is what
separates the gems from the junk. It is what separates the programming artist from
the butcher. You must learn good programming style first, before typing in your first
line of code, so everything you write will be of the highest quality.
Trái ngợc với sự tin tởng phổ biến, những nhà lập trình không bỏ hầu hết
những thời gian của họ vào viết những chơng trình. Xa hơn nữa thời gian đợc
bỏ vào bảo quản, nâng cấp, gỡ rối những mã tồn tại nhiều hơn là nó đã từng đ-
ợc bỏ vào tạo một công việc mới. Tổng số thời gian bỏ ra để bảo quản chơng
trình is skyrocketting. Từ năm 1980 đến 1990 con số trung bình của các dòng
lệnh trong một ứng dụng điển hình vào khoảng từ 23,000 đến 1.2 triệu. Số năm
hệ thống trung bình đã mất từ 4.75 đến 9.4 năm.
Contrary to popular belief, programmers do not spend most of their time writing
programs. Far more time is spent maintaining, upgrading, and debugging existing
code than is ever spent on creating new work. The amount of time spent on
maintenance is skyrocketing. From 1980 to 1990 the average number of lines in a
typical application went from 23,000 to 1.2 million. The average system age has gone
from 4.75 to 9.4 years.
To make matters worse, 74% of the managers surveyed at the 1990 Annual
Meeting and Conference of the Software Maintenance Association reported that they
"have systems in their department that have to be maintained by specific individuals

because no one else understands them."
Hầu hết các phần mền đựoc xây dựng dựa trên bản đã tồn tại. Gần đây tôi
đã hoàn thành mã háo cho 12 chơng trình mới. Chỉ duy nhất một chơng trình
đợc tạo từ các phần riêng, còn 11 chơng trình khác đợc sửa lại cho thích hợp từ
những chơng trình khác.
Nhiều nhà lập trình tin tởng rằng mục đích của chơng trình chỉ là đa ra cho
máy tính một bộ kết hợp của các lệnh. Điều này không đúng, các chơng trình
viết chỉ dành cho máy có hai vấn đề:
Nó rất khó để hiệu chỉnh bởi vì đôi lúc thậm chí ngay cả tác giả cũng
không hiểu đợc chúng.
Các sự sửa đổi và nâng cấp khó thực hiện đợc bởi vì ngời bảo quản ch-
ơng trình phải mất một số lợng đáng kể thời gian để tởng tợng ra xem ch-
ơng trình thực hiện việc gì từ mã của nó.
Lời chú thích (Comments)
Một cách lý tởng, một chơng trình thoả mãn hai mục đích: Trớc tiên, nó đa
cho máy tính một bộ các lệnh khô khan, thứ hai, nó cung cấp cho những nhà
lập trình một sự diễn tả rõ dàng, dễ đọc những gì chơng trình thực hiện.
Ví dụ 2-1 chứa một lỗi rõ ràng. Nó là một lỗi mà nhiều nhà lập trình vẫn
còn tạo ra và một điều là nó gây ra nhiều phiền toái hơn là bất cứ vấn đề nào
khác.
Example 2-1 contains a glaring error. It is an error that many programmers still
make and one that causes more trouble than any other problem. The program contains
no comments.
Một sự làm việc nhng chơng trình không có sự chú thích là một quả bomb
thời gian đạng chờ để nổ. Sớm hoặc muộn hơn một ngời nào đó sẽ phải sửa
hoặc nâng cấp chơng trình, và sự thiếu các chú thích sẽ làm công việc khó hơn
gấp mời lần. Một chơng trình đơn giản với sự chú thích hợp lý là một công
việc khéo léo. Học cách chú thích nh thế nào cũng quan trọng nh là học để mã
hoá nh thế nào cho đúng.
C++ có hai dạng chú thích. Kiểu thứ nhất bắt đầu với /* và kết thúc với */.

Với kiểu chú thích này, nó có thể mở rộng nhiều dòng nh ở dới đây:
/* This is a single-line comment.*/
/*
* This is a multiline comment.
*/
Một kiểu chú thích khác bắt đầu với // và kéo dài đến cuối dòng.
//This is another form of comment.
//The // must begin each line that is to be a comment.
Ưu điểm của kiểu chú giả /* */ là nó có thể dễ ràng mở rộng ra nhiều
dòng, ngợc lại, với kiểu // bạn phải đặt // trên mỗi một dòng. Nhợc điểm
của /* */ nếu bạn quên */ thì câu chú thích trở thành mã chơng trình của bạn.
Kiểu chú thích nào bạn nên dùng? Bất cứ cái nào mà làm cho chơng trình
của bạn rõ nhất, dễ đọc nhất có thể đợc. Phần lớn là nó thuộc vấn đề sở thích.
Trong cuốn sách này chúng ta dùng kiểu /* */ cho những chú thích lớn và
nhiều dòng trong khi dùng kiểu // khi mà nó chỉ chiếm một dòng.
Bất cứ kiểu chú thích nào bạn quyết định sử dụng, bạn cũng phải chú thích
các chơng trình của mình. Ví dụ 3-1 là chơng trình "hello world" sau khi thêm
các lời chú thích.
Example 3-1. hello2/hello2.cc
/****************************************************
* hello program to print out "Hello World". *
* Not an especially earth-shattering program. *
* *
* Author: Steve Oualline *
* *
* Purpose: Demonstration of a simple program *
* *
* Usage: *
* Run the program and the message appears *
****************************************************/

×