Lập trình C++ - Chương 1: Mở đầu

Máy tính sốlà một công cụ đểgiải quyết hàng loạt các bài toán lớn. Một lời giải cho một

bài toán nào đó được gọi là một giải thuật(algorithm); nó mô tảmột chuỗi các bước cần

thực hiện đểgiải quyết bài toán. Một ví dụ đơn giản cho một bài toán vàmột giải thuật có

thểlà:

Bài toán: Sắp xếp một danh sách các sốtheo thứtựtăng dần.

Giải thuật:Giảsửdanh sách đã cho là list1; tạo ramột danh sách rỗng, list2,

đểlưu danh sách đã sắp xếp. Lặp đi lặp lại công việc, tìmsốnhỏnhất trong

list1, xóa nó khỏi list1, và thêmvào phần tửkếtiếp trong danh sách list2, cho

đến khi list1 là rỗng.

Giải thuật được diễn giải bằng các thuật ngữtrừu tượng mang tính chất dễhiểu. Ngôn

ngữthật sự được hiểu bởi máy tính là ngôn ngữmáy. Chương trình được diễn đạt bằng

ngôn ngữmáy được gọi là có thểthực thi. Một chương trình được viết bằng bất kỳmột

ngôn ngữnào khác thì trước hết cần được dịch sang ngôn ngữmáy đểmáy tính có thể

hiểu và thực thi nó.

pdf15 trang | Chuyên mục: C/C++ | Chia sẻ: dkS00TYs | Lượt xem: 1797 | Lượt tải: 1download
Tóm tắt nội dung Lập trình C++ - Chương 1: Mở đầu, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
à sắp xếp các thực thể 
dữ liệu tới các vị trí bộ nhớ. Ví dụ, định nghĩa biến 
int salary = 65000; 
làm cho trình biên dịch cấp phát một vài byte cho biến salary. Số byte cần 
được cấp phát và phương thức được sử dụng cho việc biểu diễn nhị phân của 
số nguyên phụ thuộc vào sự thi hành cụ thể của C++. Trình biên dịch sử 
dụng địa chỉ của byte đầu tiên của biến salary được cấp phát để tham khảo tới 
nó. Việc gán trên làm cho giá trị 65000 được lưu trữ như là một số nguyên 
bù hai trong hai byte được cấp phát (xem Hình 1.3). 
Hình 1.3 Biểu diễn của một số nguyên trong bộ nhớ. 
Chương 1: Mở đầu 9 
 1211 1212 1213 1214 1215 1216 1217
Byte Byte Byte Byte Byte ... MemoryBộ nhớ... 10110011 10110011
salary
( a two-byte integer whose address is 1214)một số nguyên 2 byte ở địa chỉ 1214 
 Trong khi việc biểu diễn nhị phân chính xác của một hạng mục dữ liệu là 
ít khi được các lập trình viên quan tâm tới thì việc tổ chức chung của bộ nhớ 
và sử dụng các địa chỉ để tham khảo tới các hạng mục dữ liệu là rất quan 
trọng. 
1.8. Số nguyên 
Biến số nguyên có thể được định nghĩa là kiểu short, int, hay long. Chỉ khác 
nhau là số int sử dụng nhiều hơn hoặc ít nhất bằng số byte như là một số short, 
và một số long sử dụng nhiều hơn hoặc ít nhất cùng số byte với một số int. Ví 
dụ, trên máy tính cá nhân thì một số short sử dụng 2 byte, một số int cũng 2 
byte, và một số long là 4 byte. 
short age = 20; 
int salary = 65000; 
long price = 4500000; 
 Mặc định, một biến số nguyên được giả sử là có dấu (chẳng hạn, có một 
sự biểu diễn dấu để mà nó có thể biểu diễn các giá trị dương cũng như là các 
giá trị âm). Tuy nhiên, một số nguyên có thể được định nghĩa là không có dấu 
bằng cách sử dụng từ khóa unsigned trong định nghĩa của nó. Từ khóa signed 
cũng được cho phép nhưng hơi dư thừa. 
unsigned short age = 20; 
unsigned int salary = 65000; 
unsigned long price = 4500000; 
 Số nguyên (ví dụ, 1984) luôn luôn được giả sử là kiểu int, trừ khi có một 
hậu tố L hoặc l thì nó được hiểu là kiểu long. Một số nguyên cũng có thể được 
đặc tả sử dụng hậu tố là U hoặc u., ví dụ: 
1984L 1984l 1984U 1984u 1984LU 1984ul 
1.9. Số thực 
Biến số thực có thể được định nghĩa là kiểu float hay double. Kiểu double sử 
dụng nhiều byte hơn và vì thế cho miền lớn hơn và chính xác hơn để biểu 
diễn các số thực. Ví dụ, trên các máy tính cá nhân một số float sử dụng 4 byte 
và một số double sử dụng 8 byte. 
Chương 1: Mở đầu 10 
float interestRate = 0.06; 
double pi = 3.141592654; 
Số thực (ví dụ, 0.06) luôn luôn được giả sử là kiểu double, trừ phi có một hậu 
tố F hay f thì nó được hiểu là kiểu float, hoặc một hậu tố L hay l thì nó được 
hiểu là kiểu long double. Kiểu long double sử dụng nhiều byte hơn kiểu double 
cho độ chính xác tốt hơn (ví dụ, 10 byte trên các máy PC). Ví dụ: 
0.06F 0.06f 3.141592654L 3.141592654l 
 Các số thực cũng có thể được biểu diễn theo cách ký hiệu hóa khoa học. 
