Một trong những ngôn ngữ lập trình được sử dụng là C++.. Những kiến thức về lập trình được sử dụng trong hầu hết các môn học của ngành Công Nghệ Thông Tin sau này.. Biết cách tạo giải th
Trang 1- Lý thuyết: 2 tín chỉ
- Thực hành: 2 tín chỉ
Trang 2Mục Đích, Yêu Cầu Môn Học
cách lập trình trên máy tính Một trong những ngôn ngữ lập trình được sử dụng là C++ Đây là môn học được xem
là nền tảng trong lập trình Những kiến thức về lập trình được sử dụng trong hầu hết các môn học của ngành Công Nghệ Thông Tin sau này.
trình được những bài toán cơ bản về tính toán Biết cách tạo giải thuật, chuyển thành chương trình từ bài toán
cụ thể và sử dụng thành thạo ngôn ngữ C++ trong lập trình cấu trúc.
Trang 3Tài Liệu Học Tập
Introduction to Computing, Prentice
Hall 2002, Third Edition.
Program, Prentice Hall, New Jersey,
2003, Fourth Edition.
Professional C++, Wiley Publishing,
2005.
Trang 4Chương 1
Trang 7chương trình nhằm điều khiển máy tính làm việc.
Trang 8chương trình nguồn thành chương
trình nguồn.
Trang 9Chương Trình C++
// h01_01.cpp // Chương trình đầu tiên trong C++
#include <iostream.h>
int main() {
cout << "Welcome to C++!\n";
return 0; // cho biết chương trình
// kết thúc thành công }
Chú thích
Chỉ dẫn biên dịch
Phần chính của chương trình chứa các lệnh C++
Trang 10Chương Trình C++
int main() {
cout << "Welcome to C++!\n"; return 0;
}
Xuất chuỗi thông báo
Trả trị 0 cho hệ điều hành - cho biết
chương trình kết thúc thành công
Trang 11ThS.GVC Tô Oai Hùng 11
Các Bước Giải Quyết Bài Toán
Các bước trong phát triển phần mềm gồm:
Trang 12Vấn Đề
Trang 14tượng phần mềm nào chưa được khai báo, thêm các lệnh khai báo để chỉ định kiểu và tên cho đối tượng đó.
Trang 15Viết Mã C++
/* h01_02.cpp: Tính trọng lượng quả cầu.
Nhập: Bán kinh (foot) và tỷ trọng (pound/cubic foot) quả cầu
Xuất: Trọng lượng quả cầu (pound) */
#include <iostream.h> // cin , cout,
// << , >>
#include <math.h> // pow() int main() // hàm main() rỗng {
return 0;
}
Trang 16<< weight << " pound.\n";
return 0;
}
Trang 17Kiểm Tra, Thực Thi,
Trang 18Kiểm Tra, Thực Thi,
Phát Hiện Lỗi
(lỗi thời gian thực thi).
Trang 19Lỗi Cú Pháp
double radius
thông báo lỗi để người lập trình xác định vị trí và sửa lại chương trình nguồn.
Trang 20Lỗi Thời Gian Thực Thi
chương trình thực thi.
dừng.
bất kỳ lỗi nào xảy ra.
Trang 21Lỗi Logic
thi nhưng cho kết quả không đúng.
bằng tay rồi so sánh với kết quả của chương trình.
phức tạp của chương trình càng tăng:
lỗi logic.
Trang 22Bảo Trì
thường chỉ chạy vài lần.
Trang 23Xuất: Trọng lượng quả cầu (pound và tấn)
*/
#include <iostream.h>
#include <math.h>
int main() {
const double PI = 3.14159;
Trang 24cout <<"\n Trọng lượng quả cầu xấp xỉ "
<< weight << " pound, hay "
<< weight /2000.0 << " tấn.\n"; return 0;
}
Trang 25Kiểm Tra Lại
Trang 26Bài Tập Tại Lớp
Thành lập mỗi nhóm gồm hai người
Trang 27Vấn Đề
nối cáp (đồng trục) máy tính cho các phòng làm việc:
Trang 28Giải Thuật và Viết Mã Lệnh
thiết để mô tả giải thuật của vấn đề đã cho.
chương trình.
Trang 29Kiểm Tra, Thực Thi,
Trang 30Chương 2
Trang 31Mục Tiêu
Trang 32Vấn Đề
vụ sau:
mỗi giờ.
Trang 33Thực Hiện
Mã số: 3323 Lương = $259.875
Trang 34Giải Thuật
pay = hours * HOURLY_WAGE
Trang 35Viết Mã, Thực Thi và Kiểm Tra
mã lệnh
tượng chưa được khai báo.
Trang 36Các Kiểu Dữ Liệu Cơ Bản
- int
- short , long , unsigned .
- float , double , long double .
- char .
sai):
- int / unsigned hay
Trang 37ThS.GVC Tô Oai Hùng 8
từ nhớ của phần cứng:
trong chương trình sẽ khác nhau trên các máy tính khác nhau.
- Từ -32768 đến 32767 .
Trang 38gấp đôi.
- unsigned int (kích thước phụ
thuộc vào máy tính).
- unsigned short (16 bit): Từ 0 đến
65535 .
- unsigned long (32 bit): Từ 0 đến
4294967295 .
Trang 40ThS.GVC Tô Oai Hùng 11
58 10 = 0000000000111010 2
unsigned thì tất cả 16 bit được dùng
Trang 41Biểu Diễn Số Nguyên
diễn trong máy tính theo dạng bù hai
-58 10 = 1111111111000110 2
Trang 42ThS.GVC Tô Oai Hùng 13
0000000000000000 2 = 0 10
0000000000000001 2 = 1 10
0111111111111111 2 = 32767 10
1000000000000000 2 = -32768 10
1000000000000001 2 = -32767 10
1111111111111111 2 = -1 10
Các giá trị dương
Các giá trị âm
Trang 43Số Nguyên Không Dấu
trị dương biểu diễn được tăng gấp đôi
0000000000000000 2 = 0 10
0000000000000001 2 = 1 10
0000000000000010 2 = 2 10
1111111111111110 2 = 65534 10
1111111111111111 2 = 65535 10
Trang 44So Sánh int với unsigned
unsigned .
Trang 45Số Thực
- float : Là một giá trị 32 bit (4 byte).
- double : Là một giá trị 64 bit (8 byte).
- long double : Là một giá trị 80 bit
Trang 47diễn theo dạng dấu chấm động gồm:
+ 1.23 . 10 – 4
Trang 48Biểu Diễn Số Thực
chuẩn hoá theo chuẩn IEEE để biểu diễn chúng theo một cách duy nhất.
Trang 49Biểu Diễn Số Thực
có dạng:
số mũ (8 bit)
dấu
(1 bit) Phần định trị (Các bit bên phải - 23 bit
dấu chấm nhị phân của phần định trị)
Trang 51Biểu Diễn Số Thực
có dạng:
dấu (1 bit)
số mũ (11 bit)
Phần định trị - 52 bit (Các bit bên phải dấu chấm nhị phân của
phần định trị)
Trang 53Ký Tự
biệt:
bằng giá trị nguyên một byte.
đơn.
- Ví dụ: 'X', '7', '>', 'e'
Trang 54Ký Tự
Trang 56So Sánh Kiểu Ký Tự và Chuỗi
phân trong máy tính
Trang 57So Sánh Kiểu Ký Tự và Chuỗi
Trang 58Kiểu Luận Lý
unsigned được dùng làm kiểu luận lý
unsigned thì chỉ có hai giá trị: đúng và sai .
Trang 59ThS.GVC Tô Oai Hùng 30
Danh Hiệu
mềm như tên biến, hằng, hàm, …
• Đề nghị
Trang 60Danh Hiệu
- Ví dụ, firstName là danh hiệu khác
Trang 61ThS.GVC Tô Oai Hùng 32
Các Loại Đối Tượng
Trang 62tên biến.
trình mà giá trị của nó có thể thay đổi.
Trang 63double GPA = 3.25, credits;
char letterGrade = ‘A’;
int ok,
done = 0; // false
Trang 64hours rate ?
37.5
hours
Trang 66Hằng Tượng Trưng
trị của nó không đổi:
const double HOURLY_WAGE = 6.75;
- const là từ khoá.
- double là kiểu dữ liệu.
- HOURLY_WAGE là tên hằng (nên viết
Trang 69Chương 4
CẤU TRÚC LỰA CHỌN
Trang 70Mục Tiêu
hiện sự lựa chọn trong nhiều khả năng.
thiết kế các mạch logic máy tính.
Trang 71Các Cấu Trúc Điều Khiển
dưới ba dạng cấu trúc điều khiển:
if, if-else, switch
for, while, do-while
Trang 73Giải Thuật
nhập vào ba số nguyên.
Trang 74Viết Mã, Thực Thi và Kiểm Tra
main() rỗng.
mã lệnh:
Trang 77Lưu Ý
max = x;
if(max < y) ;
max = y;
quả sai.
Trang 80Viết Mã, Thực Thi và Kiểm Tra
Trang 81Cú Pháp và Lưu Đồ
y Lệnh if-else : if(boolean_exp) statement 1
else statement 2
y Nếu boolean_exp là true thì statement 1 được thực hiện Ngược
Trang 82Lệnh if-else Lồng Nhau
if(boolean_exp 1 )
statement 1 else
if(boolean_exp 2 ) statement 2
else if …
Trang 84Lệnh if-else Lồng Nhau
Trang 85Sự Kết Hợp Của else Với if
if(x >= 0) if(y >= 0)
z = sqrt (x) + sqrt(y);
else cerr << "Không tính được!!!";
được kết hợp
Trong lệnh if-else lồng nhau, mỗi
phần else sẽ được kết hợp với mỗi
phần if gần nhất trước đó chưa
được kết hợp
Trang 86Nhầm Lẫn Giữa = và ==
1 true và false trong C++:
true .
Trang 87Nhầm Lẫn Giữa = và ==
Trang 88Biểu Thức Điều Kiện
condition ? exp 1 : exp 2
Trang 91Giải Thuật
result .
vào result .
- …
Trang 92So Sánh switch Với if-else
switch thay cho if-else .
Trang 93Viết Mã, Thực Thi và Kiểm Tra
Trang 94Các từ khoá
Biểu thức int hay char
Biểu thức int hay char
Mỗi case_list là một hay
được kết thúc bằng lệnh break hay return
Trang 95Lưu Đồ Của Lệnh switch
Trang 96Hành Vi
ConstantValue i thì điều khiển sẽ
nhảy đến statement_list i sau ConstantValue i
switch cho đến khi:
- lệnh break được thực thi, hay
Chú ý sự sử dụng lệnh
Trang 97Hành Vi
4 Nếu expression không so trùng
statement_list n+1 trong mệnh đề default được thực hiện Nếu
biểu thức nguyên.
Trang 98ThS.GVC Tô Oai Hùng 30
Lưu Ý
của switch là một giá trị hợp lệ nhưng
không có hành động nào xảy ra cho giá trị đó
Trang 99Khi Nào Dùng Lệnh switch
if-else lồng nhau khi:
hiện.
Trang 100ThS.GVC Tô Oai Hùng 32
học kỳ (thang điểm 100) dựa vào ba loại điểm:
tính hạng của sinh viên Biết rằng, nếu:
Trang 101Để xếp hạng của sinh viên : Nhập điểm bài làm ở nhà: 80
Nhập điểm kiểm tra giữa kỳ: 80
Nhập điểm thi cuối kỳ: 80
Điểm trung bình cuối kỳ = 80, hạng = B
Thực hiện
Trang 102vào các biến homework , test , và exam .
final =
HOMEWORK_WEIGHT * homework + TEST_WEIGHT * test +
EXAM_WEIGHT * exam
final .
Trang 103Viết Mã, Thực Thi và Kiểm Tra
10.
Trang 104Biểu Thức Logic và
trong sự phát minh máy tính, đó là các mạch số Giả sử cần thiết kế mạch cộng bán phần dựa trên 3 loại cổng logic sau:
Trang 106Biểu Thức Logic và
- Số nhớ C = 1 khi digit1 và digit2 là 1 .
- Khi C = 1 thì tổng S = 0 .
HOẶC của digit1 và digit2 .
y Vậy:
C = digit1 && digit2
S = !C && (digit1 || digit2)
Trang 107Biểu Thức Logic và
cộng bán phần (half adder circuit).
Trang 108Chương 3
Trang 111Giải Thuật
dụng nhập khối lượng.
vào biến mass.
Trang 112Viết Mã, Thực Thi và Kiểm Tra
y Figure 3.1 Xem mã nguồn
y Sample run Ví dụ thực thi, dữ liệu thử bao gồm:
Trang 113Biểu Thức
toán tử được kết hợp nhau để tạo ra
một giá trị được gọi là biểu thức.
double energy = mass * SPEED_OF_
LIGHT * SPEED_OF_LIGHT;
Trang 115Phép Chia
double sẽ cho kết quả khác nhau Ví dụ:
hiện.
Trang 116của phép chia:
Trang 117Độ Ưu Tiên Của Toán Tử
Trang 118Độ Ưu Tiên Của Toán Tử
* , / , % + , -
Trang 119C++ là kết hợp trái.
Trang 120Chuyển Đổi Kiểu Dữ Liệu
số thực trong cùng biểu thức Ví dụ:
2 + 3.0 → 5.0
thành những giá trị rộng hơn, được gọi
là chuyển đổi kiểu ngầm định:
thực.
Trang 121Chuyển Đổi Kiểu Dữ Liệu
trị từ một kiểu đến kiểu khác.
type (expression)
hay (type) expression
liệu Ví dụ:
double x = 3.456;
cout << (int) x;
Giá trị 3 hiển thị?
Trang 122Biểu Thức Luận Lý
unsigned , nó có hai giá trị đúng hay sai
Trang 123Các Phép Toán Quan Hệ
x < 5.2
b * b >= 4.0 * a * c number == 500
‘a’ < ‘b’
Trang 124Biểu Thức Luận Lý Kết Hợp
Trang 125Biểu Thức Luận Lý Kết Hợp
thể được xây dựng bằng cách sử dụng các toán tử luận lý:
a && b // true iff cả hai a và b là true
a || b // true iff a hay b là true
!a // true iff a là false
cin >> score;
assert(0 <= score && score <= 100);
Trang 126Cách Tính Tắt
(n != 0) && (x < 1.0 / n)
không xảy ra.
Trang 127Tiền Điều Kiện
của nó bị ràng buộc trong điều kiện nào đó:
Trang 128Cơ Chế assert()
#include <iostream.h>
#include <assert.h>
int main() {
Trang 130Biểu Thức Gán
khi thực thi lệnh gán.
Trang 131( 0 ).
Trang 132var = var Δ value;
var Δ= value;
Trang 134Phép Toán Tăng Và Giảm
Trang 135Phép Toán Tăng Trước
cho giá trị toán hạng của nó được tăng
Trang 136Phép Toán Tăng Sau
khi giá trị đó được sử dụng trong biểu thức:
Trang 137Phép Toán Tăng Trước Và Sau
sử dụng trong câu lệnh riêng biệt:
int y = 0, x = 0;
++x; // x = 1 y++; // y = 1
trong phép toán tăng (hay giảm) là như nhau.
Trang 138Chuyển Biểu Thức Thành Câu Lệnh
sau sẽ trở thành câu lệnh:
x = y + z;
'A';
cos(z); Các câu lệnh
Trang 139Luồng Nhập - Xuất
nhập/xuất trong ngôn ngữ:
istream và ostream
Trang 140kiểu của biến Vậy, nên xuất thông báo cho người sử dụng biết trước khi nhập
Ví dụ:
cout << “Nhập số thực: “;
double x;
cin >> x;
Trang 141Biểu Thức Xuất
output_stream << expression;
cout << "The sum = " << sum;
hay sự kết hợp của chúng bằng toán tử:
cout << "Sum = " << v1 + v2 + v3;
Trang 142Định Dạng Xuất
y ios::showpoint : Hiển thị dấu chấm
thập phân và phần lẻ (kể cả 0) đối với
số thực Mặc định là không hiển thị phần lẻ nếu nó là không.
y ios::fixed : Sử dụng ký pháp dấu
chấm cố định cho các giá trị thực.
y ios::scientific : Sử dụng ký pháp
khoa học cho các giá trị thực.
y ios::left (hay ios::right ): Hiển thị
giá trị được canh trái (hay canh phải – mặc định) trong một trường.
y setprecision(p) : Hiển thị p số lẻ cho
tất cả giá trị thực ở những lần xuất sau
#include <iostream.h>
#include <iomanip.h>
Trang 143Bài Tập Tại Lớp
Vấn đề:
phối hàng hoá Mỗi chuyến đi, tài xế ghi lại số dặm đã vận chuyển, số gallon nhiên liệu đã sử dụng, giá tiền mỗi gallon, và chi phí vận hành cho mỗi dặm.
dặm đi được cho mỗi gallon nhiên liệu, tổng chi phí vận chuyển, chi phí vận chuyển cho mỗi dặm trong mỗi chuyến đi.
các số liệu này.
Trang 144Thực Hiện
Ghi nhận số liệu:
Số dặm đã vận chuyển: 99
Số gallon nhiêu liệu đã dùng: 99.99
Giá tiền mỗi gallon: 99.99
Trang 145Giải Thuật
gallonsOfFuel, unitFuelCost và unitOperatingCost .
Trang 147Viết Mã, Thực Thi Và Kiểm Tra
y Figure 3.2 : Xem mã nguồn.
Trang 148Chương 6
HÀM (Phần 1)
Trang 150y Viết chương trình chuyển đổi nhiệt độ
từ thang nhiệt Fahrenheit thành Celsius Biết:
Trang 151y Nhắc người sử dụng nhập nhiệt độ Fahrenheit.
Trang 152y Xem mã nguồn, Figure 6.1
Trang 153y Sự định nghĩa hàm (thay vì viết mã lệnh
từ Fahrenheit thành Celsius làm cho các hàm hay các chương trình khác có thể tái sử dụng nó.
trong chương trình sử dụng các mã lệnh này.
Trang 154y Hình 6.2 xuất cùng kết quả với Hình 6.1
4
5 6
7 8
Trang 155y Định nghĩa hàm:
return_type name
(parameter-Declarations) {
statementList }
Trang 156const double PI = 3.14159;
double area(double length,
double width) {
double halfLength = length/2.0,
halfWidth = width/2.0;
return PI * halfLength *
halfWidth;
} double circumference(double
length, double width) {
Trang 157double halfLength = length/2.0,
halfWidth = width/2.0;
return 2.0 * PI * sqrt((pow(halfLength, 2.0) +
pow(halfWidth, 2.0))/2.0);
}
Trang 158y Dùng để khai báo hàm:
trước bất kỳ lời gọi nào hay định nghĩa hàm
hàm đó.
return_type
name(parameter-Declarations);
Trang 159cout << “ Tính diện tích và chu vi
của Ellipse\n“
<< “ Nhập chiều dài và rộng: “;
double length, width;
cin >> length >> width;
Trang 161y Lời gọi hàm bao gồm tên hàm và những giá trị mà hàm bị gọi cần đến, được gọi là đối số.
double tempCelsius = fahrToCelsius(tempFahrenheit);
Trang 162y Các bước để thiết kế chương trình có thể được sử dụng để thiết kế hàm:
Hành vi của hàm gồm:
Nhận các giá trị từ hàm gọi Trả về giá trị cho hàm gọi
Trang 163y Là các biến của hàm bị gọi mà hàm gọi
có thể chỉ định giá trị cho nó.
dấu ngoặc đơn trong phần định nghĩa hàm.
double fahrToCelsius(double
tempFahr) {
return (tempFahr - 32.0) / 1.8;
}
Trang 164y Khi một hàm được gọi:
được gọi là đối số.
double tempCelsius = fahrToCelsius(212)
double fahrToCelsius(double tempFahr){
return (tempFahr - 32.0) / 1.8;
trị tham số của nó
212
Trang 166y Đặc tả hàm: Xác định phần đầu của hàm gồm:
Trang 167y Để kiểm tra hàm cần phải có chương trình điều khiển:
Trang 168y Chương trình ví dụ của chúng ta chỉ
các biến bên trong nó gọi là biến cục bộ:
thoát khỏi hàm (hay khối) chứa nó.
int maximum(int x, int y, int z) {
int max = x;
if(y > max ) max = y;
if(z > max ) max = z;
return max ; }
Trang 169y Tham số cũng được xem là biến cục bộ.
bộ và tham số có cùng tên là lỗi cú pháp
Trang 170y Được tạo ra bằng cách đặt khai báo biến bên ngoài tất cả định nghĩa hàm
#include <iostream.h>
int x = 1;// x là biến toàn cục
int main() {
//
}
trong suốt thời gian thực thi chương trình.
Trang 171y Nhiều chương trình có các tác vụ thường được lặp lại:
Trang 172y Cần phân biệt lời gọi hàm trả trị với lời gọi hàm không trả trị.
double tempCelsius = fahrToCelsius(tempFahrenheit);
printAsMoney(payment-purchase);
Trang 173y Các hàm toán học trong tập tin
<math.h>
ceil(x) ceil(9.2) là 10.0
ceil (–9.8) là –9.0 cos(x) cos(0.0) là 1.0
cos(1.570796) là 0.0 exp(x) exp(1.0) là 2.71828
exp(2.0) là 7.38906 fabs(x) fabs(5.1) là 5.1
fabs(0.0) là 0.0 fabs(–8.76) là 8.76
Trang 174floor(x) floor(9.2) là 9.0
floor(–9.8) là –10.0
fmod(x, y) fmod(13.657, 2.333)
là 1.992 log(x) log(2.718282) là 1.0
log(7.389056) là 2.0 log10(x) log10(10.0) là 1.0
log10(100.0) là 2.0 pow(x, y) pow(2, 7) là 128
pow(9, 5) là 3
Trang 175sin(x) sin(0.0) là 0
sin(1.570796) là 1.0
sqrt(x) sqrt(900.0) là 30.0
sqrt(9.0) là 3.0 tan(x) tan(0.0) là 0
tan(0.785398) là 1.0
Trang 176y Các hàm xử lý ký tự trong <ctype.h>
int isdigit(int c) : Trả về true
int isalpha(int c) : Trả về true
Trang 177int isupper(int c) : Trả về true
Trang 178Thành lập mỗi nhóm gồm hai người
Trang 179y Định nghĩa một hàm gồm chức năng sau:
các thao tác cộng, trừ, nhân, chia,
Trang 180Chương 7
HÀM (Phần 2)
Trang 181y Mở rộng giới thiệu hàm trong chương 6
inline
y Hàm template
Trang 182y Xét phép chia nguyên:
mỗi hàm chỉ có thể trả về chỉ một giá trị.
được gọi là tham trị (value parameter),
nó là bản sao của các đối số của nó.
hàm bị gọi, chính là thay đổi giá trị của bản sao chứ không phải đối số thực của nó.
Trang 183y Tham số tham chiếu:
- Dấu & được đặt sau kiểu của tham số nhưng trước tên của nó.
(alias) cho đối số tương ứng của nó.
chiếu sẽ thay đổi giá trị của đối số tương ứng của nó