Tải bản đầy đủ (.pdf) (54 trang)

Ngon ngu lap trinh c++ (olympic)

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 (489.03 KB, 54 trang )

Ngôn ngữ lập trình C++

TEACH YOURSELF C++
MC LC
I. CC PHN CA MT CHNG TRèNH C++.
Gii thiu hm Cout.
Trỡnh by chỳ thớch - Comments.
Hm - Functions.
II. BIN S.
Cỏc kiu bin s.
nh ngha kiu - Typedef.
III. BIU THC V CU LNH.
Cõu lnh.
Cỏc toỏn t.
Cõu lnh IF.
Toỏn t Lụgic.
IV. CC LOI HM.
Khai bỏo hm
Nguyờn mu hm - Function prototypes.
Bin khu vc - Local variables.
Bin ton cc - Global variables.
Giỏ tr tr v.
Tham s mc nh.
quy.
V. CC LOI VềNG LP.
Vũng lp While.
Continue v Break.
Vũng lp While(1).
Do ... While.
Vũng lp For.
Vũng lp lng.


VI. MNG.
Khi to mng
Mng nhiu chiu
VII. X Lí TRấN FILE.
M file.
Cỏc thao tỏc trờn file - c d liu t file v ghi ra file.
úng file.
VIII. BI TP V CHNG TRèNH MU.

Olympic tin học sinh viên HUBT

1

GV: Trương Minh Đức


Ng«n ng÷ lËp tr×nh C++

I

Các phần của chương trình C++.
Các chương trình C++ bao gồm : các đối tượng (obj), các biến (var) và các thành phần khác.

I.1

Một chương trình đơn giản.

Ví dụ lấy chương trình HELLO.CPP để giải thích các phần của một chương trình C++. (Chú ý các số
thứ tự dòng dưới đây (1:,2:,..) không viết trong nội dung chương trình)
1: #include <iostream.h>

