Khoa ðTVTHK
10
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
VAA. ðTVTHK Tài Liệu Thực Hành
Kỹ Thuật Lập Trình C++ Trang 2
LAB00: HƯỚNG DẪN CÀI ðẶT VÀ SỬ
DỤNG DEV-CPP
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ỉ: 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ỉ
• 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
VAA. ðTVTHK Tài Liệu Thực Hành
Kỹ Thuật Lập Trình C++ Trang 4
3.2 Tạo chương trình mới hoặc dự án mới
Các bước sử dụng Dev-CPP ñể tạo ra
chương trình C/C++ ñơn giản bao gồm các
bước chính như sau:
• B1. Tạo file/project
• B2. Sọan thảo mã nguồn
• B3. Biên dịch, sửa lỗi (nếu có)
• B4. Chạy thử và kiểm tra kết quả
• B5. Debug (nếu cần)
o Exit Dev-C++
Bạn cũng có thể thêm file nguồn có sẵn bằng 1 trong 2
phương pháp sau:
• Vào menu "Project" chọn "Add to Project"
Hoặc
• Nhấn phím phải chuột vào project name ở
khung bên trái và chọn "Add to Project".
Các quy tắc sọan thảo gần giống với chương
trình sọan thảo văn bản chuấn (Word,…). Một vài
tính năng như:
• Undo
• Redo
• Copy
• Paste
• Cut
• Select All
• …
Tham khảo menu Edit ñể biết chi tiết và các phím tắt trong khi
VAA. ðTVTHK Tài Liệu Thực Hành
Kỹ Thuật Lập Trình C++ Trang 6
sọan thảo
Bước 3: Biên dịch (Compile)
Sau khi nhập file nguồn xong, ñể biên dịch chúng ta thực
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
code, double-click vào lỗi ñó và contrỏ màn hình sẽ trở
a) 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
*/
# include <stdio.h>
# include <stdlib.h>
int main()
{
printf ("Hello World \n");
system(“pause”);
return 0;
}
b) 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.cpp
*/
# include <iostream.h>
int main()
{
std::cout <<"Hello World \n";
system(“pause”);
return 0;
}
QUY ƯỚC KHI VIẾT MÃ NGUỒN C/C++
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++)
x = x + 5;
Quy Tắc 6: Các dấu ‘{‘, ‘}’ ñược viết riêng trên một dòng.
Ví d
ụ
sai
Ví d
ụ
ñúng
void Swap(int &a, int &b) {
int c = a;
a = b;
b = c;
}
void Swap(int &a, int &b)
{
int c = a;
a = b;
b = c;
}
Quy Tắc 7: Các câu lệnh if, switch, while, for, do ñược viết riêng trên một ñoạn.
Ví d
ụ
ñúng
int c = a;
a = b;
b = c;
k = k * a;
x = b + c;
int c = a;
a = b;
b = c;
k = k * a;
x = b + c;
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
VAA. ðTVTHK Tài Liệu Thực Hành
Kỹ Thuật Lập Trình C++ Trang 9
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 ñoạn chương trình ñể test và debug.
Mỗi file nguồn, cả .CPP và .H, ñều phải bắt ñầ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 ñoạ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 ñoạ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.
VAA. ðTVTHK Tài Liệu Thực Hành
Kỹ Thuật Lập Trình C++ Trang 10
LAB01: 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
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 VAA. ðTVTHK Tài Liệu Thực Hành
Kỹ Thuật Lập Trình C++ Trang 11
LAB 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)
int a = 5, b = 10, c = 15, d = 0;
std::cout << (a+b || c == d);
std::cout << (c >= 6) || (a+c <= 20);
std::cout << !(b <= 12) && a % 2 == 0;
std::cout << !(a >5) || c < a+b;
return 0 ;
VAA. ðTVTHK Tài Liệu Thực Hành
Kỹ Thuật Lập Trình C++ Trang 12
}
a) Chương trình có lỗi khi biên dịch
b)
Kết quả không xác ñịnh ñược
d)
Màn hình hiển thị (ñiền vào ô trống bên)
2.3 Cho biết kết quả màn hình khi chạy ñọan code sau:
int main()
{
int x=5, y=-10, a=4, b=2;
int z = x++ - y * b / a;
cout << z ;
return 0;
}
a) Chương trình có lỗi khi biên dịch
b)
Kết quả không xác ñịnh ñược
e)
Màn hình hiển thị (ñiền vào ô trống bên)
Màn hình hiển thị (ñiền vào ô trống bên)VAA. ðTVTHK Tài Liệu Thực Hành
Kỹ Thuật Lập Trình C++ Trang 13
3. Phần Bài Tập
LƯU Ý QUAN TRỌNG:
• Các ñọan mã nguồn trong các bài sau có thể có lỗi khi biên dịch. Hãy sửa lại và
thêm các file header phù hợp nếu cần.
• Mỗi bài tóan sau, ghi chú theo mẫu sau:
/****************************************************************
* Lab 01, Bai 01
* Tac gia: Nguyen X , MSSV: 123456789
* Lop: XX, Khoa Y.
* Lab01b01: Hien thi thong diep "hello world!"
* Created date: dd/mm/yyyy ; Modified date:
*****************************************************************/
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?
#include <iostream.h>
# define MAX 4.0
int main()
{
int a = 10, b= 5
double c = 4.0, f = 0.0;
f = MAX + c * (b / a);
cout << f;
system(“pause”);
return 0 ;
}
tong = x + y ;
hieu = x – y ;
tich = x * y ;
thuong = x / y ;
cout << "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;
}
a. Chạy thử chương trình trên, nhập giá trị x, y như bảng sau, cho biết kết quả và nhận
xét? Sửa lại code ñể chương trình chạy ñúng?
b. Giới hạn của x, y ñể kết quả của các phép tính vẫn còn ñúng?
x y x+y x-y x*y x/y
100 100
2000 2000
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;
…
3.3 Biểu thức logic
#include <iostream>
using namespace std;
int main()
{
int i , j;
cout << "Enter an integer: ";
cin >> i;
cout << "Enter another integer: ";
cin >> j;
cout << "i > j is " << (i > j) << endl;
cout << "i < j is " << (i < j) << endl;
f) y = a + b
g) y = ++a + b++
h) y = a++ + b
i) y = a + b
j) y = a + b
k) y= ++a*3
3.6 Tính kết quả biểu thức
Xác ñịnh giá trị của những biểu thức sau, viết chương trình kiểm chứng lại kết quả.
a) i=3; j=4;
b) i=++j;
c) i=j++;
d) i++;
e) i=++i+5;
f) i=i+ ++5;
g) ((i>5) && (j<=6));
VAA. ðTVTHK Tài Liệu Thực Hành
Kỹ Thuật Lập Trình C++ Trang 16
h) ((i!=i) || (j==6));
i) ( !(i>10));
j) (! ((i/6==3) && (j<8)));
k) ((i>11) && ((j<15) || (i>4))));
l) k= i+j%8;
m) k=i%3+4-2*j/5;
n) k=(i+j)/3*2%8*100;
o) k= ++i+j++;
p) k=i*8*3*(j%7);
q) k=i+j/3-2*++j/19;
r) k=++(i++ +j++);
3.7 Phân biệt cin và getline
#include <iostream>
Kỹ Thuật Lập Trình C++ Trang 17
3.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
Toan: 9.3
Ly: 7.5
VAA. ðTVTHK Tài Liệu Thực Hành
Kỹ Thuật Lập Trình C++ Trang 18
LAB02: Selection Structure
Nội Dung Chính
LAB 02: Selection Structure 19
0. Mục tiêu 19
1. Yêu cầu 19
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
VAA. ðTVTHK Tài Liệu Thực Hành
Kỹ Thuật Lập Trình C++ Trang 19
LAB 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
return 0;
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" ;
}
return 0;
}
2.5 Kết quả khi chạy ñọan code sau:
# include <iostream>
int main() {
int x = 5, y = x++;
char op = '*';
switch (op) {
default : x += 1;
case '+' : x += y;
case '-' : x -= y;
}
std::cout <<x<<y;
return 0 ;
}
VAA. ðTVTHK Tài Liệu Thực Hành
Kỹ Thuật Lập Trình C++ Trang 20
3. 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?
60 <= D < 70
E < 60
Gợi ý: Biến average chứa ñiểm trung bình của SV. Mã nguồn như sau:
if (average >= 90)
grade = 'A';
else if (average >= 80)
grade = 'B';
else if (average >= 70)
grade = 'C';
else if (average >= 60)
grade = 'D';
else
grade = 'E';
VAA. ðTVTHK Tài Liệu Thực Hành
Kỹ Thuật Lập Trình C++ Trang 21
3.6 Beep
// BEEP : ‘\x07’
#include <iostream.h>
#define BEEP cout << “\a \n”
int main()
{
int num;
cout << “Please enter a number “;
cin >> num;
if (num == 1)
{ BEEP; }
else if (num == 2)
{ BEEP; BEEP; }
else if (num == 3)
{ BEEP; BEEP; BEEP; }
VAA. ðTVTHK Tài Liệu Thực Hành
Kỹ Thuật Lập Trình C++ Trang 22
Chươ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 ý:
• Phép tóan p: +, -, *, /
• Trường hợp phép chia: nhớ kiểm tra (≠0)
3.10 Giải và biện luận phương trình bậc nhất: ax+b=0
3.11 Giải và biện luận phương trình bậc 2: ax2 + bx + c = 0
• 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
Lọai A: 250 /ngày
Lọai B: 200 /ngày
Lọai C: 150 /ngày
Nếu số ngày thuê nhiều hơn 10 ngày thì giảm giá % trên tổng số tiền như sau: A: 10%,
B,C: 5%
Chương trình cho phép nhập số ngày thuê, lọai phòng và in ra giá tiền phải trả.
3.13 Nhập vào ngày, tháng của năm hiện tại.
Viết chương trình thực hiện:
• Kiểm tra tính hợp lệ ngày, tháng nhập.
• Cho biết tháng nhập có bao nhiêu ngày.
0. Mục tiêu 25
1. Yêu cầu trước khi vào buổi thực hành này 25
2. Kiểm tra kiến thức lý thuyết (3 phút/câu) 25
2.1 Kết quả khi chạy ñọan code sau: 25
2.2 Kết quả khi chạy ñọan code sau: 25
2.3 Kết quả khi chạy ñọan code sau: 25
2.4 Kết quả khi chạy ñọan code sau: 25
2.5 Kết quả khi chạy ñọan code sau: 25
2.6 Kết quả khi chạy ñọan code sau: 26
3. Chương trình 27
3.1 Hiển thị số nguyên từ 1 ñến 1000 chia hết cho 2 và 3 27
3.2 Xác ñịnh kết quả của ñọan code sau, giải thích? 27
3.3 Xác ñịnh kết quả của ñọan code sau? Viết chương trình kiểm tra lại kết quả? 27
3.4 Tính giá trị pi 28
3.5 Tính giá trị e 28
o do…while
• Lệnh break, continue, …
• Hòan tất Lab03 tại lớp trong vòng 120 phút
1. Yêu cầu trước khi vào buổi thực hành này
• Hòan thành và hiểu rõ Lab01, Lab02
• Nắm vững cú pháp lặp: for, while, do-while
• Kiến thức tóan học: số nguyên tố, số chính phương, số hòan hảo, USCLN, …
• 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. Kiểm tra kiến thức lý thuyết (3 phút/câu)
2.1 Kết quả khi chạy ñọan code sau:
#include <iostream>
int main ()
{
int i=1, sum=0, N=6;
while (i <= N)
{
sum += i;
i++;
}
std::cout << sum <<i;
return 0;
}
2.2 Kết quả khi chạy ñọan code sau:
#include <iostream>
int main ()
{
int i=1, j=10;
for (i=0; i<=j; i+=2)
std::cout << i ;
{