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

ĐỀ CƯƠNG BÀI TẬP C++ pdf

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 (1.21 MB, 45 trang )

Đề Cương Bài Tập C++
Đề nghị các bạn học thuộc hết lý thuyết ở trên này rồi mới bắt đầu làm bài tập vì như
thế các bạn sẽ hiểu và nhớ lâu hơn!!!.
Câu 1: Sự khác biệt giữa một trình xử lý văn bản và một bộ xử lý từ là gì?
Một trình xử lý văn bản sẽ tạo ra các file dạng thô chỉ chứa ký tự mã ASCII (plain text) trong
chúng. Chúng không có các lệnh định dạng hoặc các biểu tượng nào khác được yêu cầu bởi bộ
xử lý từ. Các file văn bản không tự động ngắt từ in đậm, in nghiêng,…
Câu 2: Hỏi #include sẽ thực hiện chức năng gì?
Đây là một chỉ thị tiền xử lý và nó sẽ hoạt động khi bạn gọi trình biên dịch. Chỉ thị đặc biệt này
làm cho file có tên sau từ khóa include được đọc vào giống như nó được nhập vào tại vị trí đó
trong mã nguồn của bạn.
Câu 3: Hỏi: Sự khác biệt giữa các chú giải kiểu // và các chú giải kiểu /* */ là gì?
Dấu chú giải // sẽ hết hiệu lực ở cuối dòng. Các chú giải /* có hiệu lực cho đến khi nào có một
chú giải đóng */.
Câu 4:Hỏi: Sự khác biệt giữa một chú giải tốt và một chú giải không tốt là gì?
Một chú giải tốt sẽ thông báo cho người đọc biết mục đích của một đoạn mã phức tạp. Một chú
giải không tốt trình bày lại những gì mà một đoạn mã đang thực hiện.
Câu 5: Biến là gì?
Trong C++, biến là nơi để lưu trữ thông tin.
Câu 6: Lập trình là gì?
Lập trình thực chất là điều khiển – bằng một ngôn ngữ lập trình cụ thể - các xử lý thông tin trên
máy tính điện tử theo yêu cầu của bài toán đặt ra. Kết quả của lập trình là chương trình được
hợp thức hóa.
Câu 7: Chương trình là gì?
Một chương trình (program) có thể được định nghĩa là một tập hợp lệnh do người lập trình tạo
nên hoặc một phần mềm có khả năng thực thi.
Câu 8: Con trỏ là gì?
Con trỏ là một biến lưu trữ một địa chỉ của bộ nhớ.
Câu 9: Toán tử là gì?
Lương Thanh Bình – Khoa Công Nghệ Thông Tin – Đại Học Đà Lạt
1


Một toán tử là một ký hiệu yêu cầu trình biên dịch thực hiện một hành động. Các toán tử hoạt
động trên các toán hạng, và trong C++ tất cả các toán hạng đều là biểu thức. Trong C++ có nhiều
loại toán tử khác nhau. Hai trong các loại này là:
• Toán tử gán.
• Toán tử toán học.
Câu 10: Hãy liệt kê các ký hiệu toán tử trong C++?
Toán tử gán (Assignment Operator): Ký hiệu là “=” chuyển kết quả của các toán hạng bên vế
phải của toán tử gán sang toán hạng bên trái của toán tử gán. Biểu thức x = a + b; . Biểu thức
này sẽ gán kết quả của phép cộng a và b sang toán hạng x. Toán hạng hợp lệ ở vế trái của toán
tử gán được gọi là lvlue (left value). Toán hạng ở bên vế phải của toán tử gán được gọi là rvalue
(right value). Các hằng số luôn là rvalue. Chúng ko thể là lvalue. Vì thế bạn có thể viết:
X = 35; // ok
Nhưng bạn ko thể viết
35 = X; // error, not an lvalue!
Giải thích: Lvalue là một toán hạng nằm ở bên trái của toán tử gán. Rvalue là một toán hạng
nằm ở bên phải của toán tử gán.
Toán tử toán học:
Có năm toán tử toán học: cộng(+), trừ(-), nhân(*), chia(/) và phép chia lấy dư(%). Phép cộng và
phép trừ sẽ thực hiện đúng những gì mà bạn đã biết. Tuy nhiên phép trừ với các số nguyên
không dấu (unsigned) có thể sẽ dẫn đến những kết quả đáng ngạc nhiên.
Ví dụ: Cho Kq = 105, Bạn hãy use các toán tử làm sao cho kết quả bằng 5.
Trả lời: Dùng %= để tính toán ta có: Kq %= 10; Câu lệnh này có nghĩa là lấy Kq / 10 = 10.5 và lấy
phần dư, ở đây dư 0.5 thì kết quả sẽ là 5. Lưu ý là Kq phải ở dạng int or unsigned thì mới được.
Toán tử quan hệ:
Tên Toán tử Ví dụ Kết quả
Bằng == 100 == 50; Sai
50 == 50; Đúng
Không bằng != 100 != 50; Đúng
50 != 50; Sai
Lớn hơn > 100 > 50; Đúng

