Professional Documents
Culture Documents
Ý nghĩa và cách sử dụng chúng sẽ được lần lượt giới thiệu ở các mục sau. Ở đây ta chỉ cần nhớ:
Không được dùng từ khóa để đặt tên cho các hằng, biến, mảng,...
Từ khóa phải được viết bằng chữ thường. Chẳng hạn, không được viết INT hay Int mà phải viết
int.
5. Tên (Identifier)
Mọi đối tượng trong chương trình đều phải được đặt tên theo quy tắc của ngôn ngữ lập trình và
từng chương trình dịch cụ thể.
Tên được dùng để xác định các đối tượng khác nhau trong một chương trình. Tên là một khái niệm
rất quan trọng. Tên được đặt theo quy tắc sau:
Tên là một dãy liên tiếp bao gồm chữ số, chữ cái, dấu gạch dưới
Bắt đầu bằng chữ cái hoặc dấu gạch dưới,
Không được trùng với từ khóa
Độ dài theo quy định của chương trình dịch.
Ví dụ một số tên hợp lệ: i, j, x, bai_tap, ket_qua…
Trong các tên, chữ hoa và chữ thường được xem là khác nhau. Ví dụ, AB và Ab, aB, ab là các tên
khác nhau trong C++. Trong C++ thường dùng chữ hoa để đặt tên cho các hằng và dùng chữ thường để
đặt tên cho hầu hết các đối tượng khác như biến, mảng, hàm, cấu trúc. Tuy nhiên đây không phải điều
bắt buộc.
6. Chú thích (Comment)
Có thể đặt các đoạn chú thích trong chương trình nguồn. Các chú thích này giúp cho người đọc
chương trình nhận biết ý nghĩa của chương trình đó dễ hơn. Chú thích không ảnh hưởng đến nội dung
chương trình nguồn và được chương trình dịch bỏ qua.
Trong C++ các đoạn chú thích được đặt giữa cặp dấu /* ... */ hoặc có thể viết chú thích trên một
dòng theo sau cặp dấu //
§ 3. Soạn thảo, dịch, thực hiện và hiệu chỉnh chương trình trên Code::Blocks
Để có thể soạn thảo, dịch, thực hiện, hiệu chỉnh chương trình được viết bằng ngôn ngữ lập trình
C++, ta có thể sử dụng nhiều phần mềm hỗ trợ ngôn ngữ này như: Turbo C++ (TC30), Visual C++,
DevCpp (DevC++), Code::Blocks (CB),… Trong tài liệu này, các chương trình và minh họa được thử
nghiệm trên CB.
1. Cài đặt và giao diện làm việc Code::Blocks
Địa chỉ để tải bộ cài về máy tính: http://www.codeblocks.org/downloads/26
Chọn đúng phiên bản cho hệ điều hành của mình (thường là windows 7) và tên chứa « mingw » để
tải về. Sau khi tải về máy tính ta thực hiện cài đặt cài đặt, màn hình làm việc của Code::Blocks sau khi
thực hiện cài đặt như sau:
qua lệnh « new project ». Để tạo một project mới, chọn File\New\Project. Trong cửa sổ được hiển thị,
chọn Console application, nhấn Go, chọn Next, chọn C++, Next.
Trong cửa số kế tiếp, đặt tên và chọn thư mục lưu cho project. Sau đó chọn Next, rồi Finish.
Trong danh sách file nguồn bên trái cửa sổ, chọn project tương ứng, ở trong thư mục Sources, có
một file mặc định tên là “main.cpp”. Đây là file mặc định cho chương trình in ra “Hello World” đơn
giản mà Code::Blocks đã sinh ra. Để phù hợp với yêu cầu của bài toán ta phải đổi tên file này bằng
cách click phải chuột vào file main.cpp rồi chọn rename file sau đó gõ tên phù hợp vào cửa sổ hiện ra.
Về cơ bản, việc soạn thảo chương trình tương tự như soạn thảo văn bản. Lưu chương trình vào đĩa
bằng cách nhấn lệnh Save (Ctrl + S).
b) Dịch và chạy chương trình
Để chương trình có thể được máy tính thực thi (chạy) thì ta phải thực hiện dịch mã nguồn sang
dạng một file dạng nhị phân sau đó máy tính có thể thực thi file nhị phân này.
- Để dịch chương trình ta sử dụng tổ hợp phím: Ctrl + F9 hoặc click vào biểu tượng trên
thanh công cụ hoặc chọn chức năng Build -> Build trên thanh menu. Nếu chương trình viết có
lỗi thì sẽ không thể dịch được và các lỗi sẽ được thông báo ở phần (4).
- Để chạy chương trình ta sử dụng tổ hợp phím: Ctrl + F10 hoặc click vào biểu tượng trên
thanh công cụ hoặc chọn chức năng Build -> Run trên thanh menu.
- Để thực hiện 2 thao tác dịch và chạy liên tiếp ta sử dụng phím F9 hoặc click vào biểu tượng
trên thanh công cụ hoặc chọn chức năng Build -> Build and run trên thanh menu.
3. Gỡ rối và sửa lỗi
Khi dịch chương trình, nếu có lỗi thì Code::Blocks sẽ thông báo lỗi cho ta thấy ở ngay tại khu vực
soạn thảo và cả khu vực thông báo. Dựa vào những thông báo đó ta sẽ sửa lại các câu lệnh cho phù
hợp. Đến khi không còn các lỗi cú pháp thì chương trình có thể dịch và chạy được.
Sau khi chương trình được dịch và chạy thì cũng không thể đảm bảo rằng nó sẽ cho ra được kết quả
đúng như mong muốn. Nếu như chưa có kết quả đúng, ta phải tìm xem chương trình sai ở lệnh nào,
quá trình này gọi là gỡ rối.
Để gỡ rối ta nên sử dụng các thao tác sau để quá trình này thực hiện dễ dàng hơn:
- Chạy đến một dòng lệnh mong muốn: ta click chuột vào bên trái một dòng lệnh (sẽ có hình tròn
màu đỏ hiện lên tại vị trí click) sau đó sử dụng phím F8 thì máy tính sẽ thực thi các lệnh từ đầu
chương trình chính cho đến dòng lệnh được đánh dấu và dừng lại.
- Chạy từng dòng lệnh: trong khi đang thực hiện gỡ rối, ta có thể cho máy tính chỉ chạy từng
dòng lệnh một khi ta ấn phím F7 hoặc Shift + F7.
- Kiểm tra giá trị các biến trong quá trình gỡ rối: trong quá trình gỡ rối chạy từng dòng lệnh, ta
nên cho hiển thị cửa sổ watches (bằng cách chọn lệnh Debug -> Debugging windows ->
watches). Trong cửa sổ Watches, ta có thể kiểm tra giá trị của biến bằng cách gõ tên biến vào
cột đầu tiên trong cửa sổ. Hình dưới là một ví dụ:
Các bài toán trong thực tế thường có dữ liệu vào và kết quả ra thuộc những kiểu dữ liệu quen biết
như số nguyên, số thực, kí tự,... Khi cần lập trình cho những bài toán như vậy, người lập trình sử dụng
các kiểu dữ liệu đó thường gặp một số hạn chế nhất định, phụ thuộc vào các yếu tố như dung lượng bộ
nhớ, khả năng xử lí của CPU,...
Vì vậy, mỗi ngôn ngữ lập trình thường cung cấp một số kiểu dữ liệu chuẩn cho biết phạm vi giá trị
có thể lưu trữ, dung lượng bộ nhớ cần thiết để lưu trữ và các phép toán tác động lên dữ liệu. Dưới đây
xét một số kiểu dữ liệu thường dùng trong C++:
1. Kiểu kí tự
Một giá trị kiểu kí tự char chiếm 1 byte (8 bit) và biểu diễn được một kí tự thuộc bộ mã ASCII. Ví
dụ, kí tự A có mã ASCII là 65, kí tự a có mã ASCII là 97, kí tự 0 có mã ASCII là 48, kí tự dấu cách có
mã ASCII là 32. Có hai kiểu kí tự: [signed] char và unsigned char.
2. Kiểu số nguyên
3. Kiểu số thực
4. Kiểu logic
Một giá trị kiểu bool chiếm 1 byte và biểu diễn giá trị false (0) hoặc true (1 hay một số khác 0).
Biến (variable) là đại lượng được đặt tên, dùng để lưu trữ giá trị và giá trị có thể được thay đổi
trong quá trình thực hiện chương trình.
1. Khai báo
Các biến dùng trong chương trình đều phải khai báo tên và kiểu dữ liệu trước khi sử dụng. Tên
biến dùng để xác lập quan hệ giữa biến với địa chỉ bộ nhớ nơi lưu trữ giá trị biến. Việc khai báo biến
được thực hiện theo mẫu:
Tên_kiểu_dữ_liệu Tên_biến;
Trong đó, Tên_biến có thể là 1 biến hoặc danh sách các biến được ngăn cách nhau bởi dấu phẩy (,).
Câu lệnh dưới đây dùng để khai báo hai biến kiểu số nguyên a, b và biến số thực r:
int a;
int b;
float r;
Hoặc với hai biến a, b cùng một kiểu dữ liệu thì có thể khai báo:
int a, b;
2. Phạm vi của biến
Tất cả các biến đều phải đặt tên và chỉ rõ kiểu dữ liệu của nó trước khi sử dụng. Một biến có thể là
biến toàn cục hoặc là biến cục bộ. Biến toàn cục là biến được khai báo ở bên ngoài các hàm. Biến cục
bộ là biến được khai báo bên trong phần thân hàm hoặc khối lệnh. Phạm vi của biến cục bộ bị giới hạn
bởi cặp dấu {} nơi khai báo chúng. Như ví dụ dưới đây, biến x, y là 2 biến cục bộ của hàm main, nó
không thể sử dụng cho các hàm khác bên ngoài hàm main còn biến ket_qua là biến toàn cục, nó có thể
được sử dụng ở mọi nơi trong chương trình.
§ 7. Hằng
Hằng là đại lượng có giá trị không thay đổi trong quá trình thực hiện chương trình.
1. Sử dụng bộ tiền xử lý #define
Sử dụng cấu trúc sau để định nghĩa 1 hằng:
#define dinh_danh gia_tri
Ví dụ:
#define CHIEUDAI 15
#define CHIEURONG 12
#define NEWLINE '\n'
2. Sử dụng từ khóa const
Có thể định nghĩa hằng qua từ khóa const, cấu trúc như sau:
const kieu_du_lieu ten_bien = gia_tri;
Ví dụ:
const int CHIEUDAI = 15;
const int CHIEURONG = 12;
const char NEWLINE = '\n';
3. Các loại hằng trong chương trình
Một số loại hằng thông dụng trong khi viết chương trình:
- Hằng số nguyên
- Hằng số thực
- Hằng kí tự
- Hằng chuỗi
- Hằng số kiểu liệt kê
quả của hàm có thể là nguyên hoặc thực hay phụ thuộc vào kiểu của đối số. Bảng dưới đây cho biết
một số hàm chuẩn trong thư viện thường dùng:
x = x-1 x—hoặc –x
x = x+a x+=a
x = x-a x -= a
x = x*a x *=a
x = x/a x/=a
x=x%a x %=a
4. Thứ tự ưu tiên các phép toán
Các phép toán có độ ưu tiên khác nhau, điều này có nghĩa là trong cùng một biểu thức một số phép
toán này được thực hiện trước một số phép toán khác. Thứ tự ưu tiên của các phép toán này được trình
bày trong bảng sau:
1. Vào/ra với thiết bị chuẩn (vào từ bàn phím, đưa dữ liệu ra màn hình)
a) Nhập dữ liệu từ bàn phím
Cấu trúc:
cin >> biến 1 >> ... >> biến n;
Ví dụ:
int x; float y;
cin>>x>>y;
Khi gặp lệnh này, máy tính sẽ dừng lại để đợi người chạy chương trình nhập vào các giá trị tương
ứng với các biến.
b) Đưa kết quả ra màn hình
Cấu trúc:
cout<< giá trị<< giá trị<<…<<giá trị;
Ví dụ:
cout<<5<<x+y<< "hello”;
Định dạng khi in ra màn hình
Để quy định số thực được in ra có đúng p chữ số sau dấu chấm thập phân, ta sử dụng hàm
setprecision(p) ngay trước giá trị thực cần đưa ra
cout << fixed<< setprecision(p) << giá trị;
Ví dụ:
cout<<fixed<< setprecision(3) << 3.1412;
Kết quả ngoài màn hình sẽ đưa ra giá trị là 3.14
Để quy định độ rộng tối thiểu là w vị trí cho giá trị được in trong các toán tử xuất, ta dùng hàm:
setw(w). Hàm này cần đặt trong toán tử xuất và nó chỉ có hiệu lực cho một giá trị được in gần nhất.
Các giá trị in ra tiếp theo sẽ có độ rộng tối thiểu mặc định là 0.
Lệnh cout << setw(5) << “C” << “++”; sẽ ghi ra màn hình 4 dấu cách và 3 kí tự C++.
Chỉ thị xuống dòng endl
2. Vào / ra với file
Vào/ra với file cũng tương tự như với thiết bị chuẩn, nhưng trước khi thực hiện thao tác vào/ ra thì
ta cần sử dụng lệnh sau:
- Đối với thao tác nhập dữ liệu từ file:
Ta sử dụng lệnh với cấu trúc:
freopen("<tên file>","r",stdin);
Ví dụ: freopen("baitap.inp","r",stdin);
- Đối với thao tác đưa dữ liệu ra file:
freopen("<tên file>","w",stdout);
Ví dụ: freopen("baitap.out","w",stdout);
Bài 6. Hãy viết chương trình nhập từ bàn phím 2 kích thước chiều dài k1 và chiều rộng k2 của hình
chữ nhật. Tính và đưa ra chu vi, diện tích của hình chữ nhật và của đường tròn tiếp xúc với 2 chiều của
hình chữ nhật đó (hình 2). Kết quả làm tròn đến 3 chữ số thập phân, đưa ra màn hình.
Bài 7. Yêu cầu nhập vào 1 số nguyên có 3 chữ số từ file có tên “bai7.inp”. Hãy đưa ra file có tên
“bai7.out” chữ số hàng chục của số đã cho.
Bài 8. Yêu cầu nhập từ file “bai8.inp” một số nguyên dương có 5 chữ số, có dạng . Hãy đưa ra
2 2 2 2 2
file “bai8.out” giá trị: a + b + c + d + e .
Bài 9. Cho 4 số nguyên x, y, z, t trong file “bai9.inp” thể hiện tọa độ của 2 điểm (x,y) và (z,t) trong hệ
tọa độ Đề các. Yêu cầu đưa ra file “bai9.out” khoảng cách giữa 2 điểm đã cho, kết quả làm tròn đến 2
chữ số thập phân.
Bài 10. Cho trong file “bai10.inp” một số có 8 chữ số ở hệ cơ số 2 (hệ nhị phân). Yêu cầu chuyển đổi
số đã cho sang hệ thập phân, kết quả ghi ra file “bai10.out”.