Lý do là Dev-C++ hỗ trợ C/C++ chuẩn, mã nguồn viết trên Dev-C++ có thể biên dịch trên các IDE khác, ñiều ngược lại có thể không ñúng.. • Bả n cài ñặ t: Tải file cài ñặt tại ñịa chỉ: http
Trang 110
TÀI LIỆU THỰC HÀNH
MÔN KỸ THUẬT LẬP
TRÌNH C++
Phiên b ả n 2.0 Sep-2010
dtvt.hvhkvn
Lab 00: LÀM QUEN Dev-C++ 3
LAB 01: Biểu thức, tóan tử trong C++ 11
LAB 02: Selection Structure 19
Lab 04: HÀM 33
Lab 05: Array 42
Trang 2LAB00: H ƯỚ NG D Ẫ N CÀI ðẶ T VÀ S Ử
NỘI DUNG CHÍNH
Lab 0: LÀM QUEN Dev-C++ 3
1 Giới thiệu 3
2 Cài ñặt 3
3 Thao tác với Dev-C++ 3
3.1 Cấu hình Dev-C++ (Chỉ thực hiện lần ñầu) 3
3.2 Tạo chương trình mới hoặc dự án mới 4
4 Chương trình Hello World 6
Trang 3
Lab 00: LÀM QUEN Dev-C++
Mặc dù không có nhiều tính năng cao cấp như các công cụ IDE thương mại khác (Visual Studio của Microsoft) nhưng DevCpp vẫn là một công cụ rất thích hợp trong môi trường giáo
dục ở bậc ñại học khi dạy và học các ngôn ngữ C/C++ Lý do là Dev-C++ hỗ trợ C/C++ chuẩn,
mã nguồn viết trên Dev-C++ có thể biên dịch trên các IDE khác, ñiều ngược lại có thể không
ñúng
2 Cài ñặ t
Có 2 phiên bản của dev-c++ Bản cài ñặt và bản portable
• Bả n cài ñặ t: Tải file cài ñặt tại ñịa chỉ: http://www.bloodshed.net/devcpp.html sau ñó,
thực hiện cài ñặt theo hướng dẫn trên màn hình
• Bả n portable: Phiên bản portable không cần cài ñặt có thể tải về từñịa chỉ
http://sourceforge.net/projects/devcpp-portable/
• Trong phòng lab, Dev-CPP ñược cài ñặt và có tại ổ dĩa D:\Dev-CPP
3 Thao tác v ớ i Dev-C++
3.1 C ấ u hình Dev-C++ (Ch ỉ th ự c hi ệ n l ầ n ñầ u)
Chạy DEV-C++ (file devcpp.exe) màn hình sau xuất hiện như hình 1
• Vào menu "Tools" chọn "Compiler Options"
• Vào tab "Settings" tab, nhấn vào "Linker" ở khung bên trái và thay ñổi thông số
"Generate debugging information" sang "Yes":
• Nhấn OK
Trang 4B ướ c 1: T ạ o file ho ặ c project (d ự án) m ớ i
a Tr ườ ng h ợ p ch ươ ng trình ñơ n gi ả n
(Ctrl-N) Nhập mã nguồn (Hầ u h ế t các
tr ườ ng h ợ p trong phòng lab s ử d ụ ng cách này)
b Tr ườ ng h ợ p ch ươ ng trình ph ứ c t ạ p
ðối với chương trình C/C++ phức tạp, 1 chương trình cần nhiều file ñể thực hiện thì DevCPP
có khái niệm dự án (project) Project là nơi cất giữ tất cả những thông tin liên quan ñến mã nguồn, thư viện, tài nguyên,… ñể biên dịch thành chương trình
• ðể tạo Project mới, vào menu "File" chọn "New", "Project "
• Chọn "Console Application" và chọn "C project" nếu là lập trình C, Chọn “C++ Project”
n u là C++ Nhập tên project, tên project cũng là tên của file thực thi (.exe) sẽ ạo ra khi biên dịch
• Nhấn "OK" Dev-C++ sẽ hỏi nơi lưu trữ project Nhấn "OK"
Trong phòng Lab, phải lưu vào ổ dĩa D theo hướng dẫn của từng bài
Trang 5B ướ c 2: S ọ an th ả o mã ngu ồ n
Nếu bước 1.a thì chúng ta bắt tay ngay vào việc nhập mã nguồn chương trình
Nếu là bước 1.b, chúng ta có 2 cách thêm mã nguồn vào dự án
• Vào menu "File" chọn "New Source File" (CTRL+N) Hoặc
• Vào menu "Project" chọn "New File"
Dev-c++ sẽ không hỏi tên file cho ñến khi chúng ta thực hiện:
o Compile
o Save the project
o Save the source file
• Nhấn phím phải chuột vào project name ở
khung bên trái và chọn "Add to Project"
Trang 6sọan thảo
B ướ c 3: Biên d ị ch (Compile)
hiện:
• Vào menu "Execute" chọn "Compile"
(CTRL+F9)
Thông thường, khi biên dịch lần ñầu sẽ có lỗi về
Syntax Lỗi Syntax sẽ hiển thịở tab biên dịch ở phía dưới màn hình ðể biết lỗi xảy ra ở vị trí nào của source
về vị trí có lỗi khi biên dịch
Trong trường hợp biên dịch thanh công, hộp thọai thông báo có status là “Done”
B ướ c 4: Th ự c thi ch ươ ng trình
Bây giờ, bạn có thể chạy chương trình
• Vào menu "Execute" chọn "Run"
Chú ý 1: B c 4 & 5 có th th c hi n ñ ng th i b ng menu Execute, ch n Compile & Run (F9)
Chú ý 2: Màn hình k ế t qu ả không xu ấ t hi ệ n:
N ế u khi ch ạ y ch ươ ng trình, b ạ n th ấ y màn hình console DOS màu ñ en xu ấ t hi ệ n, ch ớ p sáng 1
ho ặ c vài l ầ n và tr ở l ạ i màn hình s ọ an th ả o thì có ngh ĩ a là ch ươ ng trình c ũ a b ạ n ñ ã ch ạ y xong
ð i ề u này có ngh ĩ a là ch ươ ng trình th ự c thi xong và t ự ñ óng c ử a s ổ console sau khi ch ươ ng trình thóat ðể gi ả i quy ế t tr ườ ng h ợ p này chúng ta có th ể s ử d ụ ng l ệ nh system và thông s ố
l ệ nh c ủ a H ð H Thêm ñọ an code sau tr ướ c l ệ nh return trong hàm main ho ặ c tr ướ c b ấ t k ỳ hàm exit() ho ặ c abort():
system(“pause”);
B ướ c 5: Debug
Trong trường hợp chương trình chạy không như ý của bạn, sử dụng công cụ debugger ñể xác
ñịnh cụ thể Chức năng debug cơ bản có tại tab debug ở cuối màn hình Nhiều chức năng khác nhau có tại menu debug Một vài tính năng chính của debug như:
• Chạy tới con trỏ màn hình (Run to cursor )
• Thêm cửa sổ theo dõi
• Theo dõi giá trị của biến,…
4 Ch ươ ng trình Hello World
ðể kiểm tra họat ñộng của Dev-Cpp, sau ñây là chương trình in ra màn hình chữ “Hello World
“ sử dụng ngôn ngữ C hoặc C++ Bạn hãy thực hiện theo các bước trên, nhập mã nguồn và
chạy thửñể kiểm tra kết quả
Trang 7a) Ngôn ng ữ C:
/* Chuong trinh C don gian
* In ra man hinh dong chu Hello World
* Nhan phim Enter de thoat
* luu file voi ten la hello.c
/* Chuong trinh C++ don gian
* In ra man hinh dong chu Hello World
* Nhan phim Enter de thoat
* luu file voi ten la hello.cpp
QUY ƯỚ C KHI VI Ế T MÃ NGU Ồ N C/C++
1 Các quy t ắ c ñặ t tên trong ch ươ ng trình
Quy t ắ c 1: Tên các ñịnh danh (hằng, biến, hàm, mảng, cấu trúc, lớp, …) trong chương trình
phải thể hiện ñược ý nghĩa của nó
Quy t ắ c 2: Tên hằng ñược viết hoa toàn bộ, các từ cách nhau bằng ký tự ‘_’
const int NUMBER_OF_ELEMENTS 100
Quy T ắ c 3: Tên biến phải thể hiện ñược ý nghĩa của nó, viết bằng chữ thường, các từ cách nhau bằng ký tự ‘_’
int tu_so, mau_so;
Quy T ắ c 4: Tên hàm phải là ñộng từ thể hiện hành ñộng cần thực hiện
int check_bad_value (long value) \
Trang 8int kiem_tra_so_nguyen_to (int n)
if (a > b) cout << "a lon hon b";
else cout << "a nho hon b";
// đúng
if (a > b)
cout << "a lon hon b";
else
cout << "a nho hon b";
for (int i = 0; i < n; i++) x = x + 5; for (int i = 0; i < n; i++)
for (int i = 0; i < n; i++)
3 Quy T ắ c v ề kh ỏ ang tr ắ ng (space)
Quy T ắ c 9: Các câu lệnh nằm giữa dấu Ổ{Ổ, Ổ}Ỗ ựược viết cách vào một khoảng tab Các câu
lệnh con của if, else, while, for, switch ựược viết cách vào một khoảng tab
Vắ d ụ sai Vắ d ụ ự úng
Trang 9if (a > b) cout << "a lon hon b";
else cout << "a nho hon b";
for (int i = 0; i < n; i++)
Quy T ắ c 12: Sử dụng // cho chú thích 1 dòng; sử dụng /* */ cho các chú thích từ 2 dòng trở
lên Dùng /* */ ñể tạm thời comment out các ñ ạn chương trình ñể test và debug
Mỗi file nguồn, cả CPP và H, ñều phải bắ ñầu bằng một khối chú thích ñủ ñể người ñọc có
thể hiểu mục ñích của file Mẫu như sau:
/***************************************************************
* Tên/Name: Họ tên Lớp/Class: Lớp
* Project: mô tả/tên dự án (một dòng, giống nhau tại mọi file)
* Purpose: Mục ñích sử dụng của mã chương trình hoặc các khai báo trong
* file này (một vài dòng)
**************************************************************/
Mỗi lớp, hàm, phương thức phải có một khối chú thích mô tả ngắn gọn lớp, hàm, phương thức
ñó làm gì; ñối với hàm/phương thức: liệt kê tất cả các tham số, nêu rõ ý nghĩa của tham số; và
mô tảñiều kiện trước và sau của hàm/phương thức ñó
Có thể chú thích các ñ ạn code bên trong hàm, tuy nhiên chỉ nên chú thích ñủ hiểu Quá nhiều chú thích và chú thích thừa làm code trông rối Tất cả các chú thích phải ñược lùi ñầu dòng cùng ñ ạn code quanh nó
5 Quy T ắ c Thi ế t k ế
Quy T ắ c 13: Mỗi phương thức/hàm (kể cả hàm main()) không vượt quá 30 dòng tính từ dấu
mở hàm ({) tới ngoặc kết thúc hàm (}) trừ những trường hợp ngọai lệ phải ghi giải thích rõ ràng
Hạn chế việc dùng biến tòan cục
Chú ý:Nếu vi phạm các quy tắc trên, phải ghi chú rõ ràng lý do trong tài liệu chương trình Các bài tập/Project/kiểm tra sẽ bị trừñiểm nếu không tuân theo các quy ñịnh này
Trang 10LAB01: BI Ể U TH Ứ C, TÓAN T Ử C++
N ộ i Dung Chính
LAB 01: Biểu thức, tóan tử trong C++ 11
0 Mục tiêu 11
1 Yêu cầu 11
2 Kiểm tra kiến thức lý thuyết (15 phút) 11
2.1 Cho biết kết quả màn hình khi chạy ñọan code sau: 11
2.2 Cho biết kết quả màn hình khi chạy ñọan code sau: 11
2.3 Cho biết kết quả màn hình khi chạy ñọan code sau: 12
2.4 Cho biết kết quả màn hình khi chạy ñọan code sau: 12
2.5 Cho biết kết quả màn hình khi chạy ñọan code sau: 12
3 Phần Bài Tập 13
3.0 Test chương trình sau, sửa lỗi nếu có? cho biết kết quả màn hình khi chạy? 13
3.1 Test chương trình sau: 13
3.2 Tính tổng, hiệu, tích, thương 2 số nhập vào từ bàn phím 14
3.3 Biểu thức logic 14
3.4 Tính kết quả biểu thức 15
3.5 Tính kết quả biểu thức 15
3.6 Tính kết quả biểu thức 15
3.7 Phân biệt cin và getline 16
3.8 Chạy chương trình sau, giải thích kết quả 16
3.9 Tính tiền sản phẩm 17
3.10 Tính ñiểm trung bình 17
3.11 Viết chương trình chuyển ñổi từñộ C(Celsius) sang ñộ F(Fahrenheit) 17
3.12 Viết chương trình chuyển ñổi từñộ F(Fahrenheit) sang ñộ C(Celsius) 17
Trang 11LAB 01: Bi ể u th ứ c, tóan t ử trong C++
0 M ụ c tiêu
Ớ Sử dụng môi trường sọan thảo và chạy một chương trình C++ ựơn giản
Ớ Làm quen với các kiểu dữ liệu và tóan tử cơ bản của C++
Ớ Làm quen với biến và lệnh gán, ựối tượng xuất nhập: cout, cin
Ớ Hòan tất Lab01 tại lớp trong vòng 120 phút
1 Yêu c ầ u
Ớ đọc tài liệu hướng dẫn sử dụng DEV-CPP (Lab0)
Ớ Kiểm tra ựã có phần mềm DEV-CPP (C:\Dev-Cpp) trên máy tắnh của phòng lab chưa?
o Chưa có: liên hệ giảng viên hướng dẫn phòng lab ựể copy & cài ựặt
o đã có: Chạy chương trình devcpp.exe trong thư mục Dev-Cpp
Ớ Ôn lại kiến thức về hằng, biến, kiểu dữ liệu, biểu thức, tóan tử trong C++
Ớ Hiểu rõ tóan tử: +, -, *, /, %, ++, , +=, -=, *=, /=, &&, ||, !, !=, >, <, <=, >=,Ầ
Ớ độ ưu tiên của tóan tử
Ớ Biến , hằng, lệnh gán, ựối tượng xuất nhập: cout, cin
Ớ Làm trước các bài 2.1~2.5 và 3.1~3.12 trước khi vào phòng Lab Mỗi SV phải có 1 bản copy của bài Lab này
a) Ch ươ ng trình có l ỗ i khi biên d ị ch
Trang 13* Lab01b01: Hien thi thong diep "hello world!"
* Created date: dd/mm/yyyy ; Modified date:
area = radius * radius * PI; // Circle area calculation
cout << “The area is “ << area << “ with a radius of 5.\n”;
radius = 20; // Compute area with new radius
area = radius * radius * PI;
cout << “The area is “ << area << “ with a radius of 20.\n”;
Trang 14cout << "Tong hai so la " << tong << endl;
cout << "Tong hai so la " << hieu << endl;
cout << "Tong hai so la " << tich << endl;
cout << "Tong hai so la " << thuong << endl;
c Thay thế 4 dòng lệnh cout cuối bằng các dòng lệnh sau? Nhận xét?
cout << x << “ + ” << y <<” = “ << tong << endl;
cout << "i > j is " << (i > j) << endl;
cout << "i < j is " << (i < j) << endl;
cout << "i >= j is " << (i >= j) << endl;
Trang 15cout << "i <= j is " << (i <= j) << endl;
cout << "i == j is " << (i == j) << endl;
cout << "i != j is " << (i != j) << endl;
cout << "i && j is " << (i && j) << endl;
cout << "i || j is " << (i || j) << endl;
cout << " (i < 10) && (j < 10) is “ << ((i < 10) && (j < 10)) << endl;
system(“pause”);
return 0;
}
a) Chạy thử chương trình trên, nhập i=6, j=4
b) Thử lại với bỏ <<endl ở các dòng cout trên
Trang 16const int SIZE=100;
char buffer[ SIZE ];
cout << "Enter your fullname:\n“;
Trang 173.9 Tính ti ề n s ả n ph ẩ m
Nhập tên sản phẩm, số lượng và ñơn giá Tính tiền và thuế giá trị gia tăng phải trả, biết:
• tiền = số lượng * ñơn giá
• thuế giá trị gia tăng = 10% tiền
3.10 Tính ñ i ể m trung bình
Nhập ñiểm thi và hệ số 3 môn Toán, Lý, Hóa của một sinh viên Tính ñiểm trung bình của sinh viên ñó Kết quả xuất ra màn hình theo ñịnh dạng sau:
3.11 Vi ế t ch ươ ng trình chuy ể n ñổ i t ừ ñộ C(Celsius) sang ñộ F(Fahrenheit)
3.12 Vi ế t ch ươ ng trình chuy ể n ñổ i t ừ ñộ F(Fahrenheit) sang ñộ C(Celsius)
• Biết F = (9/5)*C + 32 ; C = (5/9)*(F-32)
• Chú ý sử dụng chuyển ñổi kiểu trong phép chia 5/9, 9/5
Trang 18LAB02: Selection Structure
N ộ i Dung Chính
LAB 02: Selection Structure 19
0 Mục tiêu 19
1 Yêu cầu 19
2 Kiểm tra kiến thức lý thuyết (15 phút) 19
2.1 Kết quả khi chạy ñọan code sau: 19
2.2 Kết quả khi chạy ñọan code sau: 19
2.3 Kết quả khi chạy ñọan code sau: 19
2.4 Kết quả khi chạy ñọan code sau: 19
2.5 Kết quả khi chạy ñọan code sau: 19
3 Nội dung 20
3.1 Nhập vào 1 số nguyên Và kiểm tra sốñó có chẵn không? 20
3.2 Nhập vào 2 số nguyên a, b Kiểm tra xem a có chia hết cho b không 20
3.3 Nhập vào 2 số nguyên a, b Tìm số lớn nhất, nhỏ nhất 20
3.4 Nhập vào 3 số nguyên a, b, c Tìm số lớn nhất, nhỏ nhất 20
3.5 ðiểm trung bình và xếp hạng 20
3.6 Beep 21
3.7 In số ngược 21
3.8 Tính cước taxi 21
3.9 Chương trình máy tính ñơn giản 22
3.10 Giải và biện luận phương trình bậc nhất: ax+b=0 22
3.11 Giải và biện luận phương trình bậc 2: ax2 + bx + c = 0 22
3.12 Tính tiền thuê phòng Dựa vào số ngày thuê và lọai phòng 22
3.13 Nhập vào ngày, tháng của năm hiện tại 22
3.14 ðổi chữ hoa – thường 23
3.15 Kiểm tra chữ hoa, chữ thường 23
Trang 19LAB 02: Selection Structure
0 M ụ c tiêu
• Sử dụng thành thạo cấu trúc rẽ nhánh
o If, if…else, switch
• Hòan tất Lab02 tại lớp trong vòng 90 phút
1 Yêu c ầ u
• Hiểu rõ cấu trúc lệnh if, if…else, switch
• Kiến thức tóan học cơ bản: số nguyên tố, uscln, giải phương trình
• ðối tượng cout, cin và bảng mã ASCII
• Làm trước các bài trong mục 2 và 3 trước khi vào phòng Lab Mỗi SV phải có 1 bản copy của bài Lab này
2.4 K ế t qu ả khi ch ạ y ñọ an code sau:
int main() { int x=0;
switch(x) { case 1: cout << "One" ; case 0: cout << "Zero" ; case 2: cout << "Hello" ; }
case '+' : x += y;
case '-' : x -= y;
} std::cout <<x<<y;
return 0 ; }
Trang 203 Bài T ậ p
3.1 Vi ế t ch ươ ng trình nh ậ p vào 1 s ố nguyên Và ki ể m tra s ố ñ ó có ch ẵ n không?
Giải thuật: Số chẵn là số chia hết cho 2
Mô tả: Nếu số A chia cho 2 có phần dư = 0 thì A là số chẵn
Thực hiện trong c++: (a % 2)
3.2 Vi ế t ch ươ ng trình nh ậ p vào 2 s ố nguyên a, b Ki ể m tra xem a có chia h ế t cho b
không
Giải thuật: Nhập 2 số nguyên a, b
Kiểm tra: if (a % b) ==0 printf ( Số a chia hết cho số b)
3.3 Vi ế t ch ươ ng trình Nh ậ p vào 2 s ố nguyên a, b Tìm s ố l ớ n nh ấ t, nh ỏ nh ấ t
Gợi ý: Khai báo biến max và min ñể chứa giá trị lớn nhất và nhỏ nhất tương ứng
3.4 Vi ế t ch ươ ng trình Nh ậ p vào 3 s ố nguyên a, b, c Tìm s ố l ớ n nh ấ t, nh ỏ nh ấ t
Giải thuật:
Giả sử Max = a
IF ( B > Max) Then Max = B
IF (C > Max) Then Max = C
Giả sử Min = a
IF ( Min > B) Then Min = B
IF (Min > C Then Min = C
Trang 21{ BEEP; BEEP; } else if (num == 3)
{ BEEP; BEEP; BEEP; } else if (num == 4)
{ BEEP; BEEP; BEEP; BEEP; } else if (num == 5)
{ BEEP; BEEP; BEEP; BEEP; BEEP; } else
cout <<”Invalid number!”;
Trang 22Chương trình cho phép người sử dụng nhập vào số km (bao gồm số lẻ VD: 2.5km) và in ra số
tiền phải trả
Gợi ý:
• Khai báo hằng: GIA1 = 15000; GIA2 = 13000; GIA3=…
• Chú ý: km = 1.1 sẽ tính tiền là 2km Sử dụng hàm ceil (double) thực hiện round-up value VD: ceil(4.3) = 5
3.9 Ch ươ ng trình máy tính ñơ n gi ả n
Nhập vào 2 số a, b và một phép toán p, thực hiện tính kết quả trả về dựa vào dữ liệu nhập vào Ví dụ a = 5, p = '+', b = 6, Kết quả hiển thị là 5 + 6 = 11
• Gợi ý: sử dụng thư viện tóan math: # include <math.h> tính delta sử dụng hàm: double
sqrt(double x); Căn bậc 2 của x, trả về giá trị double
3.12 Tính ti ề n thuê phòng D ự a vào s ố ngày thuê và l ọ ai phòng
• Cho biết tháng nhập có bao nhiêu ngày
• Cho biết ngày hôm sau của ngày ñã nhập là ngày nào
Trang 23• Cho biết ngày hôm trước của ngày ñã nhập là ngày nào
VD: Nếu ngày nhập là 1/12/2009 thì ngày trước ñó là 30/11/2009
Gợi ý:
Tháng 1, 3, 5, 7, 8, 10, 12: 31 ngày
Tháng: 3, 4, 6, 9, 11: 30 ngày
Tháng 2: Nhuận/Không nhuận: 29/28 ngày
Năm nhuận là (những năm chia hết cho 400) hoặc (chia hết cho 4 và không chia hết cho 100) Ví dụ
2000 là năm nhuận nhưng 2100 không phải là năm nhuận Code C++ như sau: if ( year % 400 ==0 || ( year %100 != 0 && year % 4 == 0))
3.14 ðổ i ch ữ hoa – th ườ ng
Nhập một chữ cái, nếu là chữ thường thì ñổi thành chữ hoa, ngược lại, nếu là chữ hoa thì ñổi thành chữ thường Ví dụ : nhập A in ra a, nhập b thì in ra B (Không sử dụng thư viện string)
3.15 Ki ể m tra ch ữ hoa, ch ữ th ườ ng
Nhập một ký tự bất kỳ, cho biết ký tựñó thuộc loại nào: là chữ hoa, là chữ thường, là chữ số
hay các ký tự khác (Không sử dụng thư viện string)