50 > 50; Sai
Lớn hơn hoặc bằng >= 100 >= 50; Đúng
Nhỏ hơn < 100 < 50; Sai
Lương Thanh Bình – Khoa Công Nghệ Thông Tin – Đại Học Đà Lạt
2
50 < 50; Sai
Nhỏ hơn hoặc bằng <= 100 <= 50; Sai
50 <= 50; Đúng
Chia số nguyên và chia lấy số dư (Modulus):
Phép chia số nguyên hơi khác với phép chia thông thường. Khi bạn chia 21 với 4, kết quả sẽ là
một số thực có phần thập phân (các kiểu như float, double, long double). Do đó số nguyên ko
có phần thập phân nên phần thập phân sẽ bị bỏ đi. Kết quả sẽ là 5.Để lấy số dư, bạn phải thực
hiện phép chia lấy dư 21 cho 4 (21 % 4). Kết quả sẽ là 1. Toán tử % cho bạn biết số dư sau một
phép chia số nguyên.
Ví dụ: Bạn hãy chạy chương trình sau để luyện skill của bạn(nếu ko hiểu đề nghị bạn coi cái bảng
hồng hồng ở dưới).
Lương Thanh Bình – Khoa Công Nghệ Thông Tin – Đại Học Đà Lạt
3
Kết quả phải như sau:
Kết hợp toán tử gán và toán tử toán học:
Việc cộng một giá trị vào một biến, và sau đó gán kết quả ngược lại biến này là một vấn đề rất
phổ biến. Nếu bạn có một biến myAge và bạn muốn tăng giá trị của nó lên hai thì bạn có thể viết
int myAge = 5;
int temp;
temp = myAge + 2; // add 5+2 and put it in temp
myAge = temp; // put it back in myAge
Tuy nhiên phương pháp này rất phức tạp. Trong C++, bạn có thể đặt cùng một biến trên cả hai
vế của toán tử gán, như vậy đoạn mã trên trở thành:
int myAge = 5;
myAge = myAge + 2;

Trong C++, câu lệnh thứ hai được đọc là “ Cộng hai vào giá trị của myAge và gán kết quả vào
myAge”.
Có một cách viết khác đơn giản hơn nhưng có thể hơi khó đọc:
myAge += 2;
Toán tử cộng tự gán (+=) sẽ cộng rvalue và lvalue sau đó gán lại kết quả vào lvalue. Toán tử này
đọc là “cộng – bằng”. Câu lệnh trên được đọc là myAge cộng bằng 2”. Nếu myAge có giá trị là 4
thì nó sẽ có giá trị là 6 sau câu lệnh này.
Ngoài ra chúng ta còn có các toán tử trừ(-=), chia(/=), nhân(*=) và chia lấy số dư(%=) tự gán.
Phép tăng và phép giảm: Giá trị phổ biến nhất để tăng (hoặc giảm) và sau đó gán lại vào một
biến là 1. Trong C++, việc tăng giá trị lên một được gọi là phép tăng, và việc giảm bớt giá trị đi 1
được gọi là phép giảm. Có những toán tử đặc biệt để thực hiện những thao tác này.
Lương Thanh Bình – Khoa Công Nghệ Thông Tin – Đại Học Đà Lạt
4
Toán tử tăng sẽ cộng thêm 1 vào giá trị của biến, Và toán tử giảm ( ) sẽ trừ giá trị của biến đi 1.
Vì thế, nếu bạn có một biến C, và bạn muốn tăng nó bạn có thể thực hiện câu lệnh sau:
C++; // Start with C and increment it.
Câu lệnh trên tương đương với câu lệnh
C = C + 1;
Và cũng tương đương với câu lệnh
C += 1;
Tiền tố và hậu tố: Cả hai toán tử tăng và toán tử giảm đều có hai loại khác nhau là tiền tố và hậu
tố. Tiền tố được viết trước tên biến (++myAge) và hậu tố được viết sau tên biến(myAge++). Toán
tử tiền tố được thực hiện trước khi gán và toán tử hậu tố được thực hiện sau khi gán.
Về ngữ nghĩa thì tiền tố là tăng(or giảm) giá trị của biến rồi sau đó mới sử dụng giá trị này. Còn
hậu tố thì sử dụng giá trị này trước rồi sau đó mới tăng(or giảm).
Nếu x là một số nguyên có giá trị là 5 và bạn viết
int a = ++x;
thì trình biên dịch sẽ tăng x (lúc này x = 6) và sau đó sử dụng giá trị gán vào a. Như vậy bây giờ a
là 6 và x là 6.
Nếu sau khi thực hiện điều này bạn viết