Ví dụ, 0.002164 có thể được viết theo cách ký hiệu hóa khoa học như sau: 
2.164E-3 or 2.164e-3 
Ký tự E (hay e) thay cho số mũ (exponent). Cách ký hiệu hóa khoa học được 
thông dịch như sau: 
2.164E-3 = 2.164 × 10-3 = 0.002164
1.10.Ký tự 
Biến ký tự được định nghĩa là kiểu char. Một biến ký tự chiếm một byte đơn 
để lưu giữ mã cho ký tự. Mã này là một giá trị số và phụ thuộc hệ thống mã 
ký tự đang được dùng (nghĩa là phụ thuộc máy). Hệ thống chung nhất là 
ASCII (American Standard Code for Information Interchange). Ví dụ, ký tự A 
có mã ASCII là 65, và ký tự a có mã ASCII là 97. 
char ch = 'A'; 
 Giống như số nguyên, biến ký tự có thể được chỉ định là có dấu hoặc 
không dấu. Mặc định (trong hầu hết các hệ thống) char nghĩa là signed char. 
Tuy nhiên, trên vài hệ thống thì nó có nghĩa là unsigned char. Biến ký tự có dấu 
có thể giữ giá trị số trong miền giá trị từ -128 tới 127. Biến ký tự không dấu 
có thể giữ giá trị số trong miền giá trị từ 0 tớ 255. Kết quả là, cả hai thường 
được dùng để biểu diễn các số nguyên nhỏ trong chương trình (và có thể được 
đánh dấu các giá trị số như là số nguyên): 
signed char offset = -88; 
unsigned char row = 2, column = 26; 
 Ký tự được viết bằng cách đóng dấu ký tự giữa cặp nháy đơn (ví dụ, 'A'). 
Các ký tự mà không thể in ra được biểu diễn bằng việc sử dụng các mã 
escape. Ví dụ: 
'\n' // xuống hàng mới 
'\r' // phím xuống dòng 
Chương 1: Mở đầu 11 
'\t' // phím tab ngang 
'\v' // phím tab dọc 
'\b' // phím lùi 
Các dấu nháy đơn, nháy đôi và ký tự gạch chéo ngược cũng có thể sử dụng ký 
hiệu escape: 
'\'' // trích dẫn đơn (') 
'\"' // trích dẫn đôi (") 
'\\' // dấu vạch chéo ngược (\) 
 Ký tự cũng có thể được chỉ định rõ sử dụng giá trị mã số của chúng. Mã 
escape tổng quát \ooo (nghĩa là, 3 ký tự số cơ số 8 theo sau một dấu gạch chéo 
ngược) được sử dụng cho mục đích này. Ví dụ (giả sử ASCII): 
'\12' // hàng mới (mã thập phân = 10) 
'\11' // tab ngang (mã thập phân = 9) 
'\101' // 'A' (mã thập phân = 65) 
'\0' // rỗng (mã thập phân = 0) 
1.11.Chuỗi 
Chuỗi là một dãy liên tiếp các ký tự được kết thúc bằng một ký tự null. Biến 
chuỗi được định nghĩa kiểu char* (nghĩa là, con trỏ ký tự). Con trỏ đơn giản 
chỉ là một vị trí trong bộ nhớ. (Các con trỏ sẽ được thảo luận trong chương 5). 
Vì thế biến chuỗi chứa đựng địa chỉ của ký tự đầu tiên trong chuỗi. Ví dụ, 
xem xét định nghĩa: 
char * str = "HELLO"; 
Hình 1.4 minh họa biến chuỗi và chuỗi "HELLO" có thể xuất hiện như thế nào 
trong bộ nhớ. 
Hình 1.4 Chuỗi và biến chuỗi trong bộ nhớ 
1211 1212 1213 1214 1215 1216 1217
... 'H' 'E' 'L' 'L' 'O' '\0'
1210120912081207 1218
1212
str
...
 Chuỗi được viết bằng cách đóng ngoặc các ký tự của nó bên trong cặp 
dấu nháy kép (ví dụ, "HELLO"). Trình biên dịch luôn luôn thêm vào một ký tự 
null tới một hằng chuỗi để đánh dấu điểm kết thúc. Các ký tự chuỗi có thể 
được đặc tả sử dụng bất kỳ ký hiệu nào dùng để đặc tả các ký tự. Ví dụ: 
"Name\tAddress\tTelephone" // các từ phân cách 
"ASCII character 65: \101" // 'A' được đặc tả như '101' 
Chương 1: Mở đầu 12 
 Chuỗi dài có thể nới rộng qua khỏi một hàng đơn, trong trường hợp này 
