Thứ Năm, 27 tháng 2, 2014

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

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.

Không có nhận xét nào:

Đăng nhận xét