int b = x++;
thì trình biên dich sử dụng giá trị trong x(6) và gán nó sang b, sau đó tăng x. Như vậy bây giờ b là
6 nhưng x là 7.
Nếu bạn sử dụng việc gia tăng hậu tố ví dụ như x++ thì việc gia tăng sẽ xảy ra sau khi in(sau khi
bạn sử dụng cout).
Lương Thanh Bình – Khoa Công Nghệ Thông Tin – Đại Học Đà Lạt
5
Và kết quả xuất ra màn hình như sau:
Thứ tự ưu tiên của các toán tử:
Thứ tự Tên toán tử Toán tử
1 Toán tử phân giải phạm vi
(setiosflags(ios::left))
::
2 Toán tử thành viên, toán tử chỉ số, toán tử gọi hàm, toán tử tăng hậu
tố(tiền tố), toán tử giảm hậu tố(tiền tố).
. [] () ++
3 Toán tử tăng tiền tố, toán tử giảm tiền tố, toán tử lấy phần bù, phép
đảo, cộng một ngôi, trừ một ngôi, toán tử lấy địa chỉ, toán tử lấy nội
dung, toán tử ép kiểu.
++ ~ ! + - & ()
4 Phép nhân, chia, chia lấy số dư * / %
5 Toán tử cộng, toán tử trừ + -
6 Toán tử dịch chuyển << >>
7 Các toán tử so sánh không bằng < <= > >=
8 Toán tử bằng, toán tử không bằng == !=
9 Phép và từng bit &
10 Phép hoặc loại trừ từng bit ^
11 Phép hoặc từng bit |
12 Phép và luận lý &&
13 Phép hoặc luận lý ||

14 Toán tử điều kiện ?:
15 Các toán tử gán = *= /= %= += -= < <=
> >= &= |= ^=
Toán tử logic: Thông thường bạn muốn hỏi nhiều câu hỏi quan hệ ở cùng một thời điểm. “Có
đúng là x lớn hơn y và có đúng là y lớn hơn z hay không?” Một chương trình có thể cần xác định
nhiều điều kiện để thực hiện một hoạt động. Có ba toán tử logic trong C++ và chúng được liệt kê
trong bảng sau đây.
Lương Thanh Bình – Khoa Công Nghệ Thông Tin – Đại Học Đà Lạt
6
Toán tử Ký hiệu Ví dụ
AND && biểuthức_1 && biểuthức_2
OR || biểuthức_1 || biểuthức_2
NOT ! ! biểuthức
AND: Toán tử logic AND sẽ trả về giá trị là đúng nếu cả hai biểu thức đều đúng. Như vậy biểu
thức trong câu lệnh if sau đây:
if ((x == 5) && (y == 5))
Sẽ có giá trị là đúng nếu x và y đều bằng 5, và là sai nếu x or y không bằng 5.
Chú ý rằng toán tử logic AND được ký hiệu là &&. Còn & là ký hiệu của toán tử lấy địa chỉ (toán
tử VÀ tôi trình bày ở bên dưới ).
OR: Toán tử logic OR trả về giá trị là đúng nếu một trong hai biểu thức này là đúng. Như vậy biểu
thức trong câu lệnh if sau đây:
if ((x == 5) || (y == 5))
Có giá trị là True nếu x hoặc y bằng 5 hoặc cả hai đều bằng 5. Ký hiệu của toán tử logic OR là ||.
Biểu tượng | là ký hiệu của toán tử hoặc.
NOT: Toán tử logic NOT trả về giá trị là đúng nếu biểu thức được kiểm tra là sai. Như vậy:
if (!(x == 5)
là đúng chỉ khi x không bằng 5. Câu lệnh này hoàn toàn có thể viết lại là:
if (x != 5) // Đọc là “Nếu x không bằng 5 thì đúng”. Toán tử != là toán tử không bằng (bạn coi
bảng hồng hồng ở trên).
Đúng và Sai: Trong C++, 0 là sai và bất kỳ giá trị nào khác đều là đúng(bạn chỉ nên sử dụng 1 là

đúng cho đỡ nhầm lẫn). Bởi vì một biểu thức luôn luôn có một giá trị nên nhiều nhà lập trình C+
+ tận dụng tính năng này trong các câu lệnh if của họ. Một câu lệnh chẳng hạn như:
if (x) // if x is true (nonzero) nghĩa là x chỉ đúng nếu x khác không
x = 0;
câu lệnh trên được đọc như sau: “Nếu x ≠ 0(if(x)), thì gán giá trị cho x là 0(x = 0)”. Sẽ làm cho
bạn dễ hiểu hơn nếu nó được viết lại là:
if (x != 0) // if x is nonzero
x = 0;
cả hai câu lệnh trên đều hợp lệ nhưng câu sau rõ ràng hơn vì bạn có thể thấy được là nó khác
không(x != 0).
Hai lệnh sau tương đương với nhau:
if (!x) // if x is false (zero), bạn có thể hiểu như sau: Nó trái với câu “if(x) hay if(x != 0)”,
ở đây nó nói là “Nếu x = 0, thì câu lệnh này là sai và không được thực thi(không gán
cho x một giá trị nào hết).
if (x == 0) // if x is zero , câu này tương tự câu if(!x)
Ví dụ: Bạn hãy chạy chương trình sau để luyện skill của bạn.
Lương Thanh Bình – Khoa Công Nghệ Thông Tin – Đại Học Đà Lạt
7
Nếu bạn use file .h thì nó phải viết như sau:
bool LaSoNT(int x)
{
if (x < 2)
return false;
else
{
int m = (int)sqrt((double)x);
for(int k = 2; k <= m; k++)
if(x % k == 0)
return false;
return true;

}
}
Toán tử điều kiện: Toán tử điều kiện (?:) là toán tử duy nhất của C++ có ba toán hạng.
Toán tử điều kiện có dạng:
(biểu thức 1) ? (biểu thức 2) : (biểu thức 3)
Bạn có thể đọc lại theo ngôn ngữ bình thường như sau: “Nếu biểu thức 1 là đúng , sẽ trả về giá
trị của biểu thức 2, ngược lại sẽ trả về giá trị của biểu thức 3”. Giá trị này sẽ được gán vào một
biến.
Ví dụ: Bạn hãy chạy chương trình sau để luyện skill của bạn.
Lương Thanh Bình – Khoa Công Nghệ Thông Tin – Đại Học Đà Lạt
8
Kết quả xuất phải như sau:
Phân tích code: Ba biến kiểu int được tạo ra là: x, y và z. Hai biến đầu tiên được người sử dụng
cung cấp giá trị. Câu lệnh if trên dòng 16 sẽ kiểm tra xem giá trị nào lớn hơn và gán giá trị đó cho
z. Giá trị này được in trên dòng 20 . Toán tử điều kiện trên dòng 22 thực hiện phần kiểm tra
tương tự và gán cho z giá trị lớn hơn. Dòng 22 có thể đọc theo ngôn ngữ bình thường như sau:
“Nếu x lớn hơn y, sẽ gán giá trị của x cho z, ngược lại sẽ gán giá trị của y cho z”. Giá trị của z sẽ
được in ra trên dòng 23. Như bạn có thể thấy, câu lệnh sử dụng toán tử điều kiện là một câu
lệnh tương đương nhưng ngắn gọn hơn so với câu lệnh if…else.
Ví dụ: Bạn hãy chạy chương trình sau để luyện skill của bạn(minh họa cho if…else như nói ở
trên).
Lương Thanh Bình – Khoa Công Nghệ Thông Tin – Đại Học Đà Lạt
9
Và kết quả xuất phải như sau:
Phân tích code: Các dấu ngoặc móc trên dòng 15 và 18 làm cho tất cả các câu lệnh có trong nó
trở thành một câu lệnh duy nhất và bây giờ else trên dòng 19 sẽ gắn với if ở dòng 14 như dự
định. Nếu bạn nhập vào số 20 thì biểu thức trong câu lệnh if trên dòng 14 là đúng, tuy nhiên,
biểu thức trong câu lệnh if trên dòng 16 là sai nên sẽ không có thông báo nào được in. Tốt hơn
là bạn hãy tự mình đặt một mệnh đề else khác sau dòng 17 để nắm bắt được các lỗi và in ra một
thông báo.