thì mỗi hàng trước phải được kết thúc bằng một dấu vạch chéo ngược. Ví dụ: 
"Example to show \ 
the use of backslash for \ 
writing a long string" 
Dấu \ trong ngữ cảnh này có nghĩa là phần còn lại của chuỗi được tiếp tục 
trên hàng kế tiếp. Chuỗi trên tương đương với chuỗi được viết trên hàng đơn 
như sau: 
"Example to show the use of backslash for writing a long string" 
 Một lỗi lập trình chung thường xảy ra là lập trình viên thường nhầm lẫn 
một chuỗi ký tự đơn (ví dụ, "A") với một ký tự đơn (ví dụ, 'A'). Hai điều này là 
không tương đương. Chuỗi ký tự đơn gồm 2 byte (ký tự 'A' được theo sau là 
ký tự '\0'),trong khi ký tự đơn gồm chỉ một byte duy nhất. 
 Chuỗi ngắn nhất có thể có là chuỗi rỗng ("") chỉ chứa ký tự null. 
1.12.Tên 
Ngôn ngữ lập trình sử dụng tên để tham khảo tới các thực thể khác nhau dùng 
để tạo ra chương trình. Chúng ta cũng đã thấy các ví dụ của một loại các tên 
(nghĩa là tên biến) như thế. Các loại khác gồm: tên hàm, tên kiểu, và tên 
macro. 
 Sử dụng tên rất tiện lợi cho việc lập trình, nó cho phép lập trình viên tổ 
chức dữ liệu theo cách thức mà con người có thể hiểu được. Tên không được 
đưa vào mã có thể thực thi được tạo ra bởi trình biên dịch. Ví dụ, một biến 
temperature cuối cùng trở thành một vài byte bộ nhớ mà được tham khảo tới 
bởi các mã có thể thực thi thông qua địa chỉ của nó (không thông qua tên của 
nó). 
 C++ áp đặt những luật sau để xây dựng các tên hợp lệ (cũng được gọi là 
các định danh). Một tên chứa một hay nhiều ký tự, mỗi ký tự có thể là một 
chữ cái (nghĩa là, 'A'-'Z' và 'a'-'z'), một số (nghĩa là, '0'-'9'), hoặc một ký tự 
gạch dưới ('_'), ngoại trừ ký tự đầu tiên không thể là một số. Các ký tự viết 
hoa và viết thường là khác nhau.Ví dụ: 
salary // định danh hợp lệ 
salary2 // định danh hợp lệ 
2salary // định danh không hợp lệ (bắt đầu với một số) 
_salary // định danh hợp lệ 
Salary // hợp lệ nhưng khác với salary 
Chương 1: Mở đầu 13 
 C++ không có giới hạn số ký tự của một định danh. Tuy nhiên, hầu hết 
thi công lại áp đặt sự giới hạn này nhưng thường đủ lớn để không gây bận 
tâm cho các lập trình viên (ví dụ 255 ký tự). 
 Một số từ được giữ bởi C++ cho một số mục đích riêng và không thể 
được dùng cho các định danh. Những từ này được gọi là từ khóa (keyword) 
và được tổng kết trong bảng 1.3: 
Bảng 1.3 Các từ khóa C++. 
asm continue float new signed try 
auto default for operator sizeof typedef 
break delete friend private static union 
case do goto protected struct unsigned 
catch double if public switch virtual 
char else inline register template void 
class enum int return this volatile 
const extern long short throw while 
Bài tập cuối chương 1 
1.1 Viết chương trình cho phép nhập vào một số đo nhiệt độ theo độ Fahrenheit 
và xuất ra nhiệt độ tương đương của nó theo độ Celsius, sử dụng công thức 
chuyển đổi: 
 ° = ° −C F5
9
32( ) 
Biên dịch và chạy chương trình. Việc thực hiện của nó giống như thế này: 
Nhiet do theo do Fahrenheit: 41 
41 do Fahrenheit = 5 do Celsius 
1.2 Hàng nào trong các hàng sau biểu diễn việc định nghĩa biến là không hợp lệ? 
int n = -100; 
unsigned int i = -100; 
signed int = 2.9; 
long m = 2, p = 4; 
int 2k; 
double x = 2 * m; 
float y = y * 2; 
unsigned double z = 0.0; 
double d = 0.67F; 
float f = 0.52L; 
signed char = -1786; 
char c = '$' + 2; 
sign char h = '\111'; 
Chương 1: Mở đầu 14 
char *name = "Peter Pan"; 
unsigned char *num = "276811"; 
1.3 Các định danh nào sau đây là không hợp lệ? 
identifier 
seven_11 
_unique_ 
gross-income 
gross$income 
2by2 
default 
average_weight_of_a_large_pizza 
variable 
object.oriented 
1.4 Định nghĩa các biến để biểu diễn các mục sau đây: 
• Tuổi của một người. 
• Thu nhập của một nhân viên. 
• Số từ trong một từ điển. 
• Một ký tự alphabet. 
• Một thông điệp chúc mừng. 
Chương 1: Mở đầu 15 

File đính kèm:

  • pdfC++Chuong_01.pdf