tài liệu C++(3)

- 0 / 0
(Tài liệu chưa được thẩm định)
Nguồn:
Người gửi: Lê Văn Thuận (trang riêng)
Ngày gửi: 00h:21' 09-04-2024
Dung lượng: 682.0 KB
Số lượt tải: 51
Nguồn:
Người gửi: Lê Văn Thuận (trang riêng)
Ngày gửi: 00h:21' 09-04-2024
Dung lượng: 682.0 KB
Số lượt tải: 51
Số lượt thích:
0 người
.c
om
ng
th
an
co
Ngôn ngữ lập trình C++
cu
u
du
o
ng
Chương 2 – Các kiểu dữ liệu cơ bản
Các cấu trúc điều khiển
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Tài liệu đọc thêm
.c
om
• Tài liệu đọc thêm cho chương này:
cu
u
du
o
ng
th
an
co
ng
– Section 2.1. Complete C++ Language Tutorial (CCLT)
– Day 7. Teach Yourself C++ in 21 Days (TY21)
– Namespace (Sec.5-2.CCLT) (Không bắt buộc)
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Chương 2 – Kiểu dữ liệu và phép toán cơ bản
Cấu trúc điều khiển và cấu trúc chương trình
.c
om
Đề mục
Các kiểu dữ liệu cơ bản
2.2
Các phép gán tắt, phép tăng, phép giảm
2.3
Các phép toán logic
2.4
Thuật toán, mã giả, điều khiển của chương trình, sơ đồ khối
2.5
Sơ lược về các cấu trúc điều khiển
2.6
Cấu trúc lựa chọn if, if/else
2.7
Phép toán lựa chọn 3 ngôi
2.8
Cấu trúc lặp while
2.9
Thiết lập thuật toán
2.10
Điều khiển lặp bằng con đếm và giá trị canh
cu
u
du
o
ng
th
an
co
ng
2.1
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Chương 2 – Kiểu dữ liệu và phép toán cơ bản
Cấu trúc điều khiển và cấu trúc chương trình
.c
om
Đề mục (tiếp theo)
Các cấu trúc lồng nhau
2.12
Vòng lặp for
2.13
Cấu trúc đa lựa chọn switch
2.14
Vòng lặp do/while
2.15
break và continue
2.16
Sơ lược về lập trình cấu trúc
cu
u
du
o
ng
th
an
co
ng
2.11
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
2.1 Các kiểu dữ liệu cơ bản
cu
u
du
o
ng
th
an
co
ng
.c
om
char
ký tự hoặc số nguyên 8 bit
short
số nguyên 16 bit
long
số nguyên 32 bit
int
số nguyên độ dài bằng 1 word (16 bit
hoặc 32 bit)
float
số chấm động 4 byte
double
số chấm động 8 byte
long double số chấm động 10 byte
bool
giá trị Boolean, true hoặc false
wchar_t
ký tự 2 byte, lưu bảng chữ cái quốc tế
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
2.2 Các phép toán cơ bản
x = 5;
.c
om
• phép gán – assignation (=)
//x: lvalue, 5: rvalue
ng
– là biểu thức có giá trị là giá trị được gán
cu
u
du
o
ng
th
an
co
• các phép toán số học - Arithmetic operators
(+, -, *, /, %)
• các phép gán kép - Compound assignation
operators
(+=, -=, *=, /=, %=, >>=, <<=, &=, ^=, |=)
• phép tăng và phép giảm (++, --)
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
2.2 Các phép toán cơ bản
an
co
ng
.c
om
• các phép quan hệ - relational operators
( ==, !=, >, <, >=, <= )
• các phép toán logic - Logic operators ( !, &&, || )
• phép điều kiện - Conditional operator ( ? ).
th
(7 == 5 ? 4 : 3) cho kết quả 3 do 7 khác 5.
cu
u
du
o
ng
• các toán tử bit - Bitwise Operators
( &, |, ^, ~, <<, >> ).
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
2.2 Các phép gán tắt
.c
om
• Các biểu thức gán tắt - Assignment expression
abbreviations
ng
– Phép gán cộng
co
c = c + 3; viết tắt thành c += 3;
an
• Các lệnh có dạng
th
variable = variable operator expression;
ng
có thể được viết lại thành
du
o
variable operator= expression;
• Các phép gán khác
4
5
3
9
u
-=
*=
/=
%=
cu
d
e
f
g
CuuDuongThanCong.com
(d
(e
(f
(g
=
=
=
=
d
e
f
g
*
/
%
4)
5)
3)
9)
https://fb.com/tailieudientucntt
• Phép tăng - Increment operator (++)
– có thể được dùng thay cho c += 1
co
– có thể được dùng thay cho c -= 1
ng
• Phép giảm - Decrement operator (--)
.c
om
2.2 Các phép tăng và giảm
an
• Tăng/giảm trước – Preincrement/Predecrement
th
• ++c hoặc --c
du
o
ng
• Giá trị của biến bị thay đổi, sau đó biểu thức chứa nó được tính giá trị.
• Biểu thức có giá trị là giá trị của biến sau khi tăng/giảm
• Tăng/giảm sau - Postincrement/Predecrement
cu
u
• c++ hoặc c--
• Biểu thức chứa biến được thực hiện, sau đó biến được thay đổi.
• Biểu thức có giá trị là giá trị của biến trước khi tăng/giảm
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
2.2 Các phép tăng và giảm
.c
om
• Ví dụ: nếu c = 5
– cout << ++c;
• c nhận giá trị 6, rồi được in ra
ng
– cout << c++;
th
an
co
• in giá trị 5 (cout được chạy trước phép tăng).
• sau đó, c nhận giá trị 6
ng
• Khi biến không nằm trong biểu thức
du
o
– Tăng trước và tăng sau có kết quả như nhau
cu
và
u
++c;
cout << c;
c++;
cout << c;
là như nhau
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
// Fig. 2.14: fig02_14.cpp
// Preincrementing and postincrementing.
#include
using std::cout;
using std::endl;
an
th
assign 5 to c
print 5
print 5 then postincrement
print 6
5
5
6
5
6
6
du
o
ng
// demonstrate postincrement
c = 5;
//
cout << c << endl;
//
cout << c++ << endl;
//
cout << c << endl << endl; //
co
ng
// function main begins program execution
int main()
{
int c;
// declare variable
.c
om
fig02_14.cpp
(1 of 2)
u
// demonstrate preincrement
c = 5;
//
cout << c << endl;
//
cout << ++c << endl;
//
cout << c << endl;
//
cu
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
return 0;
assign 5 to c
print 5
preincrement then print 6
print 6
// indicate successful termination
} // end function main
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
2.3 Các phép toán logic
ng
.c
om
• được dùng làm điều kiện trong các vòng lặp và
lệnh if
• && (logical AND)
co
– true nếu cả hai điều kiện là true
du
o
• || (logical OR)
ng
th
an
if ( gender == 1 && age >= 65 )
++seniorFemales;
– true nếu ít nhất một trong hai điều kiện là true
cu
u
if ( semesterAverage >= 90 || finalExam >= 90 )
cout << "Student grade is A" << endl;
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
2.3 Các phép toán logic
.c
om
• ! (logical NOT, phủ định logic – logical negation)
– trả về giá trị true khi điều kiện là false, và ngược lại
co
ng
if ( !( grade == sentinelValue ) )
cout << "The next grade is " << grade << endl;
an
tương đương với:
cu
u
du
o
ng
th
if ( grade != sentinelValue )
cout << "The next grade is " << grade << endl;
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Nhầm lẫn giữa
phép so sánh bằng (==) và phép gán (=)
.c
om
• Lỗi thường gặp
• Các khía cạnh của vấn đề
ng
– Thường không tạo lỗi cú pháp (syntax error)
co
– biểu thức có giá trị có thể được dùng làm điều kiện
an
• bằng không = false, khác không = true
cu
u
du
o
ng
th
– Các lệnh gán cũng tạo giá trị (giá trị được gán)
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Nhầm lẫn giữa
phép so sánh bằng (==) và phép gán (=)
.c
om
• Ví dụ
ng
if ( 4 == payCode )
cout << "You get a bonus!" << endl;
th
• Nếu == bị thay bởi =
an
co
– Nếu mã tiền lương (paycode) là 4 thì thưởng
du
o
ng
if ( payCode = 4 )
cout << "You get a bonus!" << endl;
cu
u
– Paycode được gán giá trị 4 (không cần biết giá trị của
paycode trước đó)
– lệnh gán cho giá trị true (vì 4 khác 0)
– trường hợp nào cũng được thưởng
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Nhầm lẫn giữa
phép so sánh bằng (==) và phép gán (=)
.c
om
• Lvalue
ng
– là biểu thức có thể xuất hiện tại vế trái của phép gán
– xác định một vùng nhớ có thể được gán trị (i.e, các biến)
co
• x = 4;
an
• Rvalue
du
o
ng
th
– chỉ xuất hiện bên phải phép gán
– hằng, các giá trị (literal)
• không thể viết 4 = x;
cu
u
• Lvalue có thể được dùng như các rvalue, nhưng
chiều ngược lại là không thể
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
• Trước khi viết chương trình
ng
– Hiểu kỹ bài toán
– Lập kế hoạch giải quyết bài toán
.c
om
Viết chương trình
co
• Trong khi viết chương trình
cu
u
du
o
ng
th
an
– Biết lời giải có sẵn cho các bài toán con
– Sử dụng các nguyên lý lập trình tốt
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Thuật toán - Algorithm
.c
om
• Các bài toán tin học
ng
– được giải bằng cách thực hiện một chuỗi hành động theo
một thứ tự cụ thể
co
• Thuật toán: một quy trình quyết định
du
o
ng
th
an
– Các hành động cần thực hiện
– Thứ tự thực hiện
– Ví dụ: cách nấu một món ăn
• Điều khiển của chương trình – Program Control
cu
u
– Chỉ ra thứ tự thực hiện các lệnh
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Mã giả - Pseudocode
ng
– tương tự với ngôn ngữ hàng ngày
.c
om
• Mã giả: ngôn ngữ không chính thức được dùng để
mô tả thuật toán
co
• Không chạy được trên máy tính
th
an
– dùng để mô tả chương trình trước khi viết chương trình
ng
• dễ chuyển thành chương trình C++
du
o
– chỉ gồm các lệnh chạy
Ví dụ:
tìm số nhỏ hơn trong hai số
cu
u
• không cần khai báo biến
CuuDuongThanCong.com
1.
nhập 2 số x,y
2.
nếu x>y thì in y ra màn hình
3.
nếu không, in x ra màn hình
https://fb.com/tailieudientucntt
Các cấu trúc điều khiển - Control Structures
Khái niệm
.c
om
• Thực thi tuần tự - Sequential execution
– Các lệnh được thực hiện theo thứ tự tuần tự
ng
• Chuyển điều khiển - Transfer of control
ng
th
• 3 cấu trúc điều khiển
an
co
– Lệnh tiếp theo được thực thi không phải lệnh tiếp theo trong
chuỗi lệnh.
du
o
– Cấu trúc tuần tự - Sequence structure
• theo mặc định, chương trình chạy tuần tự từng lệnh
cu
u
– Các cấu trúc chọn lựa - Selection structures
• if, if/else, switch
– Các cấu trúc lặp - Repetition structures
• while, do/while, for
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Các cấu trúc điều khiển
.c
om
• Các từ khóa của C++
– Không thể dùng làm tên biến hoặc tên hàm
ng
C + + K e y w o rd s
co
K e y w o r d s c o m m o n to th e
C a n d C + + p r o g r a m m in g
la n g u a g e s
char
const
continue
default
do
double
else
enum
extern
float
for
goto
if
int
long
register
return
short
signed
sizeof
static
struct
union
unsigned
void
bool
catch
class
const_cast
dynamic_cast
explicit
false
friend
mutable
namespace
new
operator
private
protected
public
reinterpret_cast
static_cast
template
this
throw
true
try
typeid
typename
using
virtual
typedef
volatile
while
u
C + + o n ly k e y w o r d s
inline
cu
asm
delete
du
o
switch
an
case
th
break
ng
auto
wchar_t
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Các cấu trúc điều khiển
true
print “Passed”
.c
om
grade >= 60
ng
false
co
• Sơ đồ khối - Flowchart
ng
th
an
– mô tả thuật toán bằng hình vẽ
– gồm các ký hiệu đặc biệt được nối bằng các mũi tên
(flowlines)
– Hình chữ nhật (ký hiệu hành động)
du
o
• kiểu hành động bất kỳ
– ký hiệu oval
cu
u
• Bắt đầu hoặc kết thúc một chương trình,
hoặc một đoạn mã (hình tròn)
• Các cấu trúc điều khiển có đúng 1 đầu vào, 1 đầu ra
– Kết nối đầu ra của một cấu trúc điều khiển với đầu vào của
cấu trúc tiếp theo
– xếp chồng các cấu trúc điều khiển
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Cấu trúc lựa chọn if
.c
om
• Cấu trúc lựa chọn - Selection structure
ng
– chọn giữa các tuyến hành động khác nhau
– ví dụ bằng mã giả:
an
co
If student's grade is greater than or equal to 60
Print “Passed”
th
– Nếu điều kiện thỏa mãn (có giá trị true)
ng
• lệnh Print được thực hiện, chương trình chạy tiếp lệnh tiếp theo
du
o
– Nếu điều kiện không thỏa mãn (có giá trị false)
• lệnh Print bị bỏ qua, chương trình chạy tiếp
cu
u
– Cách viết thụt đầu dòng làm chương trình dễ đọc hơn
• C++ bỏ qua các ký tự trắng (tab, space, etc.)
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Cấu trúc lựa chọn if
.c
om
• Dịch sang C++
co
grade >= 60
true
print “Passed”
false
an
if ( grade >= 60 )
cout << "Passed";
ng
If student's grade is greater than or equal to 60
Print “Passed”
th
• ký hiệu hình thoi (ký hiệu quyết định)
du
o
ng
– đánh đấu chọn lựa cần thực hiện
– chứa một biểu thức có giá trị true hoặc false
cu
• cấu trúc if
u
• kiểm tra điều kiện, đi theo đường thích hợp
– Single-entry/single-exit
Một biểu thức bất kỳ đều
có thể được sử dụng làm
điều kiện cho lựa chọn.
bằng 0 - false
khác 0 - true
Ví dụ:
3 - 4 có giá trị true
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Cấu trúc chọn lựa if/else
.c
om
• if
– Thực hiện hành động nếu điều kiện thỏa mãn
ng
• if/else
an
co
– thực hiện những hành động khác nhau tùy theo điều kiện được
thỏa mãn hay không
th
• mã giả
cu
• mã C++
u
du
o
ng
if student's grade is greater than or equal to 60
print “Passed”
else
print “Failed”
if ( grade >= 60 )
cout << "Passed";
else
cout << "Failed";
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Cấu trúc chọn lựa if/else
.c
om
• phép toán điều kiện 3 ngôi (?:)
– ba tham số (điều kiện, giá trị nếu true, giá trị nếu false)
ng
• mã có thể được viết:
th
Value if true
Value if false
du
o
ng
Condition
an
co
cout << ( grade >= 60 ? “Passed” : “Failed” );
print “Failed”
grade >= 60
true
cu
u
false
CuuDuongThanCong.com
print “Passed”
https://fb.com/tailieudientucntt
Cấu trúc chọn lựa if/else
.c
om
• Các cấu trúc if/else lồng nhau
ng
– lệnh này nằm trong lệnh kia, kiểm tra nhiều trường hợp
– Một khi điều kiện thỏa mãn, các lệnh khác bị bỏ qua
cu
u
du
o
ng
th
an
co
if student's grade is greater than or equal to 90
Print “A”
else
if student's grade is greater than or equal to 80
Print “B”
else
if student's grade is greater than or equal to 70
Print “C”
else
if student's grade is greater than or equal to 60
Print “D”
else
Print “F”
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Cấu trúc chọn lựa if/else
ng
// 90 and above
// 80-89
// 70-79
// 60-69
// less than 60
cu
u
du
o
ng
th
an
co
if ( grade >= 90 )
cout << "A";
else if ( grade >= 80 )
cout << "B";
else if ( grade >= 70 )
cout << "C";
else if ( grade >= 60 )
cout << "D";
else
cout << "F";
.c
om
• Ví dụ
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Cấu trúc chọn lựa if/else
>= 60 )
"Passed.\n";
co
if ( grade
cout <<
else {
cout <<
cout <<
ng
– tập lệnh bên trong một cặp ngoặc
.c
om
• lệnh phức – compound statement
th
an
"Failed.\n";
"You must take this course again.\n";
ng
}
du
o
– nếu không có ngoặc,
cout << "You must take this course again.\n";
cu
u
sẽ luôn được thực hiện
• Khối chương trình - Block
– tập lệnh bên trong một cặp ngoặc
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Cấu trúc lặp while
.c
om
• Cấu trúc lặp - Repetition structure
co
ng
– hành động được lặp đi lặp lại trong khi một điều kiện nào đó
còn được thỏa mãn
– mã giả
th
an
Trong khi vẫn còn tên hàng trong danh sách đi chợ của tôi
Mua mặt hàng tiếp theo và gạch tên nó ra khỏi danh sách
cu
u
du
o
ng
– vòng while lặp đi lặp lại cho đến khi điều kiện không thỏa
mãn
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Cấu trúc lặp while
.c
om
• Ví dụ
an
co
ng
int product = 2;
while ( product <= 1000 )
product = 2 * product;
u
du
o
ng
th
• Sơ đồ khối của vòng while
cu
product <= 1000
true
product = 2 * product
false
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Thiết lập thuật toán
(Điều khiển lặp bằng con đếm)
.c
om
• Vòng lặp được điều khiển bằng con đếm (counter)
– Lặp đến khi con đếm đạt đến giá trị nào đó
ng
• Lặp hữu hạn - Definite repetition
th
an
• Ví dụ
co
– số lần lặp biết trước
cu
u
du
o
ng
Một lớp gồm 10 sinh viên làm một bài thi. Cho biết các điểm
thi (số nguyên trong khoảng từ 0 đến 100). Tính trung bình
điểm thi của lớp.
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Thiết lập thuật toán
(Điều khiển lặp bằng con đếm)
.c
om
• Mã giả cho ví dụ:
u
du
o
ng
th
an
co
ng
Đặt tổng bằng 0
Đặt con đếm bằng 1
Trong khi con đếm nhỏ hơn hoặc bằng 10
Nhập điểm tiếp theo
Cộng điểm đó vào tổng
Thêm 1 vào con đến
Đặt trung bình lớp bằng tổng chia cho 10
In trung bình lớp
cu
• Tiếp theo: Mã C++ cho ví dụ trên
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
// Fig. 2.7: fig02_07.cpp
// Class average program with counter-controlled repetition.
#include
fig02_07.cpp
(1 of 2)
ng
co
program execution
ng
th
an
sum of grades input by user
number of grade to be entered next
grade value
average of grades
du
o
// function main begins
int main()
{
int total;
//
int gradeCounter; //
int grade;
//
int average;
//
.c
om
using std::cout;
using std::cin;
using std::endl;
u
// initialization phase
total = 0;
// initialize total
gradeCounter = 1;
// initialize loop counter
cu
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
loop 10 times
prompt for input
read grade from user
add grade to total
increment counter
fig02_07.cpp
(2 of 2)
fig02_07.cpp
output (1 of 1)
ng
// termination phase
average = total / 10;
//
//
//
//
//
.c
om
// processing phase
while ( gradeCounter <= 10 ) {
cout << "Enter grade: ";
cin >> grade;
total = total + grade;
gradeCounter = gradeCounter + 1;
}
co
Con
đếm được division
tăng thêm 1 mỗi lần vòng lặp chạy.
// integer
Cuối cùng, con đếm làm vòng lặp kết thúc.
th
an
// display result
cout << "Class average is " << average << endl;
ng
// indicate program ended successfully
u
} // end function main
du
o
return 0;
cu
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
CuuDuongThanCong.com
Enter
Enter
Enter
Enter
Enter
Enter
Enter
Enter
Enter
Enter
Class
https://fb.com/tailieudientucntt
grade: 98
grade: 76
grade: 71
grade: 87
grade: 83
grade: 90
grade: 57
grade: 79
grade: 82
grade: 94
average is 81
Thiết lập thuật toán
(Điều khiển lặp bằng lính canh)
.c
om
• Giả sử bài toán trở thành:
th
an
co
ng
Viết một chương trình tính điểm trung bình của lớp, chương
trình sẽ xử lý một số lượng điểm tùy ý mỗi khi chạy chương
trình.
– Số sinh viên chưa biết
– Chương trình sẽ làm thế nào để biết khi nào thì kết thúc?
ng
• Giá trị canh
cu
u
du
o
– Ký hiệu “Kết thúc của dữ liệu vào”
– Vòng lặp kết thúc khi nhập canh
– Canh được chọn để không bị lẫn với dữ liệu vào thông
thường
• trong trường hợp này là -1
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Thiết lập thuật toán
(Điều khiển lặp bằng lính canh)
.c
om
• Thiết kế từ trên xuống, làm mịn từng bước
– Bắt đầu bằng mã giả cho mức cao nhất
ng
Tính trung bình điểm thi của lớp
co
– Chia thành các nhiệm vụ nhỏ hơn, liệt kê theo thứ tự
cu
u
du
o
ng
th
an
Khởi tạo các biến
Nhập, tính tổng, và đếm các điểm thi
Tính và in trung bình điểm thi
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
• Nhiều chương trình có 3 pha
– Khởi tạo - Initialization
ng
• Khởi tạo các biến chương trình
.c
om
Thiết lập thuật toán
(Điều khiển lặp bằng lính canh)
co
– Xử lý - Processing
th
– Kết thúc - Termination
an
• Nhập dữ liệu, điều chỉnh các biến trong chương trình
ng
• Tính và in kết quả cuối cùng
cu
u
du
o
– Giúp việc chia nhỏ chương trình để làm mịn từ trên xuống
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Thiết lập thuật toán
(Điều khiển lặp bằng lính canh)
ng
an
co
Khởi tạo các biến
thành
Khởi tạo tổng bằng 0
Khởi tạo biến đếm bằng 0
.c
om
• Làm mịn pha khởi tạo
th
• Xử lý
cu
u
du
o
ng
Nhập, tính tổng, và đếm các điểm thi
thành
Nhập điểm đầu tiên (có thể là canh)
Trong khi người dùng còn chưa nhập canh
Cộng điểm vừa nhập vào tổng
Cộng thêm 1 vào biến đếm điểm
Nhập điểm tiếp theo (có thể là canh)
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Thiết lập thuật toán
(Điều khiển lặp bằng lính canh)
.c
om
• Kết thúc
du
o
ng
th
an
co
ng
Tính và in trung bình điểm thi
thành
Nếu con đếm khác 0
Đặt trung bình bằng tổng chia cho con đếm
In giá trị trung bình
Nếu không
In “Không nhập điểm nào”
cu
u
• Tiếp theo: chương trình C++
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
// Fig. 2.9: fig02_09.cpp
// Class average program with sentinel-controlled repetition.
#include
.c
om
std::cout;
std::cin;
std::endl;
std::fixed;
ng
using
using
using
using
fig02_09.cpp
(1 of 3)
// parameterized stream manipulators
using std::setprecision;
// sets numeric output precision
th
an
co
#include
u
du
o
ng
// function main begins program execution
int main()
{
Dữ liệu kiểu double dùng để
int total;
// sum of grades
biểu diễn số thập phân.
int gradeCounter; // number of grades entered
int grade;
// grade value
cu
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
double average;
// number with decimal point for average
// initialization phase
total = 0;
// initialize total
gradeCounter = 0; // initialize loop counter
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
// prompt for input
// read grade from user
.c
om
// processing phase
// get first grade from user
cout << "Enter grade, -1 to end: ";
cin >> grade;
co
ng
// loop until sentinel value read from user
while ( grade != -1 ) {
total = total + grade;
// add grade to total
gradeCounter = gradeCounter + 1; // increment counter
// prompt for input
// read next grade
th
an
cout << "Enter grade, -1 to end: ";
cin >> grade;
du
o
ng
} // end while
u
// termination phase
// if user entered at least one grade ...
if ( gradeCounter != 0 ) {
cu
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
// calculate average of all grades entered
average = static_cast< double >( total ) / gradeCounter;
static_cast() coi total như một double tạm thời (casting).
Cần thiết vì phép chia số nguyên bỏ qua phần dư.
gradeCounter là một biến int, nhưng nó được nâng lên kiểu double.
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
fig02_09.cpp
(2 of 3)
// display average with two digits of precision
cout << "Class average is " << setprecision( 2 )
<< fixed << average << endl;
fig02_09.cpp
(3 of 3)
.c
om
} // end if part of if/else
// indicate program ended successfully
co
return 0;
fixed làm số liệu ra được in
theo dạng thông thường
(không phải dạng ký hiệu
khoa học); qui định in cả các
chữ số 0 ở sau và in dấu chấm
thập phân.
an
} // end function main
ng
du
o
75
94
97
88
70
64
83
89
-1
u
grade, -1 to end:
grade, -1 to end:
grade, -1 to end:
grade, -1 to end:
grade, -1 to end:
grade, -1 to end:
grade, -1 to end:
grade, -1 to end:
grade, -1 to end:
average is 82.50
setprecision(2)in hai
chữ số sau dấu phảy (làm tròn
theo độ chính xác quy định).
Các chương trình dùng hàm
này phải include
Include
cu
Enter
Enter
Enter
Enter
Enter
Enter
Enter
Enter
Enter
Class
fig02_09.cpp
output (1 of 1)
ng
else // if no grades were entered, output appropriate message
cout << "No grades were entered" << endl;
th
49
50
51
52
53
54
55
56
57
58
59
60
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Các cấu trúc điều khiển lồng nhau
.c
om
• Phát biểu bài toán
an
co
ng
Một trường có danh sách kết quả thi (1 = đỗ, 2 = trượt) của
10 sinh viên. Viết một chương trình phân tích kết quả thi.
Nếu có nhiều hơn 8 sinh viên đỗ thì in ra màn hình dòng
chữ “Tăng tiền học phí".
th
• Lưu ý
ng
– Chương trình xử lý 10 kết quả thi
du
o
• số lần lặp cố định, sử dụng vòng lặp điều khiển bằng biến đếm
u
– Có thể sử dụng hai con đếm
cu
• Một con đếm để đếm số lượng đỗ
• Một con đếm khác đếm số lương trượt
– Mỗi kết quả thi chỉ là 1 hoặc 2
• Nếu không phải 1 thì coi là 2
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Các cấu trúc điều khiển lồng nhau
.c
om
• Phác thảo mức cao nhất - Top level outline
Analyze exam results and decide if tuition should be raised
ng
• Làm mịn lần một - First refinement
ng
th
an
co
Initialize variables
Input the ten quiz grades and count passes and failures
Print a summary of the exam results and decide if tuition
should be raised
du
o
• Làm mịn - Refine
cu
u
Initialize variables
to
Initialize passes to zero
Initialize failures to zero
Initialize student counter to one
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Các cấu trúc điều khiển lồng nhau
.c
om
• Refine
cu
u
du
o
ng
th
an
co
ng
Input the ten quiz grades and count passes and failures
to
While student counter is less than or equal to ten
Input the next exam result
If the student passed
Add one to passes
Else
Add one to failures
Add one to student counter
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Các cấu trúc điều khiển lồng nhau
.c
om
• tiếp tục làm mịn
du
o
ng
th
an
co
ng
Print a summary of the exam results and decide if tuition should
be raised
to
Print the number of passes
Print the number of failures
If more than eight students passed
Print “Raise tuition”
cu
u
• Program next
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
// Fig. 2.11: fig02_11.cpp
// Analysis of examination results.
#include
fig02_11.cpp
(1 of 2)
.c
om
using std::cout;
using std::cin;
using std::endl;
du
o
ng
th
an
co
ng
// function main begins program execution
int main()
{
// initialize variables in declarations
int passes = 0;
// number of passes
int failures = 0;
// number of failures
int studentCounter = 1;
// student counter
int result;
// one exam result
u
// process 10 students using counter-controlled loop
while ( studentCounter <= 10 ) {
cu
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// prompt user for input and obtain value from user
cout << "Enter result (1 = pass, 2 = fail): ";
cin >> result;
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
// if result 1, increment passes; if/else nested in while
if ( result == 1 )
// if/else nested in while
passes = passes + 1;
fig02_11.cpp
(2 of 2)
.c
om
else // if result not 1, increment failures
failures = failures + 1;
co
ng
// increment studentCounter so loop eventually terminates
studentCounter = studentCounter + 1;
an
} // end while
du
o
ng
th
// termination phase; display number of passes and failures
cout << "Passed " << passes << endl;
cout << "Failed " << failures << endl;
u
// if more than eight students passed, print "raise tuition"
if ( passes > 8 )
cout << "Raise tuition " << endl;
return 0;
cu
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
// successful termination
} // end function main
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
2
2
2
2
2
2
2
2
2
2
=
=
=
=
=
=
=
=
=
=
fail):
fail):
fail):
fail):
fail):
fail):
fail):
fail):
fail):
fail):
1
2
2
1
1
1
2
1
1
2
Enter result (1
Enter result (1
Enter result (1
Enter result (1
Enter result (1
Enter result (1
Enter result (1
Enter result (1
Enter result (1
Enter result (1
Passed 9
Failed 1
Raise tuition
=
=
=
=
=
=
=
=
=
=
pass,
pass,
pass,
pass,
pass,
pass,
pass,
pass,
pass,
pass,
2
2
2
2
2
2
2
2
2
2
=
=
=
=
=
=
=
=
=
=
fail):
fail):
fail):
fail):
fail):
fail):
fail):
fail):
fail):
fail):
1
1
1
1
2
1
1
1
1
1
fig02_11.cpp
output (1 of 1)
.c
om
pass,
pass,
pass,
pass,
pass,
pass,
pass,
pass,
pass,
pass,
ng
=
=
=
=
=
=
=
=
=
=
ng
du
o
u
CuuDuongThanCong.com
th
an
co
(1
(1
(1
(1
(1
(1
(1
(1
(1
(1
cu
Enter result
Enter result
Enter result
Enter result
Enter result
Enter result
Enter result
Enter result
Enter result
Enter result
Passed 6
Failed 4
https://fb.com/tailieudientucntt
om
ng
th
an
co
Ngôn ngữ lập trình C++
cu
u
du
o
ng
Chương 2 – Các kiểu dữ liệu cơ bản
Các cấu trúc điều khiển
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Tài liệu đọc thêm
.c
om
• Tài liệu đọc thêm cho chương này:
cu
u
du
o
ng
th
an
co
ng
– Section 2.1. Complete C++ Language Tutorial (CCLT)
– Day 7. Teach Yourself C++ in 21 Days (TY21)
– Namespace (Sec.5-2.CCLT) (Không bắt buộc)
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Chương 2 – Kiểu dữ liệu và phép toán cơ bản
Cấu trúc điều khiển và cấu trúc chương trình
.c
om
Đề mục
Các kiểu dữ liệu cơ bản
2.2
Các phép gán tắt, phép tăng, phép giảm
2.3
Các phép toán logic
2.4
Thuật toán, mã giả, điều khiển của chương trình, sơ đồ khối
2.5
Sơ lược về các cấu trúc điều khiển
2.6
Cấu trúc lựa chọn if, if/else
2.7
Phép toán lựa chọn 3 ngôi
2.8
Cấu trúc lặp while
2.9
Thiết lập thuật toán
2.10
Điều khiển lặp bằng con đếm và giá trị canh
cu
u
du
o
ng
th
an
co
ng
2.1
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Chương 2 – Kiểu dữ liệu và phép toán cơ bản
Cấu trúc điều khiển và cấu trúc chương trình
.c
om
Đề mục (tiếp theo)
Các cấu trúc lồng nhau
2.12
Vòng lặp for
2.13
Cấu trúc đa lựa chọn switch
2.14
Vòng lặp do/while
2.15
break và continue
2.16
Sơ lược về lập trình cấu trúc
cu
u
du
o
ng
th
an
co
ng
2.11
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
2.1 Các kiểu dữ liệu cơ bản
cu
u
du
o
ng
th
an
co
ng
.c
om
char
ký tự hoặc số nguyên 8 bit
short
số nguyên 16 bit
long
số nguyên 32 bit
int
số nguyên độ dài bằng 1 word (16 bit
hoặc 32 bit)
float
số chấm động 4 byte
double
số chấm động 8 byte
long double số chấm động 10 byte
bool
giá trị Boolean, true hoặc false
wchar_t
ký tự 2 byte, lưu bảng chữ cái quốc tế
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
2.2 Các phép toán cơ bản
x = 5;
.c
om
• phép gán – assignation (=)
//x: lvalue, 5: rvalue
ng
– là biểu thức có giá trị là giá trị được gán
cu
u
du
o
ng
th
an
co
• các phép toán số học - Arithmetic operators
(+, -, *, /, %)
• các phép gán kép - Compound assignation
operators
(+=, -=, *=, /=, %=, >>=, <<=, &=, ^=, |=)
• phép tăng và phép giảm (++, --)
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
2.2 Các phép toán cơ bản
an
co
ng
.c
om
• các phép quan hệ - relational operators
( ==, !=, >, <, >=, <= )
• các phép toán logic - Logic operators ( !, &&, || )
• phép điều kiện - Conditional operator ( ? ).
th
(7 == 5 ? 4 : 3) cho kết quả 3 do 7 khác 5.
cu
u
du
o
ng
• các toán tử bit - Bitwise Operators
( &, |, ^, ~, <<, >> ).
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
2.2 Các phép gán tắt
.c
om
• Các biểu thức gán tắt - Assignment expression
abbreviations
ng
– Phép gán cộng
co
c = c + 3; viết tắt thành c += 3;
an
• Các lệnh có dạng
th
variable = variable operator expression;
ng
có thể được viết lại thành
du
o
variable operator= expression;
• Các phép gán khác
4
5
3
9
u
-=
*=
/=
%=
cu
d
e
f
g
CuuDuongThanCong.com
(d
(e
(f
(g
=
=
=
=
d
e
f
g
*
/
%
4)
5)
3)
9)
https://fb.com/tailieudientucntt
• Phép tăng - Increment operator (++)
– có thể được dùng thay cho c += 1
co
– có thể được dùng thay cho c -= 1
ng
• Phép giảm - Decrement operator (--)
.c
om
2.2 Các phép tăng và giảm
an
• Tăng/giảm trước – Preincrement/Predecrement
th
• ++c hoặc --c
du
o
ng
• Giá trị của biến bị thay đổi, sau đó biểu thức chứa nó được tính giá trị.
• Biểu thức có giá trị là giá trị của biến sau khi tăng/giảm
• Tăng/giảm sau - Postincrement/Predecrement
cu
u
• c++ hoặc c--
• Biểu thức chứa biến được thực hiện, sau đó biến được thay đổi.
• Biểu thức có giá trị là giá trị của biến trước khi tăng/giảm
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
2.2 Các phép tăng và giảm
.c
om
• Ví dụ: nếu c = 5
– cout << ++c;
• c nhận giá trị 6, rồi được in ra
ng
– cout << c++;
th
an
co
• in giá trị 5 (cout được chạy trước phép tăng).
• sau đó, c nhận giá trị 6
ng
• Khi biến không nằm trong biểu thức
du
o
– Tăng trước và tăng sau có kết quả như nhau
cu
và
u
++c;
cout << c;
c++;
cout << c;
là như nhau
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
// Fig. 2.14: fig02_14.cpp
// Preincrementing and postincrementing.
#include
using std::cout;
using std::endl;
an
th
assign 5 to c
print 5
print 5 then postincrement
print 6
5
5
6
5
6
6
du
o
ng
// demonstrate postincrement
c = 5;
//
cout << c << endl;
//
cout << c++ << endl;
//
cout << c << endl << endl; //
co
ng
// function main begins program execution
int main()
{
int c;
// declare variable
.c
om
fig02_14.cpp
(1 of 2)
u
// demonstrate preincrement
c = 5;
//
cout << c << endl;
//
cout << ++c << endl;
//
cout << c << endl;
//
cu
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
return 0;
assign 5 to c
print 5
preincrement then print 6
print 6
// indicate successful termination
} // end function main
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
2.3 Các phép toán logic
ng
.c
om
• được dùng làm điều kiện trong các vòng lặp và
lệnh if
• && (logical AND)
co
– true nếu cả hai điều kiện là true
du
o
• || (logical OR)
ng
th
an
if ( gender == 1 && age >= 65 )
++seniorFemales;
– true nếu ít nhất một trong hai điều kiện là true
cu
u
if ( semesterAverage >= 90 || finalExam >= 90 )
cout << "Student grade is A" << endl;
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
2.3 Các phép toán logic
.c
om
• ! (logical NOT, phủ định logic – logical negation)
– trả về giá trị true khi điều kiện là false, và ngược lại
co
ng
if ( !( grade == sentinelValue ) )
cout << "The next grade is " << grade << endl;
an
tương đương với:
cu
u
du
o
ng
th
if ( grade != sentinelValue )
cout << "The next grade is " << grade << endl;
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Nhầm lẫn giữa
phép so sánh bằng (==) và phép gán (=)
.c
om
• Lỗi thường gặp
• Các khía cạnh của vấn đề
ng
– Thường không tạo lỗi cú pháp (syntax error)
co
– biểu thức có giá trị có thể được dùng làm điều kiện
an
• bằng không = false, khác không = true
cu
u
du
o
ng
th
– Các lệnh gán cũng tạo giá trị (giá trị được gán)
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Nhầm lẫn giữa
phép so sánh bằng (==) và phép gán (=)
.c
om
• Ví dụ
ng
if ( 4 == payCode )
cout << "You get a bonus!" << endl;
th
• Nếu == bị thay bởi =
an
co
– Nếu mã tiền lương (paycode) là 4 thì thưởng
du
o
ng
if ( payCode = 4 )
cout << "You get a bonus!" << endl;
cu
u
– Paycode được gán giá trị 4 (không cần biết giá trị của
paycode trước đó)
– lệnh gán cho giá trị true (vì 4 khác 0)
– trường hợp nào cũng được thưởng
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Nhầm lẫn giữa
phép so sánh bằng (==) và phép gán (=)
.c
om
• Lvalue
ng
– là biểu thức có thể xuất hiện tại vế trái của phép gán
– xác định một vùng nhớ có thể được gán trị (i.e, các biến)
co
• x = 4;
an
• Rvalue
du
o
ng
th
– chỉ xuất hiện bên phải phép gán
– hằng, các giá trị (literal)
• không thể viết 4 = x;
cu
u
• Lvalue có thể được dùng như các rvalue, nhưng
chiều ngược lại là không thể
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
• Trước khi viết chương trình
ng
– Hiểu kỹ bài toán
– Lập kế hoạch giải quyết bài toán
.c
om
Viết chương trình
co
• Trong khi viết chương trình
cu
u
du
o
ng
th
an
– Biết lời giải có sẵn cho các bài toán con
– Sử dụng các nguyên lý lập trình tốt
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Thuật toán - Algorithm
.c
om
• Các bài toán tin học
ng
– được giải bằng cách thực hiện một chuỗi hành động theo
một thứ tự cụ thể
co
• Thuật toán: một quy trình quyết định
du
o
ng
th
an
– Các hành động cần thực hiện
– Thứ tự thực hiện
– Ví dụ: cách nấu một món ăn
• Điều khiển của chương trình – Program Control
cu
u
– Chỉ ra thứ tự thực hiện các lệnh
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Mã giả - Pseudocode
ng
– tương tự với ngôn ngữ hàng ngày
.c
om
• Mã giả: ngôn ngữ không chính thức được dùng để
mô tả thuật toán
co
• Không chạy được trên máy tính
th
an
– dùng để mô tả chương trình trước khi viết chương trình
ng
• dễ chuyển thành chương trình C++
du
o
– chỉ gồm các lệnh chạy
Ví dụ:
tìm số nhỏ hơn trong hai số
cu
u
• không cần khai báo biến
CuuDuongThanCong.com
1.
nhập 2 số x,y
2.
nếu x>y thì in y ra màn hình
3.
nếu không, in x ra màn hình
https://fb.com/tailieudientucntt
Các cấu trúc điều khiển - Control Structures
Khái niệm
.c
om
• Thực thi tuần tự - Sequential execution
– Các lệnh được thực hiện theo thứ tự tuần tự
ng
• Chuyển điều khiển - Transfer of control
ng
th
• 3 cấu trúc điều khiển
an
co
– Lệnh tiếp theo được thực thi không phải lệnh tiếp theo trong
chuỗi lệnh.
du
o
– Cấu trúc tuần tự - Sequence structure
• theo mặc định, chương trình chạy tuần tự từng lệnh
cu
u
– Các cấu trúc chọn lựa - Selection structures
• if, if/else, switch
– Các cấu trúc lặp - Repetition structures
• while, do/while, for
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Các cấu trúc điều khiển
.c
om
• Các từ khóa của C++
– Không thể dùng làm tên biến hoặc tên hàm
ng
C + + K e y w o rd s
co
K e y w o r d s c o m m o n to th e
C a n d C + + p r o g r a m m in g
la n g u a g e s
char
const
continue
default
do
double
else
enum
extern
float
for
goto
if
int
long
register
return
short
signed
sizeof
static
struct
union
unsigned
void
bool
catch
class
const_cast
dynamic_cast
explicit
false
friend
mutable
namespace
new
operator
private
protected
public
reinterpret_cast
static_cast
template
this
throw
true
try
typeid
typename
using
virtual
typedef
volatile
while
u
C + + o n ly k e y w o r d s
inline
cu
asm
delete
du
o
switch
an
case
th
break
ng
auto
wchar_t
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Các cấu trúc điều khiển
true
print “Passed”
.c
om
grade >= 60
ng
false
co
• Sơ đồ khối - Flowchart
ng
th
an
– mô tả thuật toán bằng hình vẽ
– gồm các ký hiệu đặc biệt được nối bằng các mũi tên
(flowlines)
– Hình chữ nhật (ký hiệu hành động)
du
o
• kiểu hành động bất kỳ
– ký hiệu oval
cu
u
• Bắt đầu hoặc kết thúc một chương trình,
hoặc một đoạn mã (hình tròn)
• Các cấu trúc điều khiển có đúng 1 đầu vào, 1 đầu ra
– Kết nối đầu ra của một cấu trúc điều khiển với đầu vào của
cấu trúc tiếp theo
– xếp chồng các cấu trúc điều khiển
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Cấu trúc lựa chọn if
.c
om
• Cấu trúc lựa chọn - Selection structure
ng
– chọn giữa các tuyến hành động khác nhau
– ví dụ bằng mã giả:
an
co
If student's grade is greater than or equal to 60
Print “Passed”
th
– Nếu điều kiện thỏa mãn (có giá trị true)
ng
• lệnh Print được thực hiện, chương trình chạy tiếp lệnh tiếp theo
du
o
– Nếu điều kiện không thỏa mãn (có giá trị false)
• lệnh Print bị bỏ qua, chương trình chạy tiếp
cu
u
– Cách viết thụt đầu dòng làm chương trình dễ đọc hơn
• C++ bỏ qua các ký tự trắng (tab, space, etc.)
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Cấu trúc lựa chọn if
.c
om
• Dịch sang C++
co
grade >= 60
true
print “Passed”
false
an
if ( grade >= 60 )
cout << "Passed";
ng
If student's grade is greater than or equal to 60
Print “Passed”
th
• ký hiệu hình thoi (ký hiệu quyết định)
du
o
ng
– đánh đấu chọn lựa cần thực hiện
– chứa một biểu thức có giá trị true hoặc false
cu
• cấu trúc if
u
• kiểm tra điều kiện, đi theo đường thích hợp
– Single-entry/single-exit
Một biểu thức bất kỳ đều
có thể được sử dụng làm
điều kiện cho lựa chọn.
bằng 0 - false
khác 0 - true
Ví dụ:
3 - 4 có giá trị true
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Cấu trúc chọn lựa if/else
.c
om
• if
– Thực hiện hành động nếu điều kiện thỏa mãn
ng
• if/else
an
co
– thực hiện những hành động khác nhau tùy theo điều kiện được
thỏa mãn hay không
th
• mã giả
cu
• mã C++
u
du
o
ng
if student's grade is greater than or equal to 60
print “Passed”
else
print “Failed”
if ( grade >= 60 )
cout << "Passed";
else
cout << "Failed";
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Cấu trúc chọn lựa if/else
.c
om
• phép toán điều kiện 3 ngôi (?:)
– ba tham số (điều kiện, giá trị nếu true, giá trị nếu false)
ng
• mã có thể được viết:
th
Value if true
Value if false
du
o
ng
Condition
an
co
cout << ( grade >= 60 ? “Passed” : “Failed” );
print “Failed”
grade >= 60
true
cu
u
false
CuuDuongThanCong.com
print “Passed”
https://fb.com/tailieudientucntt
Cấu trúc chọn lựa if/else
.c
om
• Các cấu trúc if/else lồng nhau
ng
– lệnh này nằm trong lệnh kia, kiểm tra nhiều trường hợp
– Một khi điều kiện thỏa mãn, các lệnh khác bị bỏ qua
cu
u
du
o
ng
th
an
co
if student's grade is greater than or equal to 90
Print “A”
else
if student's grade is greater than or equal to 80
Print “B”
else
if student's grade is greater than or equal to 70
Print “C”
else
if student's grade is greater than or equal to 60
Print “D”
else
Print “F”
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Cấu trúc chọn lựa if/else
ng
// 90 and above
// 80-89
// 70-79
// 60-69
// less than 60
cu
u
du
o
ng
th
an
co
if ( grade >= 90 )
cout << "A";
else if ( grade >= 80 )
cout << "B";
else if ( grade >= 70 )
cout << "C";
else if ( grade >= 60 )
cout << "D";
else
cout << "F";
.c
om
• Ví dụ
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Cấu trúc chọn lựa if/else
>= 60 )
"Passed.\n";
co
if ( grade
cout <<
else {
cout <<
cout <<
ng
– tập lệnh bên trong một cặp ngoặc
.c
om
• lệnh phức – compound statement
th
an
"Failed.\n";
"You must take this course again.\n";
ng
}
du
o
– nếu không có ngoặc,
cout << "You must take this course again.\n";
cu
u
sẽ luôn được thực hiện
• Khối chương trình - Block
– tập lệnh bên trong một cặp ngoặc
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Cấu trúc lặp while
.c
om
• Cấu trúc lặp - Repetition structure
co
ng
– hành động được lặp đi lặp lại trong khi một điều kiện nào đó
còn được thỏa mãn
– mã giả
th
an
Trong khi vẫn còn tên hàng trong danh sách đi chợ của tôi
Mua mặt hàng tiếp theo và gạch tên nó ra khỏi danh sách
cu
u
du
o
ng
– vòng while lặp đi lặp lại cho đến khi điều kiện không thỏa
mãn
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Cấu trúc lặp while
.c
om
• Ví dụ
an
co
ng
int product = 2;
while ( product <= 1000 )
product = 2 * product;
u
du
o
ng
th
• Sơ đồ khối của vòng while
cu
product <= 1000
true
product = 2 * product
false
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Thiết lập thuật toán
(Điều khiển lặp bằng con đếm)
.c
om
• Vòng lặp được điều khiển bằng con đếm (counter)
– Lặp đến khi con đếm đạt đến giá trị nào đó
ng
• Lặp hữu hạn - Definite repetition
th
an
• Ví dụ
co
– số lần lặp biết trước
cu
u
du
o
ng
Một lớp gồm 10 sinh viên làm một bài thi. Cho biết các điểm
thi (số nguyên trong khoảng từ 0 đến 100). Tính trung bình
điểm thi của lớp.
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Thiết lập thuật toán
(Điều khiển lặp bằng con đếm)
.c
om
• Mã giả cho ví dụ:
u
du
o
ng
th
an
co
ng
Đặt tổng bằng 0
Đặt con đếm bằng 1
Trong khi con đếm nhỏ hơn hoặc bằng 10
Nhập điểm tiếp theo
Cộng điểm đó vào tổng
Thêm 1 vào con đến
Đặt trung bình lớp bằng tổng chia cho 10
In trung bình lớp
cu
• Tiếp theo: Mã C++ cho ví dụ trên
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
// Fig. 2.7: fig02_07.cpp
// Class average program with counter-controlled repetition.
#include
fig02_07.cpp
(1 of 2)
ng
co
program execution
ng
th
an
sum of grades input by user
number of grade to be entered next
grade value
average of grades
du
o
// function main begins
int main()
{
int total;
//
int gradeCounter; //
int grade;
//
int average;
//
.c
om
using std::cout;
using std::cin;
using std::endl;
u
// initialization phase
total = 0;
// initialize total
gradeCounter = 1;
// initialize loop counter
cu
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
loop 10 times
prompt for input
read grade from user
add grade to total
increment counter
fig02_07.cpp
(2 of 2)
fig02_07.cpp
output (1 of 1)
ng
// termination phase
average = total / 10;
//
//
//
//
//
.c
om
// processing phase
while ( gradeCounter <= 10 ) {
cout << "Enter grade: ";
cin >> grade;
total = total + grade;
gradeCounter = gradeCounter + 1;
}
co
Con
đếm được division
tăng thêm 1 mỗi lần vòng lặp chạy.
// integer
Cuối cùng, con đếm làm vòng lặp kết thúc.
th
an
// display result
cout << "Class average is " << average << endl;
ng
// indicate program ended successfully
u
} // end function main
du
o
return 0;
cu
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
CuuDuongThanCong.com
Enter
Enter
Enter
Enter
Enter
Enter
Enter
Enter
Enter
Enter
Class
https://fb.com/tailieudientucntt
grade: 98
grade: 76
grade: 71
grade: 87
grade: 83
grade: 90
grade: 57
grade: 79
grade: 82
grade: 94
average is 81
Thiết lập thuật toán
(Điều khiển lặp bằng lính canh)
.c
om
• Giả sử bài toán trở thành:
th
an
co
ng
Viết một chương trình tính điểm trung bình của lớp, chương
trình sẽ xử lý một số lượng điểm tùy ý mỗi khi chạy chương
trình.
– Số sinh viên chưa biết
– Chương trình sẽ làm thế nào để biết khi nào thì kết thúc?
ng
• Giá trị canh
cu
u
du
o
– Ký hiệu “Kết thúc của dữ liệu vào”
– Vòng lặp kết thúc khi nhập canh
– Canh được chọn để không bị lẫn với dữ liệu vào thông
thường
• trong trường hợp này là -1
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Thiết lập thuật toán
(Điều khiển lặp bằng lính canh)
.c
om
• Thiết kế từ trên xuống, làm mịn từng bước
– Bắt đầu bằng mã giả cho mức cao nhất
ng
Tính trung bình điểm thi của lớp
co
– Chia thành các nhiệm vụ nhỏ hơn, liệt kê theo thứ tự
cu
u
du
o
ng
th
an
Khởi tạo các biến
Nhập, tính tổng, và đếm các điểm thi
Tính và in trung bình điểm thi
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
• Nhiều chương trình có 3 pha
– Khởi tạo - Initialization
ng
• Khởi tạo các biến chương trình
.c
om
Thiết lập thuật toán
(Điều khiển lặp bằng lính canh)
co
– Xử lý - Processing
th
– Kết thúc - Termination
an
• Nhập dữ liệu, điều chỉnh các biến trong chương trình
ng
• Tính và in kết quả cuối cùng
cu
u
du
o
– Giúp việc chia nhỏ chương trình để làm mịn từ trên xuống
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Thiết lập thuật toán
(Điều khiển lặp bằng lính canh)
ng
an
co
Khởi tạo các biến
thành
Khởi tạo tổng bằng 0
Khởi tạo biến đếm bằng 0
.c
om
• Làm mịn pha khởi tạo
th
• Xử lý
cu
u
du
o
ng
Nhập, tính tổng, và đếm các điểm thi
thành
Nhập điểm đầu tiên (có thể là canh)
Trong khi người dùng còn chưa nhập canh
Cộng điểm vừa nhập vào tổng
Cộng thêm 1 vào biến đếm điểm
Nhập điểm tiếp theo (có thể là canh)
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Thiết lập thuật toán
(Điều khiển lặp bằng lính canh)
.c
om
• Kết thúc
du
o
ng
th
an
co
ng
Tính và in trung bình điểm thi
thành
Nếu con đếm khác 0
Đặt trung bình bằng tổng chia cho con đếm
In giá trị trung bình
Nếu không
In “Không nhập điểm nào”
cu
u
• Tiếp theo: chương trình C++
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
// Fig. 2.9: fig02_09.cpp
// Class average program with sentinel-controlled repetition.
#include
.c
om
std::cout;
std::cin;
std::endl;
std::fixed;
ng
using
using
using
using
fig02_09.cpp
(1 of 3)
// parameterized stream manipulators
using std::setprecision;
// sets numeric output precision
th
an
co
#include
u
du
o
ng
// function main begins program execution
int main()
{
Dữ liệu kiểu double dùng để
int total;
// sum of grades
biểu diễn số thập phân.
int gradeCounter; // number of grades entered
int grade;
// grade value
cu
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
double average;
// number with decimal point for average
// initialization phase
total = 0;
// initialize total
gradeCounter = 0; // initialize loop counter
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
// prompt for input
// read grade from user
.c
om
// processing phase
// get first grade from user
cout << "Enter grade, -1 to end: ";
cin >> grade;
co
ng
// loop until sentinel value read from user
while ( grade != -1 ) {
total = total + grade;
// add grade to total
gradeCounter = gradeCounter + 1; // increment counter
// prompt for input
// read next grade
th
an
cout << "Enter grade, -1 to end: ";
cin >> grade;
du
o
ng
} // end while
u
// termination phase
// if user entered at least one grade ...
if ( gradeCounter != 0 ) {
cu
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
// calculate average of all grades entered
average = static_cast< double >( total ) / gradeCounter;
static_cast
Cần thiết vì phép chia số nguyên bỏ qua phần dư.
gradeCounter là một biến int, nhưng nó được nâng lên kiểu double.
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
fig02_09.cpp
(2 of 3)
// display average with two digits of precision
cout << "Class average is " << setprecision( 2 )
<< fixed << average << endl;
fig02_09.cpp
(3 of 3)
.c
om
} // end if part of if/else
// indicate program ended successfully
co
return 0;
fixed làm số liệu ra được in
theo dạng thông thường
(không phải dạng ký hiệu
khoa học); qui định in cả các
chữ số 0 ở sau và in dấu chấm
thập phân.
an
} // end function main
ng
du
o
75
94
97
88
70
64
83
89
-1
u
grade, -1 to end:
grade, -1 to end:
grade, -1 to end:
grade, -1 to end:
grade, -1 to end:
grade, -1 to end:
grade, -1 to end:
grade, -1 to end:
grade, -1 to end:
average is 82.50
setprecision(2)in hai
chữ số sau dấu phảy (làm tròn
theo độ chính xác quy định).
Các chương trình dùng hàm
này phải include
Include
cu
Enter
Enter
Enter
Enter
Enter
Enter
Enter
Enter
Enter
Class
fig02_09.cpp
output (1 of 1)
ng
else // if no grades were entered, output appropriate message
cout << "No grades were entered" << endl;
th
49
50
51
52
53
54
55
56
57
58
59
60
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Các cấu trúc điều khiển lồng nhau
.c
om
• Phát biểu bài toán
an
co
ng
Một trường có danh sách kết quả thi (1 = đỗ, 2 = trượt) của
10 sinh viên. Viết một chương trình phân tích kết quả thi.
Nếu có nhiều hơn 8 sinh viên đỗ thì in ra màn hình dòng
chữ “Tăng tiền học phí".
th
• Lưu ý
ng
– Chương trình xử lý 10 kết quả thi
du
o
• số lần lặp cố định, sử dụng vòng lặp điều khiển bằng biến đếm
u
– Có thể sử dụng hai con đếm
cu
• Một con đếm để đếm số lượng đỗ
• Một con đếm khác đếm số lương trượt
– Mỗi kết quả thi chỉ là 1 hoặc 2
• Nếu không phải 1 thì coi là 2
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Các cấu trúc điều khiển lồng nhau
.c
om
• Phác thảo mức cao nhất - Top level outline
Analyze exam results and decide if tuition should be raised
ng
• Làm mịn lần một - First refinement
ng
th
an
co
Initialize variables
Input the ten quiz grades and count passes and failures
Print a summary of the exam results and decide if tuition
should be raised
du
o
• Làm mịn - Refine
cu
u
Initialize variables
to
Initialize passes to zero
Initialize failures to zero
Initialize student counter to one
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Các cấu trúc điều khiển lồng nhau
.c
om
• Refine
cu
u
du
o
ng
th
an
co
ng
Input the ten quiz grades and count passes and failures
to
While student counter is less than or equal to ten
Input the next exam result
If the student passed
Add one to passes
Else
Add one to failures
Add one to student counter
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
Các cấu trúc điều khiển lồng nhau
.c
om
• tiếp tục làm mịn
du
o
ng
th
an
co
ng
Print a summary of the exam results and decide if tuition should
be raised
to
Print the number of passes
Print the number of failures
If more than eight students passed
Print “Raise tuition”
cu
u
• Program next
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
// Fig. 2.11: fig02_11.cpp
// Analysis of examination results.
#include
fig02_11.cpp
(1 of 2)
.c
om
using std::cout;
using std::cin;
using std::endl;
du
o
ng
th
an
co
ng
// function main begins program execution
int main()
{
// initialize variables in declarations
int passes = 0;
// number of passes
int failures = 0;
// number of failures
int studentCounter = 1;
// student counter
int result;
// one exam result
u
// process 10 students using counter-controlled loop
while ( studentCounter <= 10 ) {
cu
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// prompt user for input and obtain value from user
cout << "Enter result (1 = pass, 2 = fail): ";
cin >> result;
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
// if result 1, increment passes; if/else nested in while
if ( result == 1 )
// if/else nested in while
passes = passes + 1;
fig02_11.cpp
(2 of 2)
.c
om
else // if result not 1, increment failures
failures = failures + 1;
co
ng
// increment studentCounter so loop eventually terminates
studentCounter = studentCounter + 1;
an
} // end while
du
o
ng
th
// termination phase; display number of passes and failures
cout << "Passed " << passes << endl;
cout << "Failed " << failures << endl;
u
// if more than eight students passed, print "raise tuition"
if ( passes > 8 )
cout << "Raise tuition " << endl;
return 0;
cu
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
// successful termination
} // end function main
CuuDuongThanCong.com
https://fb.com/tailieudientucntt
2
2
2
2
2
2
2
2
2
2
=
=
=
=
=
=
=
=
=
=
fail):
fail):
fail):
fail):
fail):
fail):
fail):
fail):
fail):
fail):
1
2
2
1
1
1
2
1
1
2
Enter result (1
Enter result (1
Enter result (1
Enter result (1
Enter result (1
Enter result (1
Enter result (1
Enter result (1
Enter result (1
Enter result (1
Passed 9
Failed 1
Raise tuition
=
=
=
=
=
=
=
=
=
=
pass,
pass,
pass,
pass,
pass,
pass,
pass,
pass,
pass,
pass,
2
2
2
2
2
2
2
2
2
2
=
=
=
=
=
=
=
=
=
=
fail):
fail):
fail):
fail):
fail):
fail):
fail):
fail):
fail):
fail):
1
1
1
1
2
1
1
1
1
1
fig02_11.cpp
output (1 of 1)
.c
om
pass,
pass,
pass,
pass,
pass,
pass,
pass,
pass,
pass,
pass,
ng
=
=
=
=
=
=
=
=
=
=
ng
du
o
u
CuuDuongThanCong.com
th
an
co
(1
(1
(1
(1
(1
(1
(1
(1
(1
(1
cu
Enter result
Enter result
Enter result
Enter result
Enter result
Enter result
Enter result
Enter result
Enter result
Enter result
Passed 6
Failed 4
https://fb.com/tailieudientucntt
 








Các ý kiến mới nhất