Cuối cùng là các toán tử thao tác trên bit: Gồm có 4 toán tử là : Toán tử VÀ, toán tử HOẶC, toán
tử HOẶC LOẠI TRỪ, toán tử LẤY PHẦN BÙ.
Ký hiệu Toán tử
& VÀ
Lương Thanh Bình – Khoa Công Nghệ Thông Tin – Đại Học Đà Lạt
10
| HOẶC
^ HOẶC LOẠI TRỪ (XOR)
~ LẤY PHẦN BÙ
Toán tử VÀ: Là một dấu &, trái với toán tử logic AND có hai dấu &&. Khi bạn &(VÀ – bạn nhớ là
có 1 toán tử và ghi bằng tiếng anh là “AND” nó có đến 2 dấu ngoặc (&&) còn VÀ ở đây ghi theo
tiếng việt là “VÀ” và nó có 1 dấu ngoặc(&), bạn nên chú ý kỹ chỗ này) hai bit, kết quả là 1 nếu cả
hai bit đều là 1, và là 0 nếu 1 trong 2 bit hoặc cả hai bit là 0.
Toán tử HOẶC: Là một dấu | (bạn đừng nhầm nó với toán tử logic OR như tôi đã trình bày ở trên
vì nó có tới hai dấu thanh đứng ||, bạn coi nó như cái ống nước cho dễ nhớ, còn toán tử HOẶC
bạn coi nó như cái cây là ok cả thôi.
Toán tử HOẶC LOẠI TRỪ (còn được gọi là XOR – ko như hai cái ở trên ko được xài tiếng anh) :
Toán tử thứ ba là toán tử hoặc loại trừ (^). Khi bạn XOR hai bit, kết quả sẽ là 1 nếu hai bit khác
nhau.
Toán tử LẤY PHẦN BÙ: Toán tử lấy phần bù (~) sẽ tắt các bit được bật và sẽ bật các bit bị tắt
trong một số. Nếu giá trị hiên hành 1010 0011 thì phần bù của số đó là 0101 1100.
Câu 11: Biểu thức là gì?
Là Bất kỳ câu lệnh nào trả về một giá trị
Câu 12: Hàm là gì?
Hàm là một chương trình con có thể hoạt động trên dữ liệu và trả về một giá trị.
Câu 13: Bạn Hãy in ra ký tự dựa trên số(Từ 32 -> 127)? Bạn dựa vào bài toán này để xác định ký
tự đó là số mấy trong bảng mã ASCII(American Standard Code for Information Interchange) mà
khỏi mất công dùng Hợp ngữ trong Debug để kiếm từng chữ.Nếu bạn muốn xuất ký tự xuất hiện
từ số 1 thì chỉ việc thay đổi i = 1 là ok.
Kết quả xuất phải như sau:

Lương Thanh Bình – Khoa Công Nghệ Thông Tin – Đại Học Đà Lạt
11
Ký tự in đặc biệt:
Trình biên dịch C++ nhận dạng được một số ký tự đặc biệt dùng để định dạng. Bảng 3.2 trình bày
các ký tự phổ biến nhất. Bạn sẽ đưa những ký tự này vào mã bằng cách gõ dấu \(còn được gọi
là ký tự thoát-
Escape character) và một ký tự. Như vậy để đưa một ký tự tab vào mã bạn sẽ gõ dấu \ và ký tự
t, tất cả được đặt trong dấu nháy đơn.
char tabCharacter = ‘\t’;
Ví dụ này khai báo một biến char (tabCharacter) và khởi gán nó với giá trị \t (tab). Các ký tự in
đặc biệt được sử dụng khi in ra màn hình hoặc ra một file hay một thiết bị xuất khác.
Các ký tự thoát:
Ký tự Ý nghĩa
‘\n’ Xuống dòng
‘\t’ Tab
‘\b’ Dịch trái
‘\’’’ Nháy đôi
‘\’’ Nháy đơn
‘\?’ Dấu chấm hỏi
‘\\’ Dấu gạch ngược
‘\a’ Kêu một tiếng bíp
‘\b’ Xóa ký tự bên trái
‘\f’ Sang trang
‘\r’ Trở về đầu dòng
‘\v’ Tab theo hàng
Bạn hãy chạy chương trình sau để luyện skill của bạn:
Hãy chú ý kỹ những chỗ cần các ký tự đặc biệt và bạn sẽ thấy sự quan trọng của nó khi trình diễn
lên màn hình cmd.
Lương Thanh Bình – Khoa Công Nghệ Thông Tin – Đại Học Đà Lạt
12

Khi đó kết quả xuất sẽ phải như sau:
Hằng ký hiệu(Symbolic Constant):
Một hằng ký hiệu là một hằng được đại diện bằng một tên gọi giống như một biến. Tuy nhiên
không giống như một biến, sau khi hằng được khởi gán, giá trị của nó không thể thay đổi.
Nếu chương trình của bạn có hai biến tên là students và classes thì bạn có thể tính được tổng số
sinh viên một khi bạn đã biết số lượng lớp và biết rằng có 15 sinh viên trong một lớp:
students = classes * 15;
Notice: Dấu * biểu thị phép nhân.
Trong ví dụ này, 15 là một hằng trực kiện. Mã của bạn sẽ dễ đọc và dễ bảo trì hơn nếu bạn thay
giá trị này bằng một hằng ký hiệu:
students = classes * studentsPerClass;
Nếu sau này bạn quyết định thay đổi số sinh viên trong mỗi lớp, bạn chỉ cần thay đổi nơi bạn đã
định nghĩa hằng studentsPerClass mà không cần phải thực hiện thay đổi ở những vị trí mà bạn
use nó.
Có hai cách để khai báo một hằng ký hiệu trong C++. Theo phương cách cũ chúng ta use chỉ thị
tiền xử lý #define:
Lương Thanh Bình – Khoa Công Nghệ Thông Tin – Đại Học Đà Lạt
13
#define studentsPerClass 15
Chú ý rằng studentsPerClass không thuộc kiểu dữ liệu cụ thể nào. #define chỉ đơn giản thực hiện
việc thay thế văn bản, mỗi khi bộ tiền xử lý thấy từ studentsPerClass, nó sẽ thay bằng 15.
Bởi vì bộ tiền xử lý hoạt động trước trình biên dịch nên trình biên dịch nên trình biên dịch của
bạn sẽ không bao giờ thấy hằng số studentsPerClass, nó chỉ thấy số 15.
Mặc dù #define hoạt động tốt nhưng việc định nghĩa hằng số với từ khóa const sẽ thuận lợi hơn:
const unsigned short int studentsPerClass = 15;
Ví dụ này cũng khai báo một hằng ký hiệu có tên là studentsPerClass, nhưng lần này
studentsPerClass được xem là thuộc kiểu dữ liệu unsigned short int. Phương pháp này có nhiều
ưu điểm trong việc làm cho mã dễ bảo trì hơn và tránh các lỗi. Sự khác biệt lớn nhất là hằng này
có kiểu dữ liệu. Chính vì điều này nên trình biên dịch có thể buộc nó phải sử dụng theo đúng
kiểu dữ liệu của nó.

Hằng liệt kê: Các hằng liệt kê( enumerated constant ) giúp bạn tạo ra các kiểu dữ liệu mới và sau
đó giúp bạn định nghĩa biến của những kiểu dữ liệu này, giá trị của những kiểu dữ liệu này được
giới hạn trong một tập hợp giá trị hợp lý.
Ví dụ sau đây minh họa cho điều này:
Hoặc ví dụ sau đây:
Và kết quả xuất phải như sau:
Lương Thanh Bình – Khoa Công Nghệ Thông Tin – Đại Học Đà Lạt
14
Phân tích mã nguồn:
Trên dòng 9, kiểu dữ liệu Days được định nghĩa với 7 giá trị bắt đầu từ 0. Người dùng được yêu
cầu nhập vào một ngày trên dòng 14. Giá trị do người dùng chọn, một số giữa 0 và 6, được so
sánh với giá trị của các hằng liệt kê Sunday và Saturday trên dòng 13.(1)
Câu lệnh if: Thông thường, chương trình của bạn sẽ thực hiện từng dòng một theo đúng trật tự
trong mã nguồn của bạn. Câu lệnh if cho phép bạn kiểm tra điều kiện(chẳng hạn hai biến có
bằng hay không) và rẽ đến các đoạn mã khác nhau tùy thuộc vào kết quả của biểu thức điều
kiện.
Dạng đơn giản nhất của câu lệnh if là:
if (biểu thức)
Câu lệnh;
Biểu thức trong các dấu ngoặc đơn có thể là một biểu thức nào đó bất kỳ nhưng thường thì nó
là một biểu thức quan hệ. Nếu biểu thức có giá trị là 0 (sai) thì câu lệnh sẽ được bỏ qua. Nếu nó
có một giá trị không phải 0, thì câu lệnh được thực hiện. Hãy chú ý ví dụ sau đây:
if (bigNumber > smallNumber)
bigNumber = smallNumber;
Mã này so sánh bigNumber và smallNumber. Nếu bigNumber lớn hơn, dòng thứ hai sẽ lấy giá trị
của smallNumber gán cho nó.
Bởi vì khối lệnh chứa trong các dấu ngoặc móc hoàn toàn tương đương với một câu lệnh nên
bạn có thể sử dụng cú pháp sau đây:
if (biểu thức)
{

Câu lệnh 1;
Câu lệnh 2;
Câu lệnh 3;
}
Lương Thanh Bình – Khoa Công Nghệ Thông Tin – Đại Học Đà Lạt
15
Các toán tử use trong câu lệnh if là: “==”- Bằng, “>”- Lớn hơn, “<”- Nhỏ hơn, “<=”- Nhỏ hơn hoặc
bằng, “>=”- Lớn hơn hoặc bằng.
Ví dụ: Bạn Hãy chạy chương trình sau để luyện skill của bạn:
Kết quả xuất phải như sau:
Phân tích code: Tương tự như ở trên tôi đã giải thích
Bạn hãy làm thêm một bài nữa cho skill lên cao hơn:
Lương Thanh Bình – Khoa Công Nghệ Thông Tin – Đại Học Đà Lạt
16
Ở đây bạn không nên sài thẳng tên ra như tôi mà nên gọi hai đội bóng chày này là a & b, vì nó
quá dài dòng rất bất tiện.
Kết quả xuất như sau:
Phân tích Code:
Chương trình này yêu cầu người dùng nhập điểm cho hai đội bóng chày, điểm được lưu trong
các biến số nguyên. Các biến được so sánh với nhau trong câu lệnh if trên dòng 14, 16, 21. Nếu tỉ
số của đội này cao hơn đội kia, một thông báo sẽ được in ra. Nếu tỉ số bằng nhau, đoạn mã từ
dòng 21 -> 32 sẽ được thực hiện. Chú ý rằng, nếu tỉ số của Yankees ban đầu cao hơn tỉ số của
Red Sox thì biểu thức trên câu lệnh if trên dòng 14 sẽ có giá trị là false, và dòng 15 không được
thực hiện. Biểu thức kiểm tra trên dòng 16 sẽ có giá trị là true và các câu lệnh trên dòng 18, 19
sẽ được gọi. Sau đó biểu thức trong câu lệnh if trên dòng 21 được kiểm tra, và nó có giá trị là
False. Như vậy chương trình sẽ bỏ qua toàn bộ khối lệnh này và chuyển đến dòng 33 để xuất câu
lệnh trong này ra màn hình và đi đến dòng 35 để kết thúc.
Trong ví dụ này, việc biểu thức trong một câu lệnh if có giá trị là đúng sẽ không làm dừng việc
kiểm tra các câu lệnh if khác.
Các cách thụt đầu dòng:

Mặc dù có rất nhiều cách để canh chỉnh các dấu ngoặc móc ở câu lệnh if nhưng 3 kiểu sau đây là
được use phổ biến nhất.
Đặt dấu ngoặc đầu tiên sau biểu thức điều kiện và căn chỉnh dấu ngoặc móc đóng bên dưới if để
đóng khối lệnh.
Lương Thanh Bình – Khoa Công Nghệ Thông Tin – Đại Học Đà Lạt
17
If (biểu thức) {
Các câu lệnh;
} // Khuyến cáo không nên use
Canh chỉnh các dấu ngoặc móc dưới if và thụt đầu dòng các câu lệnh.
if (biểu thức)
{
Các câu lệnh;
} // Được use phổ biến nhất vì nó được Visual Studio 2005 hỗ trợ.
Thụt đầu dòng các dấu ngoặc móc và các câu lệnh.
if ( biểu thức)
{
Các câu lệnh;
}
Bạn cũng nên use cách này vì nó làm cho vị trí bắt đầu và kết thúc của khối lệnh được rõ ràng.
Bây giờ ta quay lại (1) để phân tích mã nguồn tiếp. Bạn không thể nhập “Sunday” vì chương trình
không biết cách dịch Sunday thành một giá trị .
Câu 14: Câu lệnh là gì?
Trong C++, một câu lệnh có thể điều khiển trình tự thực thi, xác định giá trị của một biểu thức,
hoặc không làm gì cả (câu lệnh NULL). Tất cả các câu lệnh của C++ đều kết thúc bằng dấu “;” (trừ
lệnh tạo ra một hằng số - #define MAX 100 thì không có dấu “;” sau nó) .
Câu 15: Khối lệnh là gì?
Ở bất kỳ vị trí nào bạn cũng có thể đặt một câu lệnh thì bạn cũng có thể đặt một khối lệnh. Một
khối lệnh sẽ bắt đầu bằng một dấu ngoặc móc mở ({) và một dấu ngoặc móc đóng (}). Mặc dù
mỗi câu lệnh trong khối lệnh phải được kết thúc bằng một dấu “;”, nhưng bản thân khối đó sẽ

không kết thúc bằng một dấu “;”. Ví dụ:
{
temp = a;
a = b;
b = temp;
}
Khối mã này sẽ hoạt động như một câu lệnh và sẽ trao đổi giá trị trong hai biến a và b.
Bạn nên sử dụng dấu ngoặc đóng (}) bất cứ khi nào bạn có một dấu ngoặc móc mở ({). Phải nên
nhớ kết thúc câu lệnh bằng dấu “;”. Hãy use khoảng trắng để câu lệnh được rõ ràng hơn.
Notice: Các ký tự khoảng trắng (khoảng trống, tab và ký tự xuống dòng) không thể nhìn thấy
được.
Lương Thanh Bình – Khoa Công Nghệ Thông Tin – Đại Học Đà Lạt
18
Các biểu thức: Bất kỳ những gì có giá trị đều được xem là giá trị trong C++. Một biểu thức sẽ trả
về một giá trị. Vì thế 3+2 sẽ trả về giá trị 5 và nó là một biểu thức. Tất cả các biểu thức đều là các
câu lệnh.
Có rất nhiều mã được gọi là biểu thức có thể làm bạn ngạc nhiên. Sau đây là hai ví dụ:
3.2 // return the value 3.2
PI // float const that returns the value 3.14
Giả sử rằng PI là một hằng số có giá trị là 3.14, cả hai câu lệnh trên đều là biểu thức.
Biểu thức phức tạp:
X = a+b;
Không chỉ cộng a và b và gán kết quả vào x, mà còn trả về giá trị của phép gán đó (giá trị của x).
Như vậy câu lệnh này cũng là một biểu thức. Bởi vì nó là một biểu thức nên nó có thể ở vế bên
phải của một toán tử gán:
Y = X = a+b;
Bạn hãy làm tiếp ví dụ sau để lên skill thêm một chút:
Và kết quả xuất phải như sau:
Lương Thanh Bình – Khoa Công Nghệ Thông Tin – Đại Học Đà Lạt
19

Phân tích Code:
Trên dòng 8, bốn biến được khai báo và được khởi gán, các giá trị của chúng được in trên dòng 9
và 10. Trên dòng 11 a được gán giá trị là 9, còn trên dòng 12 b được gán giá trị là 7. Trên dòng 9,
tổng của a và b được gán cho x. Biểu thức này (x = a+b) sẽ trả về một giá trị (tổng của a và b) và
gán giá trị cho y.
Câu 16: All về else?
Thông thường, chương trình của bạn sẽ thực hiện một đoạn mã lệnh nếu biểu thức điều kiện là
đúng, và thực hiện một đoạn lệnh khác nếu biểu thức điều kiện có giá trị là sai. Trong bài tập
RedSoxScore vs YankeesScore bạn muốn in một thông báo (Go Sox!) nếu biểu thức
(RedSoxScore> YankeesScore) có giá trị là True, và một thông báo khác (Go Yanks!) nếu nó có giá
trị là False.
Từ khóa else có thể làm cho mã dễ đọc hơn:
if (biểu thức)
Các câu lệnh;
else
Các câu lệnh;
Bài EG dưới đây sẽ chứng minh điều tôi nói ở trên:
Phân tích Code:
Biểu thức điều kiện trong câu lệnh if trên dòng 13 sẽ được kiểm tra. Nếu biểu thức có giá trị là
đúng thì câu lệnh trên dòng 14 sẽ thực hiện. Nếu xóa mệnh đề else trên dòng 13, thì câu lệnh
trên dòng 14 sẽ thực hiện bất kể biểu thức có giá trị là True hay False. Nên nhớ rằng câu lệnh if
Lương Thanh Bình – Khoa Công Nghệ Thông Tin – Đại Học Đà Lạt
20
sẽ kết thúc sau dòng 14 . Nếu else ko có ở đó thì dòng 16 sẽ là dòng lệnh kế tiếp được thực thi
trong chương trình.
Câu 17: Phát biểu về câu lệnh if nâng cao?
Bất kỳ câu lệnh nào cũng có thể đc use trong mệnh đề if or else cho dù nó là một câu lệnh if
khác. Vì thế bạn có thể gặp các câu lệnh if phức tạp có dạng sau đây:
Câu lệnh if cồng kềnh này phát biểu rằng: “ Nếu biểu thức 1 đúng và biểu thức 2 đúng thì câu
lệnh 1 sẽ được thực thi. Nếu biểu thức 1 đúng nhưng biểu thức 2 ko đúng và nếu biểu thức 3

đúng thì câu lệnh 2 sẽ được thực thi. Nếu biểu thức 1 đúng nhưng biểu thức 2 và biểu thức 3 sai
thì câu lệnh 3 sẽ được thực thi. Cuối cùng nếu biểu thức 1 không đúng thì biểu thức 4 sẽ được
thực thi”.Như bạn thấy đấy, các câu lệnh if phức tạp rất dễ gây nhầm lẫn.
Bài ví dụ sau đây sẽ cm điều tôi nói ở trên:
Lương Thanh Bình – Khoa Công Nghệ Thông Tin – Đại Học Đà Lạt
21
Và kết quả xuất phải như sau:
Câu 18: Mảng là gì?
Một mảng là một tập hợp các vị trí lưu trữ dữ liệu, mỗi một vị trí lưu trữ dữ liệu thuộc cùng kiểu.
Mỗi vị trí lưu trữ được gọi là một phần tử của mảng. Bạn khai báo một mảng bằng cách viết kiểu
dữ liệu, theo sau là tên mảng và chỉ số. Chỉ số sẽ cho biết số lượng các phần tử trong mảng, và
nó được đặt trong dấu ngoặc vuông. Ví dụ:
long longArray[25];
Khai báo một mảng có 25 số thuộc kiểu long được đặt tên là longArray. Khi trình biên dịch đọc
thấy khai báo này, nó sẽ cấp phát bộ nhớ để chứa 25 phần tử. Bởi vì mỗi số nguyên kiểu long
chiếm 4 byte nên trình biên dịch sẽ cấp 100 byte kế tiếp nhau trong bộ nhớ.
Các phần tử của mảng:
Bạn truy cập các phần tử của mảng bằng cách dùng tên mảng và chỉ số. Chỉ số của các phần tử
trong mảng được đánh số bắt đầu từ 0. Vì vậy, phần tử đầu tiên của mảng sẽ là arrayName[0].
Trong ví dụ về mảng longArray của chúng ta ở trên thì longArray[0] là phần tử đầu tiên của
mảng, longArray[1] là phần tử thứ 2 và cứ tiếp tục như thế.Bạn có thể bị “Hụt chân” ở phần tử
cuối cùng. Ví dụ bạn có thể gọi phần tử cuối cùng của mảng someArray[] có ba phần tử là
Lương Thanh Bình – Khoa Công Nghệ Thông Tin – Đại Học Đà Lạt
22
someArray[3]. Nhưng thực ra các phần tử của mảng này chỉ gồm có someArray[0], someArray[1]
và someArray[2]. Như vậy, nói một cách tổng quát thì một mảng someArray[] có n phần tử sẽ
được đánh số từ someArray[0] đến someArray[n-1].
Bạn hãy thực hiện ví dụ trên đây để lên skill lên một chút.
Kết quả xuất phải như sau:
Phân tích Code:

Dòng thứ 8 khai báo một mảng tên là myArray chứa 5 biến int. Dòng thứ 8 thiết lập một vòng
lặp với số lần lặp thích hợp để gán giá trị cho các phần tử của mảng (bạn có thể hiểu theo nghĩa
khác là duyệt wa từng phần tử của mảng – tôi nghĩ câu này bạn sẽ dễ hiểu hơn rất nhiều). Trong
vòng lặp, người sử dụng được yêu cầu nhập vào một giá trị, và giá trị đó được lưu lại trong mảng
tại một vị trí thích hợp.
Giá trị đầu tiên sẽ được lưu lại tại myArray[0], giá trị thứ hai được lưu tại myArray[1] và tiếp tục
như thế. Vòng lặp for thứ hai tiến hành in từng giá trị ra màn hình.
Cách khai báo mảng một chiều có file .h:
Lương Thanh Bình – Khoa Công Nghệ Thông Tin – Đại Học Đà Lạt
23
Còn bên file .cpp bạn khai báo như sau:
Cách khai báo mảng hai chiều file .h như sau:
Lương Thanh Bình – Khoa Công Nghệ Thông Tin – Đại Học Đà Lạt
24
Cách khai báo mảng hai chiều file .cpp như sau:
Và kết quả xuất như sau: Nhập tay Và kết quả xuất như sau: Nhập Tự Động
Lương Thanh Bình – Khoa Công Nghệ Thông Tin – Đại Học Đà Lạt
25

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×