2:
3: int main()
4: {
5: cout << "Hello World!\n";
6: return 0;
7: }
Hello World!
Dòng 1 là thư viện # iostream.h.
- Ký tự đầu tiên là biểu tượng # : là một tín hiệu để cho bộ tiền xử lý. Mỗi lần bắt đầu biên dịch, bộ
tiền xử lý được chạy. Bộ tiền xử lý đọc mã nguồn của bạn, tìm kiếm những dòng bắt đầu với dấu
( #) và thực hiện các dòng này trước khi biên dịch.
- Include là một lệnh tiền xử lý. Dấu ngoặc đơn <file name > chỉ cho bộ tiền xử lý để tìm trong tất
cả các vị trí thông thường đối với file này. Nếu bộ biên dịch được thiết lập đúng, dấu ngoặc < >
sẽ làm cho bộ tiền xử lý tìm kiếm file " iostream.h" trong thư mục mà chứa tất cả các file H cho
bộ biên dịch. ( file "iostream.h" [ Input-Oput-Stream] được dùng bởi hàm "cout"_ giúp cho việc
viết ra màn hình.)
- Dòng 3 bắt đầu chương trình thông thường với hàm có tên " main() ". Mọi chương ttrình C++
đều có 1 hàm main(). Nói chung," hàm là 1 khối mã lệnh mà thực hiện 1 hoặc nhiều công việc."
Các hàm thông thường được gọi bởi các hàm khác, nhưng main() là hàm đặc biệt. Khi chương
trình bắt đầu, main() được tự động gọi lên. ( main(), giống như tất các hàm, phải định rõ loại giá
trị nào nó sẽ trả về. Kiểu giá trị trả về đối với main() trong HELLO.CPP là "void" _nghĩa là hàm
này sẽ không trả về bất cứ giá trị nào.)
- Tất cả các hàm bắt đầu với một ngoặc mở ({) và kết thúc một dấu ngoặc đóng (}). Dấu ngoặc của
main() là trên dòng 4 và dòng 7.
- Phần căn bản của chương trình là dòng số 5. Hàm "cout" dùng để in một bản tin ra màn hình.
- Cách dùng cout : từ cout đặt sau toán tử (<<). Bất cứ cái gì sau dầu này thì đều được viết lên màn
hình. Nếu bạn muốn viết một chuỗi ký tự, phải viết chúng trong dấu ngoặc kép ("), như dòng 5.
- Cuối cùng là 2 ký tự : “\n” bảo hàm cout nhảy xuống một dòng mới sau từ Hello World ! Đây là
mã đặc biệt được giải thích kỹ ở phần sau.
- Trong giáo trình này hàm main() sẽ luôn trả về 0. (return 0)


I.2

Hàm Cout.

Ví dụ 2.Sử dụng hàm cout.
1: // Listing 2 using cout
2:
3: #include <iostream.h>
4: int main()
5: {

Olympic tin häc sinh viªn HUBT

2

GV: Tr­¬ng Minh §øc


Ng«n ng÷ lËp tr×nh C++
6:
7:
8:
9:
10:
11:
12:
13:
14: }


cout << "Hello there.\n";
cout << "Here is 5: " << 5 << "\n";
cout << "The manipulator endl writes a new line to the screen." << endl;
cout << "Here is a very big number:\t" << 70000 << endl;
cout << "Here is the sum of 8 and 5:\t" << 8+5 << endl;
cout << "Here's a fraction:\t\t" << (float) 5/8 << endl;
cout << "And a very very big number:\t" << (double) 7000 * 7000 << endl;
return 0;

Hello there.
Here is 5: 5
The manipulator endl writes a new line to the screen.
Here is a very big number: 70000
Here is the sum of 8 and 5: 13
Here's a fraction:
0.625
And a very very big number: 4.9e+07
Chú ý : 3 giá trị được đưa ra trên dòng 7, mỗi giá trị được tách ra bởi toán tử chèn. Giá trị đầu tiên là
chuỗi " Here is 5: ". Chú ý có dấu cách sau dấu hai chấm. Dấu cách là một phần của chuỗi. Tiếp đến,
giá trị 5 được đưa ra đến toán tử chèn và ký tự dòng mới ( luôn luôn trong dấu ngoặc kép hay dấu
ngoặc đơn). Điều này tạo ra dòng:
Here is 5: 5
được in ra màn hình. Vì không có ký tự dòng mới nên giá trị sau đó sẽ được in ngay sau đó. Đây gọi
là móc nối 2 giá trị.
Trên dòng 8, bản tin được in ra, và sau đó lệnh " endl" được sử dụng. Mục đích của "endl " là để
viết một dòng mới ra màn hình.
?Trên dòng 9, ( \t) được đưa vào. Đây là chèn một ký tự "tab" và nó được dùng trên dòng 8-12.
Dòng 9 chỉ ra rằng không chỉ có các số nguyên, số nguyên dài cũng được in ra.
Dòng 10 giải thích rằng: cout sẽ thực hiện phần bổ sung đơn giản. Giá trị của 8+5 được đưa ra
bởi cout, nhưng 13 được in ra.

Trên dòng 11, giá trị 5/8 được chèn vào cout. Số hạng (float) chỉ ra cho cout rằng bạn muốn giá
trị này có giá trị tương hệ số 10, và vì vậy một phân số được in.
Trên dòng 12, giá trị 7000*7000 đưa tới cout và số hạng (double) chỉ cho cout biết bạn muốn cái
này được in ra sử dụng ký hiệu toán học

I.3

Chú thích (Comments).

Dùng để giải thích câu lệnh cho dễ hiểu và giới thiệu được các thông tin về tác giả và thời gian
sửa đổi mới nhất cho dễ nâng cấp.
Trong C++ có hai cách báo hiệu lời chú thích là : ( // ) và cặp ( /* ), (*/).
Dấu ( // ) này bảo cho chương trình biên dịch bỏ qua tất cả những gì sau dấu chú thích này, tới
tận hết dòng.
Dấu ( /* ) này bảo cho chương trình biên dịch bỏ qua tất cả những gì sau dấu chú thích này, tới
khi tìm thấy cặp ( */ ) của nó.
Cách sử dụng Comments:

Olympic tin häc sinh viªn HUBT

3

GV: Tr­¬ng Minh §øc


Ng«n ng÷ lËp tr×nh C++
Một qui luật chung, nên có một chú thích ở đầu của toàn chương trình, nói lên chương trình làm
cái gì.
Mỗi hàm cũng nên có chú thích giải thích hàm làm cái gì và nó trả về giá trị nào.
Nếu trong chương trình có câu lệnh nào khó hiểu thì cũng nên có chú thích làm sáng tỏ vấn đề.

Ví dụ 3. Sử dụng comments.
1: #include <iostream.h>
2:
3: int main()
4: {
5: /* this is a comment
6: and it extends until the closing
7: star-slash comment mark */
8: cout << "Hello World!\n";
9: // this comment ends at the end of the line
10: cout << "That comment ended!\n";
11:
12: // double slash comments can be alone on a line
13: /* as can slash-star comments */
14: return 0;
15: }
Hello World!
That comment ended!

I.4

Hàm ( Functions ).

Một chương trình được xử lý từng dòng theo thứ tự mà nó có trong mã nguồn, tận khi đến một
hàm, sau đó chương trình rẽ nhánh để xử lý hàm. Khi hàm kết thúc, nó trả lại điều khiển cho dòng
mã ngay sau nó.
Khi một chương trình cần thực hiện một dịch vụ, nó có thể gọi một hàm để thực hiện dịch vụ đó.
Ví dụ sau minh hoạ điều đó:
Ví dụ 4. Gọi một hàm.
1: #include <iostream.h>

2:
3: // function Demonstration Function
4: // prints out a useful message
5: void DemonstrationFunction()
6: {
7:
cout << "In Demonstration Function\n";
8: }
9:
10: // function main - prints out a message, then
11: // calls DemonstrationFunction, then prints out
12: // a second message.
13: int main()
14: {
15:
cout << "In main\n" ;

Olympic tin häc sinh viªn HUBT

4

GV: Tr­¬ng Minh §øc


Ng«n ng÷ lËp tr×nh C++
16:
DemonstrationFunction();
17:
cout << "Back in main\n";
18:

return 0;
19: }
In main
In Demonstration Function
Back in main
Cách sử dụng hàm:
Hàm hoặc trả về giá trị hoặc chúng trả về void (nghĩa là chúng trả về số không "nothing").
Một hàm mà cộng hai số nguyên, phải trả về tổng và vì vậy sẽ được định nghĩa để trả về một giá
trị số nguyên.
Một hàm mà chỉ in một bản tin không có cái gì để trả về, vì vậy sẽ được khai báo để trả về dạng
"void".
Một hàm bao gồm : đầu đề và thân hàm.
 Đầu đề bao gồm lần lượt : kiểu trả về, tên hàm, và các tham số dành cho hàm. Các tham số dành
cho hàm cho phép các giá trị được đưa vào bên trong hàm. Vì vậy,nếu hàm để cộng 2 số, các số
sẽ là tham số cho hàm.
Ví dụ một đầu đề dạng hàm thông thường:
int Sum(int a, int b)
Mỗi tham số được khai báo cùng với kiểu giá trị sẽ đưa vào ; giá trị thông thường được đưa vào
bằng cách gọi hàm được gọi là đối số. Nhiều nhà lập trình sử dụng sử dụng hai số hạng : tham số
(parameters) và đối số (arguments) như là " synonyms". Những người khác cẩn thận đối với việc
phân biệt thược về chuyên môn. Trong sách này sẽ sử dụng các số hạng đó có thể hoán đổi cho nhau.
 Thân hàm bao gồm : một dấu ngoặc mở, không có hoặc có các câu lệnh và dấu ngoặc đóng. Các
lệnh cấu trúc nên công việc của hàm. Một hàm có thể trả về một giá trị, sử dụng một lệnh trả về.
Lệnh này cũng làm cho hàm kết thúc. Nếu không đưa vào một lệnh trả về bên trong hàm, nó sẽ tự
động trả về dạng void ở cuối hàm. Giá trị được trả về phải là dạng đã được khai báo ở đầu hàm.
Ví dụ 5. Một hàm mẫu đơn giản.
1: #include <iostream.h>
2: int Add (int x, int y)
3: {
4:

5:
cout << "In Add(), received " << x << " and " << y << "\n";
6:
return (x+y);
7: }
8:
9: int main()
10: {
11:
cout << "I'm in main()!\n";
12:
int a, b, c;
13:
cout << "Enter two numbers: ";
14:
cin >> a;
15:
cin >> b;
16:
cout << "\nCalling Add()\n";

Olympic tin häc sinh viªn HUBT

5

GV: Tr­¬ng Minh §øc


Ng«n ng÷ lËp tr×nh C++
17:

18:
19:
20:
21:
22: }

c=Add(a,b);
cout << "\nBack in main().\n";
cout << "c was set to " << c;
cout << "\nExiting...\n\n";
return 0;

I'm in main()!
Enter two numbers: 3 5
Calling Add()
In Add(), received 3 and 5
Back in main().
c was set to 8
Exiting...

II

Biến số.

II.1

Biến số là gì:

Trong C++, biến số là nơi để lưu giữ thông tin. Một biến số là một vị trí trong bộ nhớ của máy
tính mà có thể lưu giữ một giá trị và từ đó bạn có thể truy nhập vào giá trị đó sau này.

Cách thiết lập biến:
Khi định nghĩa một biến trong C++, bạn phải bảo cho trình biên dịch biết biến là kiểu gì : số
nguyên, ký tự,.... Đây là thông tin báo cho trình biên dịch biết kích thước lớn bao nhiêu để thiết lập
một khoảng bộ nhớ và kiểu giá trị bạn muốn lưu trong biến của bạn.

II.1.1

Kích thước kiểu số nguyên (Intergers)

-

Một biến char (dùng để lưu ký tự) thường là một byte. Một short interger là 2 byte trên hầu hết
các máy tính, một long interger thường là 4 byte, và một interger (không phải là long hay short)
có thể là 2 hay 4 byte.
- Một character là một chữ đơn, số, hay biểu tượng chiếm 1 byte của bộ nhớ.
Ví dụ 1. Xác định kích thước kiểu biến trên máy tính
1: #include <iostream.h>
2:
3: int main()
4: {
5: cout << "The size of an int is:\t\t" << sizeof(int) << " bytes.\n";
6: cout << "The size of a short int is:\t" << sizeof(short) << " bytes.\n";
7: cout << "The size of a long int is:\t" << sizeof(long) << " bytes.\n";
8: cout << "The size of a char is:\t\t" << sizeof(char) << " bytes.\n";
9: cout << "The size of a float is:\t\t" << sizeof(float) << " bytes.\n";
10: cout << "The size of a double is:\t" << sizeof(double) << " bytes.\n";
11:

Olympic tin häc sinh viªn HUBT


6

GV: Tr­¬ng Minh §øc


Ng«n ng÷ lËp tr×nh C++
12:
return 0;
13: }
Output: The size of an int is:
2 bytes.
The size of a short int is: 2 bytes.
The size of a long int is:
4 bytes.
The size of a char is:
1 bytes.
The size of a float is:
4 bytes.
The size of a double is:
8 bytes.

II.1.2

Số có dấu và không dấu.

Nói chung tất cả các kiểu số nguyên là 2 dạng chính : có dấu và không có dấu. Mục đích ở đây là
thỉnh thoảng bạn cần số âm và không cần. Số nguyên ( short và long )không có từ "unsigned" được
coi là có dấu (signed). Số nguyên có dấu hoặc là số dương hoặc số âm. Số nguyên không dấu luôn
là dương.
- Số nguyên không dấu short có giá trị từ : 0 đến 65535

- Số nguyên có dấu short có giá trị từ : -32768 đến 32767

II.1.3

Các kiểu biến cơ bản

-

Biến dấu phảy động dùng để biểu diễn số thực (real)
Biến Character chiếm 1 byte dùng để chứa 256 ký tự hoặc biểu tượng của bảng ASCII hoặc
ASCII mở rộng.
Bảng 3.1. Cáck kiểu biến (Variable Types)
Type
Unsigned short int
Short int
Unsigned long int
Long int
Int (16 bit)
Int (32 bit)
Unsigned int (16 bit)
Unsigned int (32 bit)
Char
Float
Double

Size
2 bytes
2 bytes
4 bytes
4 bytes

2 bytes
4 bytes
2 bytes
2 bytes
1 byte
4 bytes
8 bytes

Values
0 to 65,535
-32,768 to 32,767
0 to 4,294,967,295
-2,147,483,648 to 2,147,483,647
-32,768 to 32,767
-2,147,483,648 to 2,147,483,647
0 to 65,535
0 to 4,294,967,295
256 character values
1.2e-38 to 3.4e38
2.2e-308 to 1.8e308

Cách tạo một biến:
Đầu tiên là kiểu biến, sau đó là một hoặc nhiều dấu cách, sau đó là tên biến và dấu chấm
phẩy.
Example 1
main()
{
unsigned short x;
unsigned short y;


Olympic tin häc sinh viªn HUBT

7

GV: Tr­¬ng Minh §øc


Ng«n ng÷ lËp tr×nh C++
ULONG z;
z = x * y;
}
Example 2
main ()
{
unsigned short Width;
unsigned short Length;
unsigned short Area;
Area = Width * Length;
}
Có thể tạo nhiều biến cùng một lúc như sau:
unsigned int myAge, myWeight; // khai báo hai biến kiểu nguyên dương
long area, width, length;
// khai báo ba biến kiểu long integer

II.1.4

Từ khoá.

Bao gồm : if, while , for, main.
Không được sử dụng từ khóa làm tên biến.


II.1.5

Gán giá trị cho biến

Gán giá trị cho biến bằng cách sử dụng toán tử (=). Ví dụ:
unsigned short Width;
Width = 5;
Bạn có thể gộp ba bước thành một bước.
unsigned short Width = 5;
Tương tự, có thể khởi tạo cho nhiều biến cùng một lúc như sau:
long width = 5, length = 7;
Ví dụ này khởi tạo biến số nguyên long là width =5 và biến số nguyên long là length =7. Ta có thể
kết hợp cả khai báo và khởi tạo như sau:
int myAge = 39, yourAge, hisAge = 40;
Ví dụ 2. Các sử dụng biến.
1: // Demonstration of variables
2: #include <iostream.h>
3:
4: int main()
5: {
6: unsigned short int Width = 5, Length;
7: Length = 10;
8:
9: // Khai báo biến Area kiểu unsigned short int và khởi tạo với
10:
// kết quả của phép nhân biến Width và Length
11: unsigned short int Area = Width * Length;
12:
13: cout << "Width:" << Width << "\n";


Olympic tin häc sinh viªn HUBT

8

GV: Tr­¬ng Minh §øc


Ng«n ng÷ lËp tr×nh C++
14: cout << "Length: " << Length << endl;
15: cout << "Area: " << Area << endl;
16: return 0;
17: }
Output: Width:5
Length: 10
Area: 50

II.1.6

Định nghĩa kiểu Typedef

Bạn có thể cảm thấy chán ngắt và buồn tẻ nếu cứ phải sử dụng kiểu khai báo unsigned short int.
C++ cho phép bạn tạo ra một bí danh cho cụm từ này bằng cách sử dụng từ khoá typedef, viết tắt
cho sự định nghĩa kiểu.
Ta định nghĩa bằng cách: sau từ khoá typedef là kiểu và sau đó là tên mới. Ví dụ:
Typedef unsigned short int USHORT
Tên mới USHORT sẽ dùng ở bất cứ đâu thay thế cho việc viết : unsigned short int.
Ví dụ 3. Sử dụng định nghĩa kiểu typedef
1: // *****************
2: // Demonstrates typedef keyword

3: #include <iostream.h>
4:
5: typedef unsigned short int USHORT; // Định nghĩa USHORT cho kiểu unsigned short int
6:
7: void main()
8: {
9: USHORT Width = 5;
10: USHORT Length;
11: Length = 10;
12: USHORT Area = Width * Length;
13: cout << "Width:" << Width << "\n";
14: cout << "Length: " << Length << endl;
15: cout << "Area: " << Area <16: }
Output: Width:5
Length: 10
Area: 50

II.1.7

Hiện tượng nhảy vòng trong số nguyên có dấu và không có dấu.

Hiện tượng nhảy vòng khi biến số vượt quá giá trị cho phép của kiểu khai báo.
Ví dụ 4. Giải thích về gán giá trị quá lớn cho biến kiểu số nguyên dương (unsigned integer)
1: #include <iostream.h>
2: int main()
3: {
4: unsigned short int smallNumber;
5: smallNumber = 65535;


Olympic tin häc sinh viªn HUBT

9

GV: Tr­¬ng Minh §øc


Ng«n ng÷ lËp tr×nh C++
6: cout << "small number:" << smallNumber << endl;
7: smallNumber++;
8: cout << "small number:" << smallNumber << endl;
9: smallNumber++;
10: cout << "small number:" << smallNumber << endl;
11: return 0;
12: }
Output: small number:65535
small number:0
small number:1
Ví dụ 5. Giải thích về gán giá trị quá lớn cho biến kiểu số nguyên (signed integer)
1: #include <iostream.h>
2: int main()
3: {
4: short int smallNumber;
5: smallNumber = 32767;
6: cout << "small number:" << smallNumber << endl;
7: smallNumber++;
8: cout << "small number:" << smallNumber << endl;
9: smallNumber++;
10: cout << "small number:" << smallNumber << endl;
11: return 0;

12: }
Output: small number:32767
small number:-32768
small number:-32767

II.1.8

Characters

Biến ký tự ( type char ) là 1 byte, đủ để chứa 256 giá trị. Một char có thể được dịch như là một số
nhỏ ( 0-255) hay như là một số của tập ASCII. Trong mã ASCII, "a" được xác định bằng giá trị 97.
Tất cả chũ thường và chữ hoa, chũ số và các dấu chấm có giá trị trong khoảng 1 đến 128.
Ví dụ 6. In các ký tự từ số trong bảng mã ASCII
1: #include <iostream.h>
2: int main()
3: {
4:
for (int i = 32; i<128; i++)
5:
cout << (char) i;
6:
return 0;
7: }
Output: !"#$%G'()*+,./0123456789:;<>?@ABCDEFGHIJKLMNOP
_QRSTUVWXYZ[\]^'abcdefghijklmnopqrstuvwxyz<|>~s

Olympic tin häc sinh viªn HUBT

10


GV: Tr­¬ng Minh §øc


Ng«n ng÷ lËp tr×nh C++

III

Biểu thức và câu lệnh

Một chương trình là một tập các lệnh xử lý nối tiếp nhau.

III.1 Câu lệnh:
Trong C++ một câu lệnh điều khiển chuỗi xử lý, ước lượng một biểu thức, hoặc không có gì
(câu lệnh rỗng ). Tất cả các câu lệnh kết thúc với một dấu chấm phẩy, thậm chí câu lệnh "null". Một
trong các câu lệnh thông dụng là lệnh gán :
x=a+b;
Không giống như trong đại số, câu lệnh này không có nghĩa là x bằng a+b. Mà đọc là " Gán giá trị
của phép cộng a và b cho x" hoặc " Gán cho x, a+b ".
Toán tử gán sẽ gán bất cứ cái gì bên phải dấu bằng cho bất cứ cái gì bên trái dấu bằng.

III.1.1

Khoảng trắng

Khoảng trắng ( tabs, spaces, và các dòng mới) thường được bỏ qua trong câu lệnh. Câu lệnh
gán ở trên sẽ được viết như sau:
x=a+b;
Hoặc như là :
x
=a

+
b
;
Khoảng trắng có thể được dùng để cho chương trình dễ đọc,dễ sửa hơn, hoặc nó có thể được dùng để
tạo ra mã kinh khủng và không thể đọc ra được. Trong trường hợp này,như tất cả mọi thứ, C++ cung
cấp khả năng.
Các ký tự khoảng trắng (tab, space, newline ) không thể nhìn thấy được. Nếu các ký tự này được
in ra, bạn chỉ nhìn thấy khoảng trắng trên giấy.

III.1.2

Các lệnh khối và lệnh phức.

Bất cứ nơi nào bạn có thể đưa vào một câu lệnh đơn, bạn có thể đưa vào một câu lệnh phức,
cũng có thể được gọi là một khối. Một khối bắt đầu với 1 dấu ngoặc mở ({) và kết thúc với 1 dấu
ngoặc đóng (}). Mặc dù vậy mọi câu lệnh trong khối phải kết thúc với một dấu chấm phẩy, khối tự
nó không kết thúc với một dấu chấm phẩy. Ví dụ :
{
temp = a;
a = b;
b = temp;
}
Khối mã này hoạt động như một lệnh và sự trao đổi các giá trị trong các biến a và b

III.2 Các toán tử.
Là biểu tượng mà làm cho trình biên dịch hoạt độ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 tử là các biểu thức. Trong C++ có một vài loại toán tử khác nhau. Hai loại toán
tử là :
- Các toán tử gán.
- Các toán tử toán học.


III.2.1

Toán tử gán.

Toán tử gán (=). Ví dụ :

Olympic tin häc sinh viªn HUBT

11

GV: Tr­¬ng Minh §øc


Ng«n ng÷ lËp tr×nh C++
x=a+b;
Ta có thể gán một biến bằng một hằng số như sau.
x = 35 ;
Nhưng không thể viết:
35 = x ;

III.2.2

Toán tử toán học.

Có 5 toán tử toán học: cộng (+), trừ (-), nhân (*), chia (/), và (%).
Ví dụ 2.
1: // Listing 2 - demonstrates subtraction and
2: // integer overflow
3: #include <iostream.h>

4:
5: int main()
6: {
7: unsigned int difference;
8: unsigned int bigNumber = 100;
9: unsigned int smallNumber = 50;
10: difference = bigNumber - smallNumber;
11: cout << "Difference is: " << difference;
12: difference = smallNumber - bigNumber;
13: cout << "\nNow difference is: " << difference <14: return 0;
15: }
Output: Difference is: 50
Now difference is: 4294967246
Chú ý khi thực hiện phép trừ. Nếu lấy số nhỏ hơn trừ đi một số lớn hơn, sẽ có kết quả là số âm. Nếu
là số không dấu thì sẽ xảy ra tràn như ví dụ trên.

III.2.3

Phép chia số nguyên và phép chia lấy số dư.

Phép chia số nguyên có khác một chút so với phép chia thông thường. Khi chia 21 cho 4, kết quả là
một số thực (một số thập phân). Các số nguyên không có phần thập phân, và vì vậy "remainder" (số
dư) được cắt đi. Trả lời là 5. Để lấy được số dư, đưa 21 modulus 4 (21%4) và kết quả là 1.
- Phép chia divison (/) là phép chi lấy phần nguyên.
- Phép chia modulus (%) là phép chia lấy phần dư.
Cho 2 số nguyên a và b. Ta có:
if (a % b ==0)
{
cout<< “Số” << a << “ chia hết cho “ << “số” << b;

// hoặc printf(“Số %d chia hết cho số %d”, a, b);
}

III.2.4

Toán tử gán và toán tử toán học phức.

Hiếm khi muốn cộng một giá trị với một biến số và sau đó để gán kết quả trở lại biến. Nếu có một
biến myAge và bạn muốn tăng giá trị thêm hai, có thể viết:
int myAge = 5;

Olympic tin häc sinh viªn HUBT

12

GV: Tr­¬ng Minh §øc


Ng«n ng÷ lËp tr×nh C++
int temp;
temp = myAge + 2; // cộng 5 với 2 rồi gán kết quả vào temp
myAge = temp;
// gán trở lại vào myAge
Phương pháp này rất khó chịu và gây lãng phí. Trong C++, có thể đưa vào biến tương tự trên cả hai
chiều của toán tử gán, và vì vậy đoạn chương trình trên được cải tiến tốt hơn nhiều :
MyAge = myAge + 2 ;
Trong đại số biểu thức thức này là vô nghĩa, nhưng trong C++ được đọc là "cộng 2 vào giá trị của
myAge và gán kết quả vào myAge ".
Một cách viết đơn giản hơn là :
MyAge += 2 ;

Toán tử (+=) cộng r-giá trị vào 1-giá trị và sau đó gán trở lại kết quả vào trong 1-giá trị. Toán tử là
"cộng-bằng". Câu lệnh đọc là "myAge cộng-bằng 2". Nếu myAge có giá trị 4 để bắt đầu, sau câu lệnh
sẽ là 6.
Có các toán tử "tự -gán" trừ (-=), chia (/=), nhân (*=), và modulus (%=).

III.2.5

Các phép tăng và giảm

Thông thường giá trị để cộng (hoặc trừ) và sau đó gán lại vào biến là 1.Trong C++, việc tăng giá trị
là 1 được gọi là lượng tăng, và giảm 1 được gọi lượng giảm. Có các toán tử đặc biệt thực hiện những
tác động này.
Toán tử tăng (++) tăng giá trị của biến lên 1, và toán tử giảm (--) giảm đi 1. Vì vậy,nếu có 1 biến, c,
và muốn tăng nó, ta sẽ sử dụng lệnh này:
c++ ;
Lệnh này tương đương với lệnh sau:
c = c +1 ;
Câu lệnh này cũng tương đương:
c += 1 ; //hạn chế dùng cách viết này

III.2.6

Quyền ưu tiên.

Trong câu lệnh phức tạp : x = 5 + 3 * 8;
Thì phép nhân sẽ được thực hiện trước phép cộng.
Mỗi toán tử đều có 1 giá trị ưu tiên. Khi 2 toán tử toán học có cùng quyền ưu tiên, chũng sẽ thực hiện
theo trật tự " từ trái - qua - phải". Vì vậy
X=5+3+8*9+6*4;
Phép nhân sẽ thực hiện từ trái qua phải. Vì vậy, 8 * 9 = 72, và 6*4 =24. Bây giờ câu lệnh sẽ là:

X = 5 + 3 + 72 + 24;
Bây giờ phép cộng thực hiện từ trái qua phải: 5 + 3 =8 ; 8+72 =80 ; 80+24 = 104.
Hãy cẩn thận với điều này. Một số toán tử, như là toán tử gán thực hiện theo trật tự từ " phải - qua trái ". Ví dụ :
TotalSeconds = NumMinutesToThink + NumMinutesToType * 60
Trong biểu thức này, ta muốn nhân NumMinutesToType với 60 và sau đó cộng nó với
NumMinutesToThink. Ta muốn cộng hai biến ta được tổng số phút, và sau đó nhân nó với 60 để được
tổng số giây.
Trong trường hợp này, ta phải sử dụng các dấu ngoặc để thay đổi trật tự ưu tiên. Các số hạng trong
dấu ngoặc được xác định ở trật tự ưu tiên cao hơn những toán tử toán học. Vì vậy ta phải viết :
TotalSeconds = ( NumMinutesToThink + NumMinutesToType ) * 60

Olympic tin häc sinh viªn HUBT

13

GV: Tr­¬ng Minh §øc


Ng«n ng÷ lËp tr×nh C++
III.2.7

Toán tử quan hệ

Dùng để xác định hoặc 2 số bằng nhau, hoặc 1 số lớn hơn hoặc nhỏ hơn 1 số khác. Câu lệnh quan hệ
xác định hoặc 1 (TRUE) hoặc 0 (FALSE).
- Toán tử bằng "equals" :
MyAge == yourAge ;
// giá trị myAge tương tự của yourAge ?
Biểu thức xác định 0, hoặc FALSE khi 2 biến không bằng nhau.
- Toán tử lớn hơn.

MyAge > yourAge ;
// giá trị myAge lớn hơn yourAge ?
Trong C++ có 6 toán tử quan hệ :
Bằng : ==
Nhỏ hơn: <
Lớn hơn: >
Nhỏ hơn hoặc bằng: <=
Lớn hơn hoặc bằng : >=
Khác nhau : !=
Bảng 4.1. Các toán tử quan hệ (The Relational Operators)
Name

Operator

Bằng (Equals)

==

Không bằng (Not Equals)

!=

Lớn hơn (Greater Than)

>

Lớn hơn hoặc bằng (Greater Than
or Equals)

>=


Nhỏ hơn (Less Than)

<

Nhỏ hơn hoặc bằng (Less Than
or Equals)

<=

Sample
100 == 50;
50 == 50;
100 != 50;
50 != 50;
100 > 50;
50 > 50;
100 >= 50;
50 >= 50;
100 < 50;
50 < 50;
100 <= 50;
50 <= 50;

Evaluates
false
true
true
false
true

false
true
true
false
false
False
true

III.3 Câu lệnh IF.
Câu lệnh if cho phép bạn kiểm tra một điều kiện, và rẽ nhánh tới phần khác của đoạn mã, phụ thuộc
vào kết quả.
Câu lệnh if đơn giản nhất là:
if (biểu thức)
Khối lệnh ;
Biểu thức trong dấu ngoặc có thể là bất cứ biểu thức nào, nhưng nó thường chứa một biểu thức quan
hệ. Nếu biểu thức có giá trị 0, nó coi là sai, và lệnh được bỏ qua. Nếu nó có giá trị không phải là 0,
nó coi là đúng, và lệnh được xử lý. Chú ý ví dụ sau:
if (bigNumber > smallNumber)
bigNumber = smallNumber;
Nếu lệnh trong câu lệnh if gồm nhiều lệnh thì dạng lệnh if như sau:
if (biểu thức)

Olympic tin häc sinh viªn HUBT

14

GV: Tr­¬ng Minh §øc


Ng«n ng÷ lËp tr×nh C++

{
khối lệnh1;
khối lệnh2;
khối lệnh3;
}
Ví dụ:
if (bigNumber > smallNumber)
{
bigNumber = smallNumber;
cout << "bigNumber: " << bigNumber << "\n";
cout << "smallNumber: " << smallNumber << "\n";
}
Ví dụ 4.
1: // Listing 4 - demonstrates if statement
2: // used with relational operators
3: #include <iostream.h>
4: int main()
5: {
6:
int RedSoxScore, YankeesScore;
7:
cout << "Enter the score for the Red Sox: ";
8:
cin >> RedSoxScore;
9:
10:
cout << "\nEnter the score for the Yankees: ";
11:
cin >> YankeesScore;
12:

13:
cout << "\n";
14:
15:
if (RedSoxScore > YankeesScore)
16:
cout << "Go Sox!\n";
17:
18:
if (RedSoxScore < YankeesScore)
19:
{
20:
cout << "Go Yankees!\n";
21:
cout << "Happy days in New York!\n";
22:
}
23:
24:
if (RedSoxScore == YankeesScore)
25:
{
26:
cout << "A tie? Naah, can't be.\n";
27:
cout << "Give me the real score for the Yanks: ";
28:
cin >> YankeesScore;
29:

30:
if (RedSoxScore > YankeesScore)
31:
cout << "Knew it! Go Sox!";
32:

Olympic tin häc sinh viªn HUBT

15

GV: Tr­¬ng Minh §øc


Ng«n ng÷ lËp tr×nh C++
33:
if (YankeesScore > RedSoxScore)
34:
cout << "Knew it! Go Yanks!";
35:
36:
if (YankeesScore == RedSoxScore)
37:
cout << "Wow, it really was a tie!";
38:
}
39:
40:
cout << "\nThanks for telling me.\n";
41:
return 0;

42: }
Output: Enter the score for the Red Sox: 10
Enter the score for the Yankees: 10
A tie? Naah, can't be
Give me the real score for the Yanks: 8
Knew it! Go Sox!
Thanks for telling me.
 Cách đặt dấu ngoặc giúp chương trình sáng, dễ nắm bắt.
if (biểu thức)
{
Câu lệnh ;
// Lùi câu lệnh vào một chút
}
 Else
Thường chương trình của bạn sẽ muốn rẽ nhánh nếu điều kiện đúng, và nếu điều kiện sai. Nếu chỉ sử
dụng lệnh if không thì chương trình sẽ dài và ta sử dụng từ khoá "else" như sau:
If (biểu thức)
Câu lệnh ;
Else
Câu lệnh ;
Ví dụ 5. Sử dùng từ khóa ELSE
1: // Listing 5 - demonstrates if statement
2: // with else clause
3: #include <iostream.h>
4: int main()
5: {
6:
int firstNumber, secondNumber;
7:
cout << "Please enter a big number: ";

8:
cin >> firstNumber;
9:
cout << "\nPlease enter a smaller number: ";
10: cin >> secondNumber;
11: if (firstNumber > secondNumber)
12:
cout << "\nThanks!\n";
13: else
14:
cout << "\nOops. The second is bigger!";
15:
16: return 0;

Olympic tin häc sinh viªn HUBT

16

GV: Tr­¬ng Minh §øc


Ng«n ng÷ lËp tr×nh C++
17: }
Output: Please enter a big number: 10
Please enter a smaller number: 12
Oops. The second is bigger!
Các kiểu cú pháp lệnh if.
-

Dạng 1:

If (biểu thức)
khối lệnh1 ;
khối lệnh2 ;
Nếu biểu thức xác định là đúng, "khối lệnh1" được xử lý và chương trình tiếp tục với "khối
lệnh2". Nếu biểu thức sai, câu lệnh được bỏ qua và chương trình nhảy tới "khối lệnh2".
Chú ý rằng khối lệnh có thể là một câu lệnh đơn kết thúc với 1 dấu chấm phẩy hoặc nhiều câu
lệnh thì phải có 2 dấu ngoặc mở đóng khối (“{“,”}”)
- Dạng 2.
if (biểu thức)
khối lệnh1;
else
khối lệnh2;
khối lệnh3;
Nếu biểu thức đúng thì "khối lệnh1" được xử lý; nếu sai "khối lệnh2" được xử lý, sau đấy,
chương trình tiếp tục với "khối lệnh3". Ví dụ:
if (SomeValue < 10)
cout << "SomeValue is less than 10");
else
cout << "SomeValue is not less than 10!");
cout << "Done." << endl;
Các lệnh if phức tạp.
if (biểu thức1)
{
if (biểu thức2)
khối lệnh1;
else
{
if (biểu thức3)
{
câu lệnh1;

câu lệnh2;
}
else
khối lệnh3;
}
}
else
khối lệnh4;

Olympic tin häc sinh viªn HUBT

17

GV: Tr­¬ng Minh §øc


Ng«n ng÷ lËp tr×nh C++
Ví dụ :
Ví dụ 6. Sử dụng các lệnh IF phức tạp lồng nhau
1: // Listing 6 - a complex nested
2: // if statement
3: #include <iostream.h>
4: int main()
5: {
6:
// Nhập từ bàn phím vào hai số
7:
// Lần lượt gán vào 2 biến bigNumber và littleNumber
8:
// Kiểm tra nếu bigNumber lớn hơn littleNumber,

9:
// nếu đúng -> kiểm tra nếu chúng chia hết cho nhau
10: // nếu đúng -> kiểm tra xem chúng có bằng nhau hay không
11:
12: int firstNumber, secondNumber;
13: cout << "Enter two numbers.\nFirst: ";
14: cin >> firstNumber;
15: cout << "\nSecond: ";
16: cin >> secondNumber;
17: cout << "\n\n";
18:
19: if (firstNumber >= secondNumber)
20: {
21:
if ( (firstNumber % secondNumber) == 0) // nếu chia hết cho nhau?
22:
{
23:
if (firstNumber == secondNumber)
24:
cout << "They are the same!\n";
25:
else
26:
cout << "They are evenly divisible!\n";
27:
}
28:
else
29:

cout << "They are not evenly divisible!\n";
30: }
31: else
32:
cout << "Hey! The second one is larger!\n";
33: return 0;
34: }
Output: Enter two numbers.
First: 10
Second: 2
They are evenly divisible!

III.4 Toán tử lôgíc.
Bảng 4.2. Toán tử Logic (The Logical Operators)

Olympic tin häc sinh viªn HUBT

18

GV: Tr­¬ng Minh §øc


Ng«n ng÷ lËp tr×nh C++
Toán tử
AND
OR
NOT

Ký hiệu
&&

||
!

Ví dụ
biểu thức1 && biểu thức2
biểu thức1 || biểu thức2
!biểu thức

III.4.1

Phép lôgíc AND

Phép AND đúng (=1) khi cả hai biểu thức đều đúng. Sai khi 1 trong 2 biểu thức sai.
If ( ( x == 5 ) && (y == 5) )
Phép AND có biểu tượng là &&.

III.4.2

Phép lôgíc OR

Đúng khi 1 trong 2 hoặc cả 2 biểu thức đúng. Sai khi cả 2 biểu thức đều sai.
if ( (x == 5) || (y == 5) )
Phép OR có biểu tượng là
.

III.4.3

Phép lôgíc NOT.

Là phép phủ định.

if ( !(x == 5) )
kết quả của if là đúng nếu x khác 5. Phép này có thể viết cách khác như sau :
if ( x != 5 )

III.4.4

Quyền ưu tiên trong toán tử lôgíc.

Ví dụ:
if ( x > 5 && y > 5 || z > 5)
Nếu viết cách này sẽ làm cho câu lệnh không rõ nghĩa. Do đó ta có thể sử dụng các dấu ngoặc.
if ( (x > 5) && (y > 5 || z > 5) )
Chú ý trong khi viết chương trình cần trình bày sao cho dễ đọc và dễ hiểu.

III.4.5

Một số cách viết tắt.

Ví dụ 1:
if (x)

// if x is true (nonzero)

x = 0;
Câu lệnh có nghĩa : nếu x có giá trị khác 0, đặt nó là 0. Ta có thể viết cách khác rõ ràng hơn:
if (x != 0)
// if x is nonzero
x = 0;
Ví dụ 2:
Hai câu lệnh sau là tương đương :

if (!x)
// if x is false (zero)
if (x == 0)
// if x is zero

Olympic tin häc sinh viªn HUBT

19

GV: Tr­¬ng Minh §øc


Ng«n ng÷ lËp tr×nh C++

IV

Các hàm.

Hàm là gì ?
Hàm là một chương trình con mà có thể làm việc trên dữ liệu và trả về một giá trị. Trong chương
trình C++ có tối thiểu một hàm: hàm main() . Khi chương trình bắt đầu, main() được tự động gọi.
main() có thể gọi các hàm khác.
Mỗi hàm có tên của nó và khi tên được gặp, việc xử lý chương trình rẽ nhánh vào trong thân
hàm. Khi hàm trả về, việc xử lý trở lại trên dòng tiếp theo của hàm gọi.
Các hàm có hai cách tạo ra:
- Do người sử dụng định nghĩa.
- Có sẵn trong trình biên dịch.

IV.1 Khai báo và định nghĩa hàm.
Sử dụng các hàm trong chương trình,đầu tiên phải khai báo hàm và sau đó định nghĩa hàm đó.

Khai báo là chỉ ra tên, kiểu trả về, các tham số của hàm. Định nghĩa là bảo trình biên dịch biết hàm
làm việc như thế nào. Không có hàm nào được gọi từ hàm khác mà không khai báo. Khai báo là thủ
tục đầu tiên.
Khai báo hàm.
Có 3 cách khai báo một hàm:
- Viết nguyên mẫu vào trong một file, sau đó sử dụng một chỉ dẫn #include để gộp nó vào trong
chương trình của bạn.
- Viết nguyên mẫu vào trong file mà hàm của bạn được sử dụng.
- Định nghĩa hàm trước khi nó được gọi bởi bất kì hàm. Khi làm điều này, việc định nghĩa hoạt
động như chính sự khai báo của nó.
Cách thứ nhất, là ý tưởng tồi và khó cho việc sửa và thay đổi.
Cách thứ hai, giả sử rằng hàm A() cần để có thể gọi hàm B(), nhưng hàm B() cũng cần để có thể gọi
hàm A() trong một số trường hợp.
Có thể định nghĩa hàm A() trước khi định nghĩa hàm B() và cũng để hàm B() trước khi định nghĩa
hàm A(), vì vậy tối thiểu 1 trong số chúng phải được khai báo trong bất cứ trường hợp nào.
Cách thứ ba, các nguyên mẫu là một kỹ thuật gỡ rối đầy sức mạnh và tốt. Nếu nguyên mẫu của bạn
khai báo rằng hàm gồm một tập các tham số riêng biệt, hoặc rằng nó trả về một kiểu giá trị cụ thể, và
sau đó hàm không sắp xếp nguyên mẫu, trình biên dịch có thể ra hiệu bằng cờ lỗi của bạn thay vì đợi
nó hiện lên khi chạy chương trình .

IV.1.1

Các nguyên mẫu hàm.

Nhiều hàm có sẵn, bạn có thể sử dụng chúng trong chương trình của bạn bằng cách sử dụng #
include . Đối với các hàm của chính bạn viết, bạn phải gộp nguyên mẫu.
Nguyên mẫu hàm là một câu lệnh , nghĩa là nó kết thúc với dấu chấm phẩy (;). Nó kiểu trả về của
hàm, tên, và danh sách tham số.
Danh sách tham số là một danh sách của tất cả các tham số và kiểu của chúng, phân cách bởi dấu
phẩy (commas).

Nguyên mẫu hàm và sự định nghĩa hàm phải giống nhau chính xác về kiểu trả về, tên, danh sách
tham số. Nếu chúng không giống nhau , bạn sẽ nhận được một lỗi "compile-time". Chú ý: nguyên
mẫu hàm không cần gồm tên của tham số, mà chỉ là kiểu của chúng. Một nguyên mẫu trông giống
như :
long Area (int , int ) ;

Olympic tin häc sinh viªn HUBT

20

GV: Tr­¬ng Minh §øc


Ng«n ng÷ lËp tr×nh C++
Nguyên mẫu này khai báo một hàm tên là Area() trả về một long và có hai tham số, cả hai là số
nguyên. Mặc dù đây là theo qui định, nó không phải là ý tưởng tốt. Tên tham số thêm vào làm cho
nguyên mẫu rõ ràng hơn. Hàm tương tự với các tham số được dặt tên có thể là :
long Area (int length, int width) ;
Chú ý rằng: tất cả các hàm có một kiểu trả về. Nếu không định rõ, kiểu trả về mặc định là int .
Chương trình của bạn sẽ hiểu dễ dàng hơn, mặc dù, nếu khai báo rõ ràng kiểu trả về của mọi hàm, kể
cả main() .
Ví dụ 1.
1: // Listing 1 - demonstrates the use of function prototypes
2:
3: typedef unsigned short USHORT;
//định nghĩa USHORT thay unsigned short
4: #include <iostream.h>
5: USHORT FindArea(USHORT length, USHORT width);
//khai báo mẫu của hàm
6:

7: int main()
8: {
9: USHORT lengthOfYard;
10: USHORT widthOfYard;
11: USHORT areaOfYard;
12:
13: cout << "\nHow wide is your yard? ";
14: cin >> widthOfYard;
15: cout << "\nHow long is your yard? ";
16: cin >> lengthOfYard;
17:
18: areaOfYard= FindArea(lengthOfYard,widthOfYard);
19:
20: cout << "\nYour yard is ";
21: cout << areaOfYard;
22: cout << " square feet\n\n";
23: return 0;
24: }
25:
26: USHORT FindArea(USHORT l, USHORT w)
27: {
28:
return l * w;
29: }
Output: How wide is your yard? 100
How long is your yard? 200
Your yard is 20000 square feet

Olympic tin häc sinh viªn HUBT


21

GV: Tr­¬ng Minh §øc


Ng«n ng÷ lËp tr×nh C++
IV.1.2

Định nghĩa hàm .

Định nghĩa hàm bao gồm đầu hàm và thân hàm. Đầu hàm chính xác giống như nguyên mẫu hàm,
ngoại trừ các tham số phải được đặt tên, và không có dấu chấm phẩy kết thúc.
Thân hàm là một tập các lệnh bên trong các dấu ngoặc.
Cú pháp nguyên mẫu hàm:
Return_type function_name ( [type [parameterName] ] .....) ;
Cú pháp định nghĩa hàm:
Return_type function_name ( [type [parameterName] ] .....) ;
{
câu lệnh ;
}
Nguyên mẫu hàm chỉ ra : kiểu trả về, tên, danh sách tham số. Hàm không cần có các tham số, và
nguyên mẫu không cần danh sách các tên của chúng, chỉ có các kiểu của chúng. Một nguyên mẫu
luôn kết thúc với dấu chấm phẩy (;).
Định nghĩa hàm phải phù hợp kiểu trả về và danh sách tham số với nguyên mẫu của nó. Nó phải
cung cấp tên cho các tham số, và thân định nghĩa hàm phải được bao quanh bằng các dấu ngoặc. Tất
cả các lệnh bên trong thân hàm phải được kết thúc với dấu chấm phẩy (;), nhưng hàm tự nó không
kết thúc với một dấu chấm phẩy mà nó kết thúc với một dấu đóng ngoặc. Nếu hàm trả về một giá trị,
nó kết thúc với một câu lệnh return, mặc dù các lệnh return có thể xuất hiện hợp pháp ở bất cứ nơi
nào trong thân hàm. Mọi hàm có 1 kiểu trả về. Nếu không rõ ràng, kiểu trả về sẽ là int. Nếu một hàm
không trả về một giá trị, kiểu trả về của nó sẽ là void.

Function Prototype Examples
long FindArea(long length, long width);
// hàm 2 tham số và trả về kiểu long
void PrintMessage(int messageNumber);
// hàm một tham số và không trả về giá trị
int GetChoice();
// hàm không có tham số và trả về kiểu int
int BadFunction();
// hàm không có tham số và trả về kiểu int
Function Definition Examples
long Area(long l, long w)
{
return l * w;
}
void PrintMessage(int whichMsg)
{
if (whichMsg == 0)
cout << "Hello.\n";
if (whichMsg == 1)
cout << "Goodbye.\n";
if (whichMsg > 1)
cout << "I'm confused.\n";
}

Olympic tin häc sinh viªn HUBT

22

GV: Tr­¬ng Minh §øc



Ng«n ng÷ lËp tr×nh C++
IV.1.3

Xử lý hàm.

Khi bạn gọi một hàm, việc xử lý bắt đầu với câu lệnh đầu tiên sau dấu ngoặc mở ({). Nhánh có
thể được xử lý bằng cách sử dụng lệnh if. Các hàm cũng có thể gọi các hàm khác thậm chí gọi chính
chúng.

IV.2 Biến khu vực (local variables).
Biến khu vực chỉ tồn tại trong khu vực bên trong hàm của nó. Khi hàm trả về, các biến khu vực
là biến không có hiệu lực nữa.
Biến khu vực được định nghĩa như bất cứ biến khác. Các tham số đặt bên trong hàm cũng coi là
biến khu vực và có thể được sử dụng chính xác bởi vì nếu chúng đã được định nghĩa bên trong thân
hàm.
Ví dụ 2. Sử dụng biến khu vực
1: #include <iostream.h>
2:
3: float Convert(float);
4: int main()
5: {
6:
float TempFer;
7:
float TempCel;
8:
9:
cout << "Please enter the temperature in Fahrenheit: ";
10:

cin >> TempFer;
11:
TempCel = Convert(TempFer);
12:
cout << "\nHere's the temperature in Celsius: ";
13:
cout << TempCel << endl;
14:
return 0;
15: }
16:
17: float Convert(float TempFer)
18: {
19:
float TempCel;
20:
TempCel = ((TempFer - 32) * 5) / 9;
21:
return TempCel;
22: }
Output: Please enter the temperature in Fahrenheit: 212
Here's the temperature in Celsius: 100
Please enter the temperature in Fahrenheit: 32
Here's the temperature in Celsius: 0
Please enter the temperature in Fahrenheit: 85
Here's the temperature in Celsius: 29.4444

1:
2:


Ví dụ khác:
#include <iostream.h>

Olympic tin häc sinh viªn HUBT

23

GV: Tr­¬ng Minh §øc


Ng«n ng÷ lËp tr×nh C++
3: float Convert(float);
4: int main()
5: {
6:
float TempFer;
7:
float TempCel;
8:
9:
cout << "Please enter the temperature in Fahrenheit: ";
10:
cin >> TempFer;
11:
TempCel = Convert(TempFer);
12:
cout << "\nHere's the temperature in Celsius: ";
13:
cout << TempCel << endl;
14: }

15:
16: float Convert(float Fer)
17: {
18:
float Cel;
19:
Cel = ((Fer - 32) * 5) / 9;
20:
return Cel;
21: }
Hiện nay, các biến được khai báo bên trong đầu của một vòng for (for int i = 0; i
IV.3 Biến toàn cục (global variables)
Các biến được định nghĩa bên ngoài của bất cứ hàm có phạm vi lớn và vì vậy có sẵn ở bất cứ
hàm trong chương trình, kể cả main() .
Biến khu vực với tên tương tự như các biến toàn cục không làm thay đổi biến toàn cục. Nếu một
hàm có 1 biến với tên giống biến toàn cục, tên được xem là biến khu vực--không là biến toàn cục-khi được dùng trong hàm.
Ví dụ 3. Sử dụng biến khu vực và toàn cục
1: #include <iostream.h>
2: void myFunction();
// khai báo nguyên mẫu hàm
3:
4: int x = 5, y = 7;
// x và y ở đây là các biến toàn cục
5: int main()
6: {
7:
8:
cout << "x from main: " << x << "\n";
9:

cout << "y from main: " << y << "\n\n";
10:
myFunction();
11:
cout << "Back from myFunction!\n\n";
12:
cout << "x from main: " << x << "\n";
13:
cout << "y from main: " << y << "\n";
14:
return 0;
15: }
16:
17: void myFunction()
18: {

Olympic tin häc sinh viªn HUBT

24

GV: Tr­¬ng Minh §øc


Ng«n ng÷ lËp tr×nh C++
19:
20:
21:
22:
23: }


int y = 10;
cout << "x from myFunction: " << x << "\n";
cout << "y from myFunction: " << y << "\n\n";

Output: x from main: 5
y from main: 7
x from myFunction: 5
y from myFunction: 10
Back from myFunction!
x from main: 5
y from main: 7
Ví dụ biến khu vực.
Ví dụ 4.
1: // Listing 4 - demonstrates variables
2: // scoped within a block
3:
4: #include <iostream.h>
5:
6: void myFunc();
7:
8: int main()
9: {
10:
int x = 5;
11:
cout << "\nIn main x is: " << x;
12:
13:
myFunc();
14:

15:
cout << "\nBack in main, x is: " << x;
16:
return 0;
17: }
18:
19: void myFunc()
20: {
21:
22:
int x = 8;
23:
cout << "\nIn myFunc, local x: " << x << endl;
24:
25:
{
26:
cout << "\nIn block in myFunc, x is: " << x;
27:

Olympic tin häc sinh viªn HUBT

25

GV: Tr­¬ng Minh §øc


×