You are on page 1of 75

9/12/2022

HỌP GIAO BAN


LẬP TRÌNH C++ NÂNG CAO
Chương 1 :
Tuần 20 - 2021
Các khái niệm cơ bản
1

Nội dung chương 1

1. Cấu trúc rẽ nhánh: if, switch


2. Các cấu trúc lặp
3. Chương trình con
4. Các loại biến

1
9/12/2022

Kiểu dữ liệu nguyên thủy trong C++


Tên tiếng Anh là Primitive Type, còn có thể gọi là kiểu dữ liệu gốc, kiểu dữ liệu cơ bản, hay
kiểu dữ liệu có sẵn trong C++. Bên cạnh các kiểu dữ liệu gốc này, C++ cũng cung cấp các
kiểu dữ liệu do người dùng tự định nghĩa (user-defined). Bảng dưới đây liệt kê danh sách 7
kiểu dữ liệu cơ bản trong C++:

Kiểu dữ liệu Từ khóa


Boolean bool
Ký tự char
Số nguyên int
Số thực float
Số thực dạng double
Kiểu không có giá trị void
Kiểu Wide character wchar_t
3

Kiểu Kích thước bộ nhớ Vùng giá trị


char 1 byte -127 tới 127 hoặc 0 tới 255
unsigned char 1 byte 0 tới 255
signed char 1 byte -127 tới 127
int 4 byte -2147483648 tới 2147483647
unsigned int 4 byte 0 tới 4294967295
signed int 4 byte -2147483648 tới 2147483647
short int 2 byte -32768 tới 32767
unsigned short int Range 0 tới 65,535
signed short int Range -32768 tới 32767
long int 4 byte -2,147,483,647 tới 2,147,483,647
signed long int 4 byte Tương tự như long int
unsigned long int 4 byte 0 tới 4,294,967,295
float 4 byte +/- 3.4e +/- 38 (~7 chữ số)
double 8 byte +/- 1.7e +/- 308 (~15 chữ số)
long double 8 byte +/- 1.7e +/- 308 (~15 chữ số)
wchar_t 2 hoặc 4 byte 1 wide character
4

2
9/12/2022

1. Cấu trúc điều khiển if:


Cú pháp:
if (Biểu thức điều kiện - condition)
{ sai
// Code 1 Condition
}
else đúng
{
Code 1 Code 2
// Code 2
}

Condition

đúng

Code 1

1. Cấu trúc điều khiển if:


Toán tử logic:

3
9/12/2022

1. Cấu trúc điều khiển if:


Toán tử logic:

Ví dụ: if ((a>10)&&(a<20))

1. Cấu trúc điều khiển if:


Toán tử logic:
Cổng VÀ (AND gate)
• Chức năng:
• Thực hiện phép toán logic VÀ (AND)

• Cổng VÀ 2 đầu vào:


• Ký hiệu: A B out
0 0 0
0 1 0
• Bảng thật: 1 0 0
• Biểu thức: out = A . B 1 1 1
8

4
9/12/2022

1. Cấu trúc điều khiển if:


Toán tử logic:
Cổng HOẶC (OR gate)
• Chức năng:
• Thực hiện phép toán logic HOẶC (OR)
• Đầu ra chỉ bằng 0 khi tất cả các đầu vào bằng 0
• Cổng HOẶC 2 đầu vào:
• Ký hiệu:
A B out
0 0 0
0 1 1
• Bảng thật: 1 0 1
• Biểu thức: out = A + B 1 1 1

1. Cấu trúc điều khiển if:


Toán tử logic:
Cổng ĐẢO (NOT inverter)
• Chức năng:
• Thực hiện phép toán logic ĐẢO (NOT)
• Cổng ĐẢO chỉ có 1 đầu vào:
• Ký hiệu:
A out
0 1
1 0
• Bảng thật:
• Biểu thức: out = A

5
9/12/2022

1. Cấu trúc điều khiển if:


Bài tập 1:

Bài tập 1: Viết chương trình với ngôn ngữ tự nhiên và ngôn ngữ C++
nhập điểm giữa kỳ và điểm cuối kỳ của môn học lập trình C++.
Xuất điểm trung bình của sinh viên đối với môn đó ra màn hình.
∗3+ ∗7
ℎ=
10
Nếu điểm trung bình sinh viên >= 4 điểm thì sinh viên đậu
Nếu điểm trung bình sinh viên < 4 điểm thì sinh viên không đậu

1. Cấu trúc điều khiển if: //Khai báo hàm thư viện
// Khai báo hàm xử lý chính
Ví dụ 1: start { //biến nhập
DiemGK, DiemCK kiểu số thực;
//biến xuất
Nhập DiemGK, DiemCK DiemTB kiểu số thực;
//nhập liệu
Xuất ra màn hình “Nhap diem GK”;
DiemGK = giá trị nhập từ bàn phím;
DiemTB=(DiemGK*3+DiemCK*7)/10
Xuất ra màn hình “Nhap diem GK”;
DiemGK = giá trị nhập từ bàn phím;
//xử lý
DiemTB>=4 DiemTB=(DiemGK*3+DiemCK*7)/10
sai //kết xuất
đúng Nếu (DiemTB>=4) thì
{ Xuất ra màn hình “SV dau”; }
Xuất ra MH “SV Xuất ra MH “SV
Còn không
đau” khong đau”
{
Xuất ra màn hình “SV khong dau”;
end }}

6
9/12/2022

//Khai báo hàm thư viện


#include <iostream>
1. Cấu trúc điều khiển if: using namespace std;
// Khai báo hàm xử lý chính
Ví dụ 1: //Khai báo hàm thư viện int main()
// Khai báo hàm xử lý chính
{ //biến nhập
{ //biến nhập
DiemGK, DiemCK kiểu số thực; float DiemGK, DiemCK;
//biến xuất //biến xuất
DiemTB kiểu số thực; float DiemTB;
//nhập liệu
Xuất ra màn hình “Nhap diem GK”; //nhập liệu
DiemGK = giá trị nhập từ bàn phím; cout<<“Nhap diem GK “;
Xuất ra màn hình “Nhap diem CK”; cin>> DiemGK;
DiemCK = giá trị nhập từ bàn phím;
cout<<“Nhap diem CK”;
//xử lý
DiemTB=(DiemGK*3+DiemCK*7)/10 cin>> DiemCK;
//kết xuất //xử lý
Nếu (DiemTB>=4) thì DiemTB=(DiemGK*3+DiemCK*7)/10;
{
Xuất ra màn hình “SV dau”; //kết xuất
} if (DiemTB>=4)
Còn không { cout<<“SV dau”; }
{
else { cout<<“SV khong dau”; }
Xuất ra màn hình “SV khong dau”;
} return 0; }

Bài tập 1: Viết một chương trình C++ để nhập lương nhân viên, tính thuế thu nhập và lương ròng (số
tiền lương thực sự mà nhân viên đó nhận được). Với các thông số giả sử như sau (không theo luật
lương, chỉ là con số giả sử để dễ tính toán):
•30% thuế thu nhập nếu lương là 15 triệu.
•20% thuế thu nhập nếu lương từ 7 đến 15 triệu.
•10% thuế thu nhập nếu lương dưới 7 triệu.

Bài tập 2: Viết chương trình C++ để nhập tuổi và in ra kết quả nếu tuổi học sinh đó không đủ điều
kiện vào học lớp 10. Biết tuổi vào lớp 10 của học sinh là 16.

Bài tập 3: Viết chương trình C++ để nhập một số nguyên bất kỳ từ bàn phím và in kết quả ra màn
hình để thông báo cho người dùng biết số đó lớn hay nhỏ hơn 100

14

7
9/12/2022

Hướng dẫn giải:


Bài tập 1: #include <iostream>#include <conio.h>using namespace std;int main(){int thuesuat;float
luong,sothue,luongrong=0;cout << "Nhập số tiền lương :
";cin>>luong;if(luong>15){sothue=luong*0.3;thuesuat=30;}else
if(luong>=7){sothue=luong*0.2;thuesuat=20;}else{sothue=luong*0.1;thuesuat=10;}luongrong=l
uong-sothue;cout << "Lương = " << luong << endl;cout << "Thuế thu nhập " << thuesuat <<
"% = " << sothue << endl;cout << "Tiền lương thực nhận = " << luongrong << endl;return 0;}

15

16

8
9/12/2022

Bài tập 4: Viết chương trình C++ để người dùng nhập vào 3 số nguyên và tìm số lớn nhất trong
3 số đó.

Bài tập 5: Viết chương trình C++ xếp hạng học lực của học sinh dựa trên các điểm bài kiểm tra,
điểm thi giữa kỳ, điểm thi cuối kỳ. Nếu:
•Điểm trung bình >= 9.0 là hạng A.
•Điểm trung bình >=7.0 và < 9.0 là hạng B
•Điểm trung bình >=5.0 và < 7.0 là hạng C
•Điểm trung bình <5.0 là hạng F

Bài tập 6: Viết chương trình C++ để tìm nghiệm của phương trình bậc hai ax2 + bx + c = 0. Biết rằng:
•Nếu a và b cùng bằng 0 thì phương trình vô nghiệm.
•Nếu a=0 thì phương trình có một nghiệm là (-c/b).
•Nếu b2-4ac < 0, thì phương trình vô nghiệm.
•Nếu không, phương trình có hai nghiệm, dùng công thức tính nghiệm để tính.
17

Bài tập 7: Cửa hàng của bạn nhận gửi bán sản phẩm cho một công ty khác và hưởng hoa hồng, với
mức hoa hồng theo doanh số bán như sau:
•5% nếu tổng doanh số nhỏ hơn hoặc bằng 100 triệu.
•10% nếu tổng doanh số nhỏ hơn hoặc bằng 300 triệu.
•20 % nếu tổng doanh số là lớn hơn 300 triệu.
Hãy viết chương trình C++ để tính hoa hồng bạn sẽ nhận được dựa trên doanh số bán hàng.

Bài tập 8: Viết chương trình C++ để tính cước điện thoại bàn cho một hộ gia đình với các thông số như
sau:
•Phí thuê bao bắt buộc là 25 nghìn.
•600 đồng cho mỗi phút gọi của 50 phút đầu tiên.
•400 đồng cho mỗi phút gọi của 150 phút tiếp theo.
•200 đồng cho bất kỳ phút gọi nào sau 200 phút đầu tiên.

18

9
9/12/2022

Bài tập 7: #include <iostream>#include <conio.h>using namespace std;int main(){long int doanhso;float
hoahong;cout << "Tổng doanh số bán hàng: " <<
endl;cin>>doanhso;if(doanhso<=100){hoahong=doanhso*5/100;cout << "Với tổng doanh số là " <<
doanhso << ", ";cout << "thì hoa hồng nhận được là " << hoahong;}else
if(doanhso<=300){hoahong=doanhso*10/100;cout << "Với tổng doanh số là " << doanhso << ", ";cout <<
"thì hoa hồng nhận được là " << hoahong;}else if(doanhso>300){hoahong=doanhso*20/100;cout << "Với
tổng doanh số là " << doanhso << ", ";cout << "thì hoa hồng nhận được là " << hoahong;}cout <<"\n";
return 0;}

Bài tập 8: #include <iostream>#include <conio.h>using namespace std;int main(){long int


sophut,phi=0;float tong;const int phicodinh=25000;cout << "Số phút gọi trong tháng:
";cin>>sophut;if(sophut>200)phi=(sophut-200)*200+150*400+50*600;else if(sophut>50)phi=(sophut-
50)*400+50*600;elsephi=sophut*600;tong=phi+phicodinh;cout << "Bạn đã gọi " << sophut << " phút." <<
endl;cout << "Số tiền điện thoại phải nộp là " << tong << endl; return 0;}

19

1. Cấu trúc điều khiển if:


Bài tập 2:

Nhập số giờ làm của nhân viên. Viết chương trình với ngôn ngữ tự nhiên và ngôn ngữ
C++ tính lương nhân viên.

Biết rằng nếu


- số giờ nhỏ hơn hoặc bằng 8h thì đơn giá là 200,000/h
- số giờ lớn hơn 8h thì đơn giá là 250,000/h

10
9/12/2022

//Khai báo hàm thu vi?n


#include <iostream>
1. Cấu trúc điều khiển if: using namespace std;
// Khai báo hàm x? lý chính
Bài tập 2: int main()
//Khai báo hàm thư viện { //bi?n nh?p, bi?n xu?t
// Khai báo hàm xử lý chính float GioLam,Luong;
{ //biến nhập //nh?p li?u
GioLam kiểu số thực; cout<<"Nhap gio lam cua nhan vien: ";
//biến xuất cin>> GioLam;
Luong kiểu số thực; //x? lý
//nhập liệu if (GioLam<=8)
Xuất ra màn hình “Nhap so gio lam”; {Luong= GioLam *200000;}
GioLam = giá trị nhập từ bàn phím; else
//xử lý {Luong= GioLam *250000;}
if (GioLam<=8) //k?t xu?t
{Luong= GioLam *200000;} cout<<"Luong nhan vien la: "<<Luong;
Else }
{Luong= GioLam *250000;}
//kết xuất
Xuất ra màn hình “Luong nhan vien la: ”+Luong;
}

1. Cấu trúc điều khiển if: //x? lý


Bài tập 2: if (GioLam<=8)
//Khai báo hàm thư viện {Luong=GioLam*200000;}
#include <iostream> else
#include <iomanip> {Luong=GioLam*250000;}
using namespace std; //k?t xu?t
// Khai báo hàm x? lý chính cout << fixed;
int main() cout << setprecision(1);
{ //bien nhap, bi?n xu?t cout<<"Luong nhan vien la: "<<Luong;
float GioLam,Luong; return 0;}
//nh?p li?u
cout<<"Nhap gio lam cua nhan vien: ";
cin>> GioLam;

11
9/12/2022

1. Cấu trúc điều khiển if:


Toán tử điều kiện
Bài tập 2:
Nhập số giờ làm của nhân viên. Viết chương trình với ngôn ngữ tự nhiên và
ngôn ngữ C++ tính lương nhân viên.
Biết rằng nếu
- số giờ nhỏ hơn hoặc bằng 8h thì đơn giá là 200,000/h
- số giờ lớn hơn 8h thì đơn giá là 250,000/h

if(Condition)
{ Luong = X; }
Luong = (Condition) ? X : Y;
else
{ Luong = Y; }

1. Cấu trúc điều khiển if: //Khai bao ham thu vien
#include <iostream>
Toán tử điều kiện #include <iomanip>
Bài tập 2: using namespace std;
// Khai bao ham xu ly chinh
int main()
{ //bien nhap, bien xuat
float GioLam,Luong;
//nhap lieu
cout<<"Nhap gio lam cua nhan vien: ";
cin>> GioLam;
//xu ly
Luong = (GioLam<=8)? GioLam*200000: GioLam*250000;
//ket xuat
cout << fixed;
cout << setprecision(0);
cout<<"Luong nhan vien la: "<<Luong<<" vnd";
return 0;
}

12
9/12/2022

1. Cấu trúc điều khiển if:


Cấu trúc lồng if else – toán tử logic
Bài tập 3:
Viết chương trình giải phương trình bậc một ax + b = 0 (với a, b là 2 số nguyên nhập
từ bàn phím).

Phương trình tuyến tính (hay còn gọi là phương trình bậc
một hay phương trình bậc nhất) là một phương trình đại số có dạng: f(x)
= ax + b = 0. Trong đó:
•b là một hằng số (hay hệ số bậc 0).
•a là hệ số bậc một.
Tìm nghiệm của phương trình bậc một như sau:
•x = -b/a (Nếu a khác 0)
•Vô số nghiệm nếu a = 0 và b = 0
•Vô nghiệm nếu a = 0 và b khác 0.

1. Cấu trúc điều khiển if: //Xu ly


Cấu trúc lồng if else – toán tử logic if(a == 0)
Bài tập 3: { if (b == 0) {
#include <iostream> cout << "Phuong trinh vo so nghiem" << endl;
using namespace std; }
//khai bao ham xu ly chinh else {
int main() cout << "Phuong trinh vo nghiem" << endl; }
{ //bien nhap, xuat }
int a,b; else {
double nghiem; //nhập liệu nghiem = -b/a;
cout << "Nhap a = "; cout << "Phuong trinh co nghiem la: " << nghiem <<
cin >> a; endl;
cout << "Nhap b = "; }
cin >> b; return 0; }

13
9/12/2022

đúng
1. Cấu trúc điều khiển if:
Condition 1 Code 1
Cấu trúc if else if ladder
Cú pháp sai
if (Biểu thức điều kiện – condition 1)
{ Condition 2 Code 2
// Code 1
}
sai
else if (Condition 2) {//Code 2}
else if (Condition 3) {//code 3}
…………….. Condition 3 Code 3
else
{ sai
// Code n
}
Code n

đúng
1. Cấu trúc điều khiển if:
Condition 1 Code 1
Cấu trúc if else if ladder
Cú pháp
if (Biểu thức điều kiện – condition 1)
{ Condition 2 Code 2
// Code 1
}

if (Biểu thức điều kiện – condition 1)


{ Condition 3 Code 3
// Code 2
}

if (Biểu thức điều kiện – condition 1)


{ Code n
// Code …n
}

14
9/12/2022

1. Cấu trúc điều khiển if:


Cấu trúc if else if ladder
Bài tập 4:

Viết một chương trình đánh giá xếp hạng học sinh dựa vào các điểm (điểm kiểm tra miệng
(ktm), điểm kiểm tra 15 phút (kt15), điểm kiểm tra 1 tiếng (kt60), điểm kiểm tra cuối kỳ
(ktck)). Công thức tính xếp hạng học sinh như sau:
DTB = (ktm + kt15 + kt60*2 + ktck*2)/6.
•Nếu DTB lớn hơn hoặc bằng 9, xếp loại giỏi
•Nếu DTB nhỏ hơn 9 và lớn hơn hoặc bằng 7, xếp loại khá
•Nếu DTB lớn hơn 5 và nhỏ hơn hoặc bằng 7, xếp loại trung bình
•Nếu DTB nhỏ hơn 5 xếp loại yếu
5 điểm 7 điểm 9 điểm

1. Cấu trúc điều #include <iostream>


khiển if: #include<iomanip> if(DiemTB >= 9) {
Cấu trúc if else if using namespace std; cout << "Gioi";
ladder
}
Bài tập 4: int main()
{
else if(DiemTB >= 7) {
float DiemMieng; cout << "Kha";
float Diem15Phut; }
float Diem60Phut; else if(DiemTB >= 5) {
float DiemCK; cout << "Trung Binh";
float DiemTB; }
cout << "Nhap diem kiem tra mieng: "; else {
cin >> DiemMieng; cout << "Yeu";
cout << "Nhap diem kiem tra 15 phut: ";
}
cin >> Diem15Phut;
cout << "Nhap diem kiem tra 1 tieng: ";
return 0;
cin >> Diem60Phut; }
cout << "Nhap diem kiem tra cuoi ky: ";
5 điểm 7 điểm 9 điểm
cin >> DiemCK;
DiemTB = (DiemMieng + Diem15Phut + Diem60Phut *2 + DiemCK *2)/6;

15
9/12/2022

Bài thu hoạch 1:

Câu hỏi : Tính tiền sản phẩm cho khách hàng trong siêu thị biết:

Nếu số lượng sản phẩm mua lớn hơn bằng 50 thì khách hàng giảm 30%

Nếu số lượng sản phẩm mua từ 30 đến 50 sản phẩm thì khách hàng giảm 10%

Nếu số lượng sản phẩm mua nhỏ hơn 30 thì áp dụng đơn giá cũ

TienSanPham = DonGia * SoLuong ;


TienPhaiTra = TienSanPham - TienSanPham*Giảm giá %

switch (biểu thức-single expresssion)


1.2. Cấu {
trúc switch: case constant_1:
{
Cú pháp Statements;
break;
}

case constant_2:
{
Statements;
break;
}
…………………………………………………..
case constant_n:
{
Statements;
break;
}

default:{Statements;}
}

16
9/12/2022

case 6:{ cout << “Sau" << endl; break; }


1.2. Cấu trúc switch: //khai báo hàm thư viện case 7:{ cout << “Bay" << endl; break; }
#include <iostream.h> case 8:{ cout << “Tam" << endl; break; }
Bài tập 5: using namespace std; case 9:{ cout << “Chin" << endl; break; }
default:{ cout << “Ngoai pham vi so can doc" << endl; }
Nhập vào số tự int main() }
nhiên từ 0 đến 9 { //biến nhập return 0;
int So; }
và xuất tên tương
//nhập liệu
ứng cout << “Nhap so can doc: " << endl;
cin >> So;
//xử lý, kết xuất
switch (So)
{ case 0:{ cout << “So khong" << endl; break; }
case 1:{ cout << “So một" << endl; break;}
case 2:{ cout << “So hai" << endl; break; }
case 3:{ cout << “Ba" << endl; break; }
case 4:{ cout << “Tu" << endl; break; }
case 5:{ cout << “Nam" << endl; break; }

Start

Nhập giá trị So Switch(So) Case 0 : Xuất ra màn hình Số không

Case 1 : Xuất ra màn hình Số một

… các trường hợp còn lại

End

17
9/12/2022

#include <iostream.h> case 7:


1.2. Cấu using namespace std; { cout << "July" <<endl;
trúc //hàm xử lý chính break; }
case 8:
switch: int main()
{ cout << "August" << endl;
{ int Thang;
Bài tập cout << “Nhap thang hien tai : " << endl;
break; }
case 9:
6: cin >> Thang; { cout << "September" << endl;
switch (Thang) break; }
Nhập vào { case 10:
số thứ tự case 1: { cout << "October" << endl;
{ cout << "January" << endl; break; } break; }
của tháng case 2: { cout << "February" << endl; break; } case 11:
và hiển thị case 3: { cout << "November" << endl;
break; }
tên tháng { cout << "March" << endl; break; }
case 12:
case 4: { cout << "December" << endl;
tương ứng { cout << "April" << endl; break; } break; }
case 5: default:
{ cout << "May" << endl; break; } { cout << “Gia tri nhap sai !" << endl;
case 6: }
{ cout << "June" << endl; break; } } return 0; }

1.2. Cấu trúc switch:


Viết chương trình C++ cho phép người sử dụng chọn câu trả lời
Bài tập 7: (giống như chương trình thi trắc nghiệm).

Ví dụ như sau:

Cách nào khai báo một biến và gán giá trị số nguyên là đúng trong
các câu lệnh C++ sau?
a. int 1x=10;
b. int x=10;
c. float x=10.0f;
d. string x=″10″;
Chọn ký tự để trả lời: c
Lựa chọn không đúng!

18
9/12/2022

1.2. Cấu trúc switch:

Bài tập 7: Cach nao khai bao mot bien va gan gia tri so nguyen la dung trong
cac cau lenh C++ sau?
a.int 1x=10;
b. int x=10;
c. float x=10.0f;
d. string x=”10″;
Chon ky tu de tra loi: c
Lua chon khong dung!

1.2. Cấu trúc switch:


Bài tập 7: switch (TraLoi)
//khai bao ham thu vien {
#include <iostream> case 'a':{ cout << " Lua chon sai" << endl;
using namespace std; break;}
//khai bao ham xu ly chinh
int main() case 'b':{ cout << " Lua chon dung " << endl;
{ //bien nhap, bien xuat break;}
char TraLoi;
//nh?p li?u case 'c':{ cout << " Lua chon sai" << endl;
cout << "Cach nao khai bao mot bien va gan break; }
gia tri so nguyen la dung trong cac cau lenh C++ sau? "
<< endl; case 'd':{ cout << " Lua chon sai" << endl;
cout << "a.int 1x=10; " << endl; break; }
cout << “b.int x=10; " << endl; default:{ cout << “khong nam trong cau tra loi" <<
cout << “c. float x=10.0f; " << endl; endl; }
cout << “d. string x=”10?; " << endl; }
cout << "Chon ky tu de tra loi: " ; return 0;
cin>>TraLoi;
//xu ly, ket xuat }

19
9/12/2022

Bài tập 1: phân loại sinh viên dựa vào kết quả điểm học tập. Nếu điểm A thì
phân loại là sinh viên xuất xắc, điểm B là sinh viên loại giỏi, điểm C là sinh
viên loại khá, điểm D là sinh viên loại trung bình, điểm F là sinh viên loại yếu.

Bài tập 2: kiểm tra một háng hợp lệ từ 1 đến 12, nếu khác các giá trị này thì
tháng nhập không hợp lệ.

39

#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;

int main()
{

#include <iostream> int thang;


cout << "Nhap thang bang so: ";
using namespace std; cin >> thang;
switch(thang)
{
int main () { case 1:
cout << " January - thang 1";
break;
char diem = 'A'; case 2:
cout << " February - thang 2";
break;
switch(diem) { case 3:
case 'A': cout << " March - thang 3";
break;
cout << "Xuat xac" << endl; case 4:
break; cout << " April - thang 4";
break;
case 'B': case 5:
cout << "Gioi" << endl; cout << " May - thang 5";
break;
break; case 6:
case 'C': cout << " June - thang 6";
break;
cout << "Kha" << endl; case 7:
break; cout << " July - thang 7";
break;
case 'D': case 8:
cout << "Trung Binh" << endl; cout << " August - thang 8";
break;
break; case 9:
case 'F': cout << " September - thang 9";
break;
cout << "Yeu" << endl; case 10:
break; cout << " October - thang 10";
break;
default: case 11:
cout << "Diem khong hop le" << endl; cout << " November - thang 11";
break;
} case 12:
cout << "Diem cua ban la: " << diem << endl; cout << " December - thang 12";
break;
default:
return 0; cout << " Thang vua nhap khong hop le";
break;
} } 40
return 0;
}

20
9/12/2022

Bài tập 3: Viết một chương trình in ra màn hình số ngày của một tháng bất kỳ được nhập từ bàn phím
Một năm chúng ta có 12 tháng, mỗi tháng sẽ có số ngày khác nhau, được liệt kê trong bảng dưới đây:
Tháng Số ngày
Tháng 1, 3, 5, 7, 8, 10, 12 31 ngày
Tháng 2 28 hoặc 29 ngày
Tháng 4, 6, 9, 11 30 ngày

Hướng dẫn:

Nhập tháng từ bàn phím, ta gọi biến này là thang


Sử dụng cấu trúc switch case với giá trị truyền vào để kiểm tra là thang, cụ thể switch(thang)
Kiểm tra từng trường hợp nếu tháng 1, 3, 7, 8, 10, 12 thì in ra màn hình 31 ngày
Nếu tháng 2 in ra màn hình 28 hoặc 29 ngày
Nếu tháng 4. 6, 9, 11 in ra màn hình 30 ngày
Nếu giá trị tháng không nằm trong khoảng từ 1 đến 12 thì in ra màn hình tháng không hợp lệ
41

#include <iostream>
using namespace std; case 2:
cout << "Thang " << thang << " co 28 hoac 29 ngày" <<
int main() endl;
{ break;
int thang; case 4:
case 6:
cout << "Thang: "; case 9:
cin >> thang; case 11:
cout << "Thang " << thang << " co 30 ngày" << endl;
switch(thang) { break;
case 1: default:
case 3: cout << "Thang khong hop le" << endl;
case 5: }
case 7: return 0;
case 8: }
case 10:
case 12:
cout << "Thang " << thang << " co 31 ngày" << endl;
break;
42

21
9/12/2022

Bài tập: Viết một chương trình tạo một máy tính đơn giản có các phép tính như cộng, trừ, nhân, chia.

Hướng dẫn giải:


Nhập lần lượt toán hạng thứ nhất, toán tử và toán hạng thứ 2
Sử dụng cấu trúc điều khiển switch case cho toán tử, ví dụ switch(toanTu)
Có 4 trường hợp cho giá trị toán tử là +, -, *, /
Nếu giá trị toán tử là +, thực hiện phép cộng cho 2 toán hạng
Nếu giá trị toán tử là -, thực hiện phép trừ cho 2 toán hạng
Nếu giá trị toán tử là *, thực hiện phép nhân cho 2 toán hạng
Nếu giá trị toán tử là /, thực hiện phép chia cho 2 toán hạng. Trong trường hợp
toán hạng thứ 2 là 0 thì thông báo không thể thực hiện phép chia cho 0
Nếu giá trị khác 4 giá trị trên thì thông báo toán tử không hợp lệ

43

#include <iostream>
using namespace std; case '/':
if (so2 != 0) {
int main() ketQua = so1 / so2;
{ } else {
char toanTu;
kt = false;
float so1, so2, ketQua;
bool kt = true; }

cout << "Nhap toan hang thu nhat: "; break;


cin >> so1; default:
cout << "Nhap toan tu: "; printf("Toan tu khong hop le");
cin >> toanTu;
}
cout << "Nhap toan hang thu hai: ";
cin >> so2;
cout << "----------------------------" << endl;
switch(toanTu) if (kt) {
{ cout << so1 << " " << toanTu << " " << so2 << " = " << ketQua <<
case '+': endl;
ketQua = so1 + so2;
} else {
break;
case '-': cout << "Khong the thuc hien phep chia cho 0" << endl;
ketQua = so1 - so2; }
break;
case '*': return 0;
ketQua = so1 * so2; }
break;

44

22
9/12/2022

Bài tập : Viết chương trình kiểm tra một ký tự trong bảng chữ cái tiếng anh là nguyên âm hay phụ âm.
Ký tự là bất kỳ được nhập từ bàn phím

Hướng dẫn giải: Trong bảng chữ cái tiếng anh các ký tự nguyên âm là 'o', 'u', 'i','a', 'e' (không phân biệt
ký tự hoa hoặc ký tự thường), các ký tự còn lại là phụ âm.

Hướng dẫn giải: Nhập ký tự từ bàn phím, ta gọi biến đó là kyTu


Sử dụng cấu trúc điều khiển switch case cho ký tự, như là switch(kyTu)
Có các trường hợp cho giá trị kyTu đó là 'o', 'u', 'i', 'a', 'e' hoặc 'O', 'U', 'I', 'A', 'E'
Nếu giá trị của kyTu bằng một trong các giá trị trên thì in ra mà hình là ký tự nguyên âm
Nếu giá trị của kyTu khác các giá trị trên thì in ra màn hình là ký tự phụ âm

45

#include <iostream> case 'U':


using namespace std; case 'i':
case 'I':
int main() case 'a':
{ case 'A':
char kyTu; case 'e':
cout << "Nhap ky tu: "; case 'E':
cin >> kyTu; cout << "Ky tu " << kyTu << " la nguyen am" <<
switch(kyTu) { endl;
case 'o': break;
case 'O': default:
case 'u': cout << "Ky tu " << kyTu << " la phu am" << endl;
}
}

46

23
9/12/2022

Bài tập: VIết chương trình kiểm tra một số nguyên bất ký được nhập từ bàn
phím là số chẵn hay số lẻ.

Hướng dẫn: Một số được gọi là số chẵn khi nó chia hết cho 2, còn số lẻ thì
không chia hết cho 2
Nhập số từ bàn phím, ta gọi đó là biến so
Sử dụng cấu trúc điều khiển switch case cho so chia 2 lấy phần dư, như là
switch(so%2)
Có 2 giá tri cho so đó là 0 và 1
Nếu số dư là 0 thì in ra màn hình là số chẵn
Nếu số dư là 1 thì in ra màn hình là số lẻ

47

#include <iostream>
using namespace std;

int main()
{
char so;
cout << "Nhap so: ";
cin >> so;
switch(so % 2)
{
case 0:
cout << so << " la so chan" << endl;
break;
case 1:
cout << so << " la so le" << endl;
break;
}
return 0;
}
48

24
9/12/2022

Bài tập: Hãy sử dụng lệnh switch case trong C++ để xây dựng menu cho
một chương trình đơn giản.

Tạo một menu cho ứng dụng quản lý sinh viên, cho phép người dùng chọn
bốn hành động: Xem danh sách, thêm, xóa, sửa, thoát khỏi ứng dụng.

49

#include <iostream> case 2:


using namespace std;
cout << "Ban da chon them sinh vien" << endl;
int main() // Code them sinh vien
{ break;
cout << "Chuong trinh xay dung menu quan ly sinh vien" << endl; case 3:
cout << "Hay chon menu sau:" << endl;
cout << "Nhap 1: de xem danh sach sinh vien" << endl; cout << "Ban da chon xoa sinh vien" << endl;
cout << "Nhap 2: de them sinh vien" << endl; // Code xoa sinh vien
cout << "Nhap 3: de xoa sinh vien" << endl; break;
cout << "Nhap 4: de sua sinh vien" << endl;
cout << "Nhap 0: de thoat khoi ung dung" << endl;
case 4:
cout << "Ban da chon sua sinh vien" << endl;
int control; // Code sua sinh vien
cin >> control; break;
switch (control){ default :
case 1: cout << "Ban chon thoat khoi chuong trinh" <<
cout << "Ban da chon xem danh sach sinh vien" << endl; endl;
// Code xem danh sach sinh vien
break;
}

return 1;
}
50

25
9/12/2022

2. Cấu trúc lặp:


2.1 Vòng lặp while
Cú pháp:

while(dieu_kien) { cac_lenh; }

Chú ý: vòng lặp while có thể không chạy phần code block.
Bởi vì khi kiểm tra điều kiện và kết quả là false, phần thân
vòng lặp được bỏ qua và lệnh đầu tiên ngay sau vòng lặp
sẽ được thực thi

2. Cấu trúc lặp:


2.1 Vòng lặp while

Bài tập 8 : Sinh viên A đăng kí học môn lập trình


C++ tại trường đại học, nếu sinh viên A không đủ
điểm để qua môn học này thì sinh viên A sẽ phải
học lại. Trong trường hợp sinh viên A phải học lại
lần thứ 2, chúng ta lại nói rằng nếu sinh viên A
không đủ điểm qua môn học này thì sinh viên A
phải học lại… Vậy việc sinh viên A học lại là
công việc sẽ được lặp đi lặp lại nhiều lần trong
khi điều kiện sinh viên A đủ điểm để qua môn vẫn
còn sai.

26
9/12/2022

2. Cấu trúc lặp:


2.1 Vòng lặp while
Bài tập 8: Sinh viên A đăng kí học môn lập trình C++ tại trường đại học, nếu sinh viên A không đủ
điểm để qua môn học này thì sinh viên A sẽ phải học lại. Trong trường hợp sinh viên A phải học lại
lần thứ 2, chúng ta lại nói rằng nếu sinh viên A không đủ điểm qua môn học này thì sinh viên A phải
học lại… Vậy việc sinh viên A học lại là công việc sẽ được lặp đi lặp lại nhiều lần trong khi điều kiện
sinh viên A đủ điểm để qua môn vẫn còn sai.

//khai bao ham thu vien while (score < 4)


//khai bao ham xu ly chinh { cout << "Learn C++ programming language..." << endl;
int main() cout << "Enter your final score: ";
{ //khai bao bien nhap cin >> score;
int score = 0; }
//nhap lieu, xu ly cout << "Congratulation! You passed the exam" << endl;
system("pause");
return 0; }

#include <iostream> start


2. Cấu trúc lặp: using namespace std;
2.1 Vòng lặp while int main () int a = 5;
Bài tập 9: Xuất dãy số từ 5 đến 95 { // bien nhap
int a = 5; Sai
// xu ly a<96
while ( a < 96 )
Đúng
{
cout << a << \t; Xuất số a;
a++; // a=a+1; Tăng a lên 1;
}
return 0; }
end
5 6 7 8 9 ……. 94 95

27
9/12/2022

Bài tập 1: Hãy sử dụng vòng lặp while và do while để in ra các số từ 1 đến
100.

Bài tập 2: In ra tất cả số chẵn từ 1 đến 100.

Bài này có hai cách giải như sau:

Cách thứ nhất là lặp với bước nhảy là 2,


Cách thứ hai là lặp với bước nhảy 1 nhưng phải kiểm tra thêm điều kiện là
số chẵn hay số lẻ.

55

#include <iostream>
using namespace std; #include <iostream>
using namespace std;
int main()
{
int i = 1; int main()
{
// Vong lap while int i = 2;
while (i <= 100){
cout << i << endl;
i++; // Vong lap while
} while (i <= 100){
cout << i << endl;
// Vong lap do while
i = 1; i += 2;
do { }
cout << i << endl; }
i++;
}
while (i <= 100);
}

56

28
9/12/2022

Bài tập 3: Hãy viết chương trình yêu cầu người dùng nhập vào một số nằm trong khoảng từ 1 đến 100.
Nếu người dùng nhập số khác thì yêu cầu nhập lại.

57

#include <iostream> #include <iostream>


using namespace std; using namespace std;

int main() int main()


{ {
int num; int num;

while (true){ do {
cout << "Vui long nhap trong khoang 1 den 100: "; cout << "Vui long nhap trong khoang 1 den 100: ";
cin >> num; cin >> num;

if (num >= 1 && num <= 100){ if (num >= 1 && num <= 100){
break; break;
} }
else { else {
cout << "Ban nhap sai roi, hay nhap lai ..." << endl; cout << "Ban nhap sai roi, hay nhap lai ..." << endl;
} }
} } while (true);

cout << "So ban vua nhap la " << num << endl; cout << "So ban vua nhap la " << num << endl;
} }

58

29
9/12/2022

Bài tập: Cho một mảng có độ dài 10 phần tử các số nguyên. Hãy viết chương
trình C++ bằng cách sử dụng vòng lặp while để yêu cầu người dùng nhập dữ
liệu cho mảng đó, sau đó sử dụng do while để in các phần tử lên màn hình.

Bài tập: Hãy viết chương trình yêu cầu người dùng nhập vào một số bất kì
và in số đó lên màn hình. Nếu người dùng nhập vào số 0 thì thoát chương
trình, ngược lại thì nhập liên tục.

59

while (i < 10){


#include <iostream> cout << "Nhap phan tu thu " << i << ": ";
using namespace std; cin >> numbers[i];
i++;
int main () { }
int numbers[10];
// In gia tri cac phan tu
cout << "Nhap phan tu cho mang." << endl; i = 0;
do {
// Nhap phan tu cout << numbers[i] << endl;
int i = 0; i++;
} while (i < 10);

return 1;
}

60

30
9/12/2022

#include <iostream>
using namespace std;

int main () {
int num;
while (true){
cout << "Vui long nhap vao so bat ki, nhap 0 de thoat: ";
cin >> num;

if (num == 0){
break;
}
else {
cout << "So ban vua nhap la " << num << endl;
}
}

return 1;
}
61

Bài thu hoạch lần 2


Bài tập 1: Viết chương trình xuất chuỗi số

1 4 7 10 ……………31

Bài tập 2: Viết chương trình nhập vào 1 số, xét số đó là số nguyên dương, nguyên âm hay
là số 0

Bài tập 3: Viết chương trình ràng buộc người dùng phải nhập giá trị từ bàn phím là con số
nguyên.
Nếu là ký tự thì xuất ra màn hình là “phải nhập lại giá trị “
String Chuoi; 1
Int.TryParse (Chuoi) 0

31
9/12/2022

//khai báo hàm thư viện


//khai báo hàm xử lý chính
{ //biến nhập
String Chuoi;
//biến xuất
//nhập liệu
Xuất ra màn hình “nhap gia tri”;
Chuoi = giá trị nhập từ bàn phím;
//xử lý
While (!(int.TryParse(Chuoi)))
{
Xuất ra màn hình “nhap gia tri”;
Chuoi = giá trị nhập từ bàn phím; }
//kết xuất
Xuất ra màn hình “Gia tri so nhan duoc la” + Chuoi ;
}

i start
1 2 3 4 5
1 2 3 4 5
j int j = 1;
2. Cấu trúc lặp: 1 2 3 4 5
int i;
2.1 Vòng lặp while 1 2 3 4 5
Bài tập 10: Xuất ra màn hình cụm số sau
#include <iostream> Sai
j<=4
using namespace std;
int main () Đúng
{ int j = 1;
while (j <= 4)
{ int i = 1; i = 1 // int i=1
while (i <= 5)
{ cout << i << " "; Sai
i++; i<=5
}
Đúng
cout << endl;
j++; In số i
Tăng i lên 1
}
In “endl” xuống hàng
return 0; Tăng j lên 1 end
}

32
9/12/2022

start

i int j = 1;
2. Cấu trúc lặp:
2.1 Vòng lặp while 1 2 3 4 5 int i;
Bài tập 11: Xuất ra màn hình cụm số sau 1 2 3 4
1 2 3
#include <iostream> Sai
j 1 2 j<=5
using namespace std; 1
int main () Đúng
{ int j = 1;
while ((j <= 5)
{ int i = 1; i=1; //int i = 1
while (i <= (5-j))
{ cout << i << " "; Sai
i++; i<=(6-j)
}
Đúng
cout << “/n”;
In số i
j++;
Tăng i lên 1
}
In “/n” xuống hàng
return 0; Tăng j lên 1 end
}

2. Cấu trúc
lặp:
2.1 Vòng lặp #include <iostream> start
while using namespace std;
Bài tập 12: int main () int So = Nhap tu ban phim;
Viết chương { // Khai bao bien cuc bo: int Tong = 0;
trình tính tổng int So ; int Tong = 0
các số nguyên cout<<“Nhap so can tinh tong:”;
Sai
được nhập từ cin>> So; So!=0
bàn phím cho //xử lý
đến khi nhập while ( So!=0 ) Đúng
số 0 thì dừng {
Tong=Tong + So;
Tong = Tong + So;
S=1+….+n cout<<“Nhap so can tinh tong:”; Xuất Tong ra màn hình
So = Nhap tu ban phim;
cin>> So;
}
cout<<“Tong chuoi so tren la:”; end
return 0; }
Câu hỏi suy nghĩ:làm sao lưu lại dãy số đã nhập để kết xuất lại:

33
9/12/2022

Bài thu hoạch lần 1


Bài tập : Vẽ lưu đồ và lập trình với ngôn ngữ C++ chương trình xuất ra màn hình
cụm số sau
int i, j;
j=1;
//khai báo hàm thư viện 1 while (j<=6)
//khai báo hàm xử lý chính 1 2 {
{ 1 2 3 i =1;
while ( i <=j )
//biến nhập 1 2 3 4 {
//biến xuất 1 2 3 4 5 cout<<i;
//nhập liệu 1 2 3 4 5 6 i++;
}
//xử lý j++;
//kết xuất }
} return 0;

2. Cấu trúc lặp: (1)

2.2 Vòng lặp for


Cú pháp:
(2)

(3)

(4)

34
9/12/2022

(1) int a=1

2. Cấu trúc lặp:


2.2 Vòng lặp for (2) Sai
Bài tập 11: a<=100
In ra 100 dòng chữ “Em se khong vi pham nhu vay nua!”
Đúng

#include <iostream>
using namespace std; Xuất chuỗi (3)
int main ()
{ // vong lap for
for( int a = 1; a <=100 ; a = a + 1 ) //a++
a=a+1 (4)
{ cout << " Em se khong vi pham nhu vay nua!" << endl; }
return 0;
}
end

5 7 9 11 13 ……. 93 95

(1) int a=5


2. Cấu trúc lặp:
2.2 Vòng lặp for (2)
Bài tập 12:
Xuất dãy số lẻ trong khoảng từ 5 đến 96
a<96

#include <iostream>
using namespace std; (3)
int main ()
Xuất giá trị của a
{ // vong lap for
for( int a = 5; a < 96; a = a + 2 ) (4)
{ cout << "Gia tri cua a la: " << a << endl; } a=a+2
return 0;
}
5 7 9 11 13 ……. 93 95

35
9/12/2022

2. Cấu trúc lặp:


2.3 Vòng lặp do…while #include <iostream>
Cú pháp: using namespace std;
int main ()
do { cac_lenh; }while( dieu_kien ); { // Khai bao bien cuc bo:
int a = 5;
// Vong lap do...while
do {
cout << "Gia tri cua a la: " << a << endl;
a = a + 1; }
while( a < 15 );
return 0; }

for, while, do… while


• Số lần lặp xác định ngay trong câu lệnh for
int n = 10;
for (int i = 1; i <= n; i++)
…;

int i = 1;
while (i <= n)
{
…;
}

int i = 1;
do {
…;
} while (i > n);

Câu lệnh lặp

36
9/12/2022

while & do… while


• while có thể không thực hiện lần nào.
• do… while sẽ được thực hiện ít nhất 1 lần.
int n = 100;
while (n < 10)
{
…;
}

do
{
printf(“Nhap n: ”);
scanf(“%d”, &n);
}
while (n > 10);

Câu lệnh lặp

2. Cấu trúc lặp:


2.4 Các lệnh điều khiển vòng lặp #include <iostream>
Lệnh break using namespace std;
break; int main ()
{ // Khai bao bien cuc bo:
int a = 10;
// Vong lap do...while
do {
cout << "Gia tri cua a la: " << a << endl;
a = a + 1;
if( a > 15)
a>15 break { // Ket thuc vong lap
break; }
}
while( a < 20 );
return 0;
}

37
9/12/2022

2. Cấu trúc lặp: while(true) {


int giaithua = 1;
2.4 Các lệnh điều khiển vòng lặp cout << "Nhap so n: ";
Lệnh break cin >> n;

//Nhap n nho hon 0 de thoat khoi vong lap


if(n < 0) {
cout << " So am khong co giai thua" << endl;
break;
}

if ( n > 0) {
for(int i = 1; i <=n; i++) {
giaithua = giaithua * i;
}
}
cout << " Giai thua cua " << n << " la: " << giaithua << endl;

}
return 0;

2. Cấu trúc lặp: Lệnh continue trong C++ làm việc hơi giống với lệnh break. Thay vì bắt buộc kết
thúc, nó bắt buộc vòng lặp tiếp theo diễn ra, bỏ qua bất kỳ đoạn code nào ở giữa.
2.4 Các lệnh điều khiển vòng lặp
Lệnh continue #include <iostream>
continue; using namespace std;
int main ()
{ // Khai bao bien cuc bo: int a = 10; // vong lap do...while
do { if( a == 15) { // nhay qua buoc lap. a = a + 1; continue; }
cout << "Gia tri cua a la: " << a << endl;
a = a + 1; }
while( a < 20 );
return 0; }

38
9/12/2022

2. Cấu trúc lặp:


2.4 Các lệnh điều khiển vòng lặp #include <iostream> using namespace std;
Lệnh goto
int main ()
goto label; { // Khai bao bien cuc bo: int a = 10;
.. . // Vong lap do...while
label: lenh; VONGLAP:do {
if( a == 15) {
// nhay qua buoc lap.
a = a + 1;
goto VONGLAP; }
cout << "Gia tri cua a la: " << a << endl;
a = a + 1; }
while( a < 20 );
return 0; }

2. Cấu trúc lặp: Ghi chú: Sử dụng lệnh goto gây khó khăn cho bất kỳ ngôn
2.4 Các lệnh điều khiển vòng lặp
Lệnh goto
ngữ chương trình nào bởi vì nó gây khó khăn cho việc theo
dấu dòng điều khiển của một chương trình, làm cho chương
trình khó để hiểu và khó để chỉnh sửa. Bất kỳ chương trình
nào sử dụng một lệnh goto có thể được viết lại để có thể
không cần lệnh goto này

goto label;
.. .
label: lenh;

39
9/12/2022

//Khai báo hàm thư viện


#include <iostream>
using namespace std;
// Khai báo hàm xử lý chính
3. Định nghĩa hàm và gọi hàm int main() {
//biến nhập
int Sothu1;
Giá trị đầu vào Hàm xử lý Giá trị trả về int Sothu2;
chính //biến xuất
int Tong;
//nhập liệu
cout<<"Nhap so thu 1";
cin>>Sothu1;
cout<<"Nhap so thu 2";
cin>>Sothu2;
//xử lý
Tong =Sothu1+Sothu2;
//kết xuất
cout<<"Tong hai so la:"<<Tong;
return 0;
}

3. Định nghĩa hàm và gọi hàm


Hàm (Function) trong C++ là tập hợp nhiều câu lệnh để thực hiện một chức
năng cụ thể nào đó.
Hàm có thể được gọi lại ở nhiều nơi khác nhau trong chương trình
• Cú pháp <kiểu trả về> <tên hàm>([<danh sách tham số>])
{
<các câu lệnh>
[return <giá trị>;]
}

• Trong đó
• <kiểu trả về> : kiểu bất kỳ của C (char, int, long, float,…). Nếu không trả về thì là void.
• <tên hàm>: theo quy tắc đặt tên định danh. (viết không dấu, dính liền, không có ký tự đặc
biệt)
• <danh sách tham số> : tham số hình thức đầu vào giống khai báo biến, cách nhau bằng dấu ,
• <giá trị> : trả về cho hàm qua lệnh return.

40
9/12/2022

//Khai báo hàm thư viện


#include <iostream>
using namespace std;
//khai báo hàm con
int TinhTong(int So1,int So2)
3. Định nghĩa hàm và gọi hàm { int Kq;
Kq= So1 + So2;
Bài tập 1: Viết chương trình tính tổng 2 số nguyên, return Kq;}
// Khai báo hàm xử lý chính
- sử dụng chương trình con TinhTong int main() {
//biến nhập//biến xuất
Hàm xử lý chính Giá trị đầu ra int Sothu1, Sothu2,Tong;
//xử lý //nhập liệu
cout<<"Nhap so thu 1";
cin>>Sothu1;
cout<<"Nhap so thu 2";
Giá trị đầu vào Giá trị trả về
cin>>Sothu2;
//xử lý
Hàm con
Tong =TinhTong(Sothu1,Sothu2);
TinhTong
//kết xuất
cout<<"Tong hai so la:"<<Tong;
return 0;}

//Khai báo hàm thư viện


#include <iostream>
using namespace std;
//khai báo hàm con
3. Định nghĩa hàm và gọi hàm float TinhDienTich(float So1,float So2)
{ float Kq;
Bài tập 2: Viết chương trình tính diện tích hình chữ nhật Kq= So1 * So2;
-Sử dụng chương trình con tính diện tích return Kq;}
// Khai báo hàm xử lý chính
int main() {
Giá trị đầu ra //biến nhập, biến xuất
Hàm xử lý chính
float Chieudai, Chieurong, Dientich;
//xử lý
//nhập liệu
cout<<"Nhap chieu dai";
cin>> Chieudai;
Giá trị đầu vào: Float Giá trị trả về: Float cout<<"Nhap chieu rong";
cin>> Chieurong;
Hàm con //xử lý
TinhDienTich Dientich =TinhDienTich(ChieuDai,ChieuRong);
//kết xuất
cout<<" Dien tich hcn la: "<< Dientich;
return 0;}

41
9/12/2022

//Khai báo hàm thư viện


3. Định nghĩa hàm và gọi hàm #include <iostream>
using namespace std;
Bài tập 3: Viết chương trình tính tích hai phân số // Khai báo hàm xử lý chính
-Sử dụng chương trình con nhập số nguyên int main ()
{ //biến nhập//biến xuất
int Tuso1, Mauso1,Tuso2, Mauso2, Tusotich, Mausotich;
Hàm xử lý chính Giá trị đầu ra //nhập liệu
//nhập liệu cout<<“Nhap tu so phan so thu nhat ";
cin>> Tuso1;
cout<<“Nhap mau so phan so thu nhat”;
cin>> Mauso1;
cout<<“Nhap tu so phan so thu hai”;
Giá trị đầu vào: string Giá trị trả về: int
cin>> Tuso2;
cout<<“Nhap mau so phan so thu hai”;
Hàm con cin>> Mauso2;
NhapSoNguyen //xử lý
Tusotich = Tuso1* Tuso2;
Mausotich = Mauso1* Mauso2;
//kết xuất
cout<<“Tich hai phan so tren la”<<Tusotich << “/” <<Mausotich;
}

//Khai báo hàm thư viện


#include <iostream>
using namespace std;
//khai báo hàm con
int NhapSoNguyen(string Chuoi)
3. Định nghĩa hàm và gọi hàm { int Kq;
cout<<Chuoi;
Bài tập 3: Viết chương trình tính tích hai cin>> Kq;
return Kq;
phân số }
-Sử dụng chương trình con nhập số // Khai báo hàm xử lý chính
nguyên int main ()
Giá trị đầu ra { //biến nhập//biến xuất
Hàm xử lý chính int Tuso1, Mauso1,Tuso2, Mauso2, Tusotich, Mausotich;
//nhập liệu //nhập liệu
Tuso1=NhapSoNguyen(“Nhap tu so phan so thu nhat”);
Mauso1=NhapSoNguyen(“Nhap mau so phan so thu nhat”);
Giá trị đầu vào: chuỗi Giá trị trả về: int Tuso2=NhapSoNguyen(“Nhap tu so phan so thu hai”);
Mauso2=NhapSoNguyen(“Nhap mau so phan so thu nhat”);
//xử lý
Hàm con Tusotich = Tuso1* Tuso2;
NhapSoNguyen Mausotich = Mauso1* Mauso2;
//kết xuất
cout<<“Tich hai phan so tren la”<<Tusotich << “/” <<Mausotich;
}

42
9/12/2022

//Khai báo hàm thư viện


#include <iostream>
using namespace std;
//khai báo hàm con
int NhapSoNguyen(string Chuoi) int TinhTich(int So1, int So2)
3. Định nghĩa hàm và gọi hàm { int Kq; { int Kq;
cout<<Chuoi; Kq = So1 * So2;
Bài tập 3: Viết chương trình tính tích hai cin>> Kq; return Kq;
return Kq; }
phân số }
-Sử dụng chương trình con nhập số // Khai báo hàm xử lý chính
nguyên int main ()
Giá trị đầu ra { //biến nhập//biến xuất
Hàm xử lý chính int Tuso1, Mauso1,Tuso2, Mauso2, Tusotich, Mausotich;
//nhập liệu //nhập liệu
Tuso1=NhapSoNguyen(“Nhap tu so phan so thu nhat”);
Mauso1=NhapSoNguyen(“Nhap mau so phan so thu nhat”);
Giá trị đầu vào: chuỗi Giá trị trả về: int Tuso2=NhapSoNguyen(“Nhap tu so phan so thu hai”);
Mauso2=NhapSoNguyen(“Nhap mau so phan so thu nhat”);
//xử lý
Hàm con Tusotich = TinhTich(Tuso1,Tuso2);
NhapSoNguyen Mausotich = TinhTich(Mauso1,Mauso2);
//kết xuất
cout<<“Tich hai phan so tren la”<<Tusotich << “/” <<Mausotich;
}

//Khai báo hàm thư viện


#include <iostream>
using namespace std;
//khai báo hàm con
int NhapSoNguyen(string Chuoi) int TinhTich(int So1, int So2)
1. Định nghĩa hàm và gọi hàm { int Kq;
{ int Kq;
cout<<Chuoi; Kq = So1 * So2;
Bài tập 3: Viết chương trình tính tích hai cin>> Kq; return Kq;
phân số return Kq; }
// Khai báo hàm xử lý chính }
int main ()
{ //biến nhập//biến xuất void KetXuat(int So1, int So2)
int Tuso1, Mauso1,Tuso2, Mauso2, Tusotich, Mausotich; {
//nhập liệu cout<<“Tich hai phan so tren la”<<So1<< “/” <<So2;
Tuso1=NhapSoNguyen(“Nhap tu so phan so thu nhat”); }
Mauso1=NhapSoNguyen(“Nhap mau so phan so thu nhat”);
Tuso2=NhapSoNguyen(“Nhap tu so phan so thu hai”);
Mauso2=NhapSoNguyen(“Nhap mau so phan so thu nhat”);
//xử lý
Tusotich = TinhTich(Tuso1,Tuso2);
Mausotich = TinhTich(Mauso1,Mauso2);
//kết xuất
KetXuat(Tusotich,Mausotich);
return 1; }

43
9/12/2022

1. Định nghĩa hàm và gọi hàm

Bài tập 2* (thu hoạch 1): Viết chương trình tính diện tích hình chữ nhật
-Sử dụng 3 chương trình con

DienTich Hàm con


Hàm xử lý chính
XuatDienTich
//xử lý

Float
Float Float String

Hàm con Hàm con


TinhDienTich NhapCanh

1. Định nghĩa hàm và gọi hàm Bài tập 4: Viết chương trình tính tổng hai phân số: sử dụng hàm con
//Khai báo hàm thư viện NhapSoNguyen, TinhTong
#include <iostream> . + . // Khai báo hàm xử lý chính
using namespace std; + = int main ()
//khai báo hàm con . { //biến nhập
int NhapSoNguyen(string Chuoi) int Tuso1, Mauso1,Tuso2, Mauso2;
{ int Kq; //biến xuất
cout<<Chuoi; int Tusotong, Mausotong;
cin>> Kq; //nhập liệu
return Kq; Tuso1=NhapSoNguyen(“Nhap tu so phan so thu nhat “);
} Mauso1=NhapSoNguyen(“Nhap mau so phan so thu nhat”);
int TinhTongTu(int Ts1,int Ms1,int Ts2,int Ms2) Tuso2=NhapSoNguyen(“Nhap tu so phan so thu hai”);
{ int Kq; Mauso2=NhapSoNguyen(“Nhap mau so phan so thu hai”);
Kq = Ts1 * Ms2 + Ts2 * Ms1; //xử lý
return Kq;} Tusotong = TinhTongTu(Tuso1, Mauso1,Tuso2, Mauso2);
int TinhTongMau(int Ms1,int Ms2) Mausotong = TinhTongMau(Mauso1,Mauso2);
{ int Kq;; //kết xuất
Kq = Ms1 * Ms2; cout<<“Tich hai phan so tren la”<<Tusotong << “/” <<Mausotong;
return Kq;} }

44
9/12/2022

Bài tập 5: Viết chương trình tính khoảng cách 2 điểm (x1,y1) và (x2,y2)
Sử dụng hàm con nhập điểm và tính khoảng cách điểm
Y

B
yB

A
= − + −
yA C

xA 0 xB x

Bài tập 5: Viết chương trình tính khoảng cách 2 điểm (x1,y1) // Khai báo hàm xử lý chính
và (x2,y2) int main()
Sử dụng hàm con nhập điểm và tính khoảng cách điểm { //biến nhập
//Khai báo hàm thư viện int xA,yA,xB,yB;
#include <iostream> //biến xuất
#include <math.h> float Khoangcach;
using namespace std; //nhập liệu
//khai báo hàm con
xA= NhapDiem(“Nhap hoanh do toa do A“);
int NhapDiem(string Chuoi)
{ int Kq; yA=NhapDiem(“Nhap tung do toa do A”);
cout<<Chuoi; xB=NhapDiem(“Nhap hoanh do toa do B”);
cin>> Kq; yB=NhapDiem(“Nhap tung do toa do B”);
return Kq; //xử lý
}
Khoangcach = TinhKC(xA,yA,xB,yB);
float TinhKC( int xA,int yA,int xB,int yB)
{ float Kq; //kết xuất
Kq= sqrt((xA-xB)*(xA-xB)+(yA-yB)*(yA- cout<<" Khoang cach hai diem AB la: "<< Khoangcach;
yB)); return 0;
return Kq;} }

45
9/12/2022

Bài tập 7:Nhập vào ba cạnh a, b, c của tam giác. Tính diện tích tam giác.

ℎ= . ( − ). ( − ). ( − )
p : nửa chu vi + +
=
2
( Công thức Heron)

Theo Wikipedia

Bài tập 7:Nhập vào ba cạnh a, b, c của tam giác. Tính diện tích
tam giác.Viết hàm con nhập cạnh ,tính diện tích và hàm kết xuất
//Khai báo hàm thư viện // Khai báo hàm xử lý chính
#include <iostream> int main()
#include <math.h> { //biến nhập
using namespace std; float a,b,c;
//khai báo hàm con //biến xuất
float NhapCanh(string Chuoi) float Dientich;
{ float Kq; //nhập liệu
cout<<Chuoi; a=NhapCanh(“Nhap canh a: ”);
cin>> Kq; b=NhapCanh(“Nhap canh b: ”);
return Kq; c=NhapCanh(“Nhap canh c: ”);
} //xử lý
float TinhKC( float Canha, float Canhb, float Canhc) Dientich=TinhKC(a,b,c);
{ float Kq; //kết xuất
float p=(a+b+c)/2; cout<<" Khoang cach hai diem AB la: "<< Dientich;
Kq= sqrt(p*(p-a)*(p-b)*(p-c)); return 0;
return Kq; }
}

46
9/12/2022

Bài thu hoạch

Bài 1: Viết chương trình tính diện tích tam giác


Dùng chương trình con nhập chiều dài cạnh và tính diện tích
Biết Diện tích tam giác = (đáy x cao ): 2

2. Xây dựng hàm dùng prototype ( khai danh tính hàm)


Bài tập 8: Viết chương trình tính tổng 2 số nguyên,
- sử dụng chương trình con TinhTong
// Khai báo hàm xử lý chính //khai báo hàm con
int main() { int TinhTong(int So1,int So2)
//biến nhập//biến xuất { int Kq;
//Khai báo hàm thư viện Kq= So1 + So2;
int Sothu1, Sothu2,Tong;
#include <iostream> return Kq;}
//nhập liệu
using namespace std; cout<<"Nhap so thu 1";
//khai báo tên hàm con
cin>>Sothu1;
int TinhTong(int So1,int So2);
cout<<"Nhap so thu 2";
cin>>Sothu2;
//xử lý
Tong =TinhTong(Sothu1,Sothu2);
//kết xuất
cout<<"Tong hai so la:"<<Tong;
return 0;}

47
9/12/2022

Câu 8: Trình bày thuật toán và viết chương trình C++ tính n!. Biết n!=1.2.3.4…..n
Ví dụ: 5! = 1.2.3.4.5

Lưu ý khi chạy thử nghiệm nên nhập số n<10.


S Gợi ý:
Tich = 1;
i<=n
While ()
start {
đ Tich = Tich * i;
……………..}
Tich = Tich * i ;
//Biến nhập, xuất i=i+1;
int n, Tich;

Tich=1 ;
i=1; Xuất ra màn hình Tich end

Câu 2-KTGK: Trình bày thuật toán và viết chương trình C++ tính n!. Biết n!=1.2.3.4…..n
Ví dụ: 5! = 1.2.3.4.5

int i=1 ;i<=n ; i=i+1 / i++ S

start
đ Lưu ý khi chạy thử nghiệm nên nhập số n<10.
Gợi ý:
Tich = Tich * i ; Tich = 1;
//Biến nhập, xuất For()
int n, Tich; {
Tich = Tich * i;
……………..}
Tich=1 ;
Xuất ra màn hình Tich end

48
9/12/2022

//Khai báo hàm thư viện //Khai báo hàm thư viện
#include <iostream> #include <iostream>
using namespace std; using namespace std;
// Khai báo hàm xử lý chính // Khai báo hàm xử lý chính
int main() int main()
{ //biến nhập { //biến nhập
int n, i=1; int n ;
//biến xuất //biến xuất
int Tich=1; int Tich;
//nhập liệu //nhập liệu
cout<<“Nhap n“; cout<<“Nhap n“;
cin>> n; cin>> n;
//xử lý //xử lý
while (i<=n) for(int i =1 ; i<=n ; i++ )
{ {
Tich = Tich*i; Tich = Tich*i;
i=i+1; //i++ }
} cout<<“Ket qua la: ”<<Tich; cout<<“Ket qua la: ”<<Tich; return 0;
return 0; }
}

2. Xây dựng hàm dùng prototype ( khai danh tính hàm)

Bài tập 9: Một giải bóng đá có 12 đội tham gia thi đấu , đấu vòng tròn 2 lượt gồm
lượt đi và lượt về . Hỏi cả giải có bao nhiêu trận đấu ?

Xây dựng chương trình cho người dùng nhập số đội thi đấu vòng tròn 2 lượt và cho
biết kết quả có bao nhiêu trận đấu?

49
9/12/2022

2. Xây dựng hàm dùng prototype ( khai danh tính hàm)


Bài tập 9:
- Hàm giai thừa: n!

- Hàm tổ hợp chập

Toán học tổ hợp (hay giải tích tổ hợp, đại số tổ hợp, lý thuyết tổ hợp) là một ngành toán học rời rạc, nghiên cứu
về các cấu hình kết hợp các phần tử của một tập hợp có hữu hạn phần tử. Các cấu hình đó là các hoán vị, chỉnh
hợp, tổ hợp,... các phần tử của một tập hợp.
Nó có liên quan đến nhiều lĩnh vực khác của toán học, như đại số, lý thuyết xác suất, lý thuyết ergod (ergodic theory)
và hình học, cũng như đến các ngành ứng dụng như khoa học máy tính và vật lý thống kê.
Toán học tổ hợp liên quan đến cả khía cạnh giải quyết vấn đề lẫn xây dựng cơ sở lý thuyết, mặc dù nhiều phương
pháp lý thuyết vững mạnh đã được xây dựng, tập trung vào cuối thế kỷ XX (xem trang Danh sách các chủ đề trong
toán học tổ hợp). Một trong những mảng lâu đời nhất của toán học tổ hợp là lý thuyết đồ thị, mà bản thân lý thuyết này
lại có nhiều kết nối tự nhiên đến các lĩnh vực khác ( Wikipedia)

2. Xây dựng hàm dùng prototype ( khai danh tính hàm)

Bài tập 9: Một giải bóng đá có 12 đội tham gia thi đấu , đấu vòng tròn 2 lượt gồm
lượt đi và lượt về . Hỏi cả giải có bao nhiêu trận đấu ?

HD: -Mỗi trận bóng đá gồm 2 đội lấy từ 12 đội Vậy số trận diễn ra từ 12 đội coi như là số tổ hợp
chập 2 của 12 phần tử , vậy có = 66 trận.
- vì có lượt đi và lượt về nên số trận đấu là 66.2=132 trận.

50
9/12/2022

2. Xây dựng hàm dùng prototype ( khai danh tính hàm)

Bài tập 9: Xây dựng chương trình cho người dùng nhập số đội thi đấu vòng tròn 2
lượt và cho biết kết quả có bao nhiêu trận đấu?
start Sodoi = nhập giá trị từ bàn phím Xuất Sotrandau ra
//xử lý
màn hình
SoTranDau = ToHopChap(2,k)*2

end
Giá trị đầu vào Giá trị đầu ra Kq
2,n
Giá trị đầu vào n
Hàm ToHopChap Hàm GiaiThua

Giá trị đầu ra Kq

Bài tập 9: Xây dựng chương trình cho người dùng nhập số đội thi đấu vòng tròn 2
lượt và cho biết kết quả có bao nhiêu trận đấu?

start Sodoi = nhập giá trị từ bàn phím Xuất Sotrandau ra


//xử lý
màn hình
SoTranDau = ToHopChap(n)

end
Giá trị đầu vào Giá trị đầu ra Kq
n

Hàm ToHopChap
Kq = Giaithua(n)/(2*Giaithua(n-2))

Hàm GiaiThua(n) Hàm GiaiThua(n-2)

51
9/12/2022

2. Xây dựng hàm dùng prototype ( khai danh tính hàm)


Bài tập 9: Xây dựng chương trình cho người dùng nhập số đội thi đấu vòng tròn 2
lượt và cho biết kết quả có bao nhiêu trận đấu?
//Khai báo hàm thư viện
#include <iostream> // Khai báo hàm xử lý chính
using namespace std; int main ()
//khai báo hàm con { //biến nhập//biến xuất
long ToHopChap(int pSoDoi) int SoDoi;
{ long SoTranDau;
long Kq; //nhập liệu
Kq = GiaiThua(pSoDoi)/(2*GiaiThua(pSoDoi-2)); cout<<“Nhap so doi bong: ";
return Kq; cin>> SoDoi;
} //xử lý
long GiaiThua(int n) SoTranDau = ToHopChap(SoDoi)*2;
{ long Kq=1; //kết xuất
for (int i=1; i<=n;i++) Lỗi không hiểu hàm ở đâu!! cout<<“So tran dau la: ”<< SoTranDau;
Kq = Kq*i; }
return Kq;}

2. Xây dựng hàm dùng prototype ( khai danh tính hàm)


Bài tập 9: Xây dựng chương trình cho người dùng nhập số đội thi đấu vòng tròn 2
lượt và cho biết kết quả có bao nhiêu trận đấu?
//Khai báo hàm thư viện
#include <iostream> // Khai báo hàm xử lý chính
using namespace std; int main ()
//khai báo hàm con { //biến nhập//biến xuất
long GiaiThua(int n) int SoDoi;
{ long Kq=1; long SoTranDau;
for (int i=1; i<=n;i++) //nhập liệu
Kq = Kq*i; cout<<“Nhap so doi bong: ";
return Kq;} cin>> SoDoi;
long ToHopChap(int pSoDoi) //xử lý
{ SoTranDau = ToHopChap(SoDoi)*2;
long Kq; //kết xuất
Kq = GiaiThua(pSoDoi)/(2*GiaiThua(pSoDoi-2)); cout<<“So tran dau la: ”<< SoTranDau;
return Kq; }
}

52
9/12/2022

2. Xây dựng hàm dùng prototype ( khai danh tính hàm)


Bài tập 9: Xây dựng chương trình cho người dùng nhập số đội thi đấu vòng tròn 2
lượt và cho biết kết quả có bao nhiêu trận đấu?
//khai báo tên hàm con
//Khai báo hàm thư viện // Khai báo hàm xử lý chính long GiaiThua(int n)
#include <iostream> int main () { long Kq=1;
using namespace std; { //biến nhập//biến xuất for (int i=1; i<=n;i++)
int SoDoi; Kq = Kq*i;
//khai báo tên hàm con long SoTranDau; return Kq;}
long GiaiThua(int n); //nhập liệu long ToHopChap(int pSoDoi)
long ToHopChap(int pSoDoi); cout<<“Nhap so doi bong: "; {
cin>> SoDoi; long Kq;
//xử lý Kq =
SoTranDau = ToHopChap(SoDoi)*2; GiaiThua(pSoDoi)/(2*GiaiThua(pSoDoi-
//kết xuất 2));
cout<<“So tran dau la: ”<< SoTranDau; return Kq;
} }

Dùng hàm con NhapSoNguyen, ToHopChap, GiaiThua , KetXuat


Dùng khai báo danh tính hàm long ToHopChap(int k, int n)
{
Biết long Kq;
Số món khai vị là 2 trong n món khai vị Kq =
Số món chính là 4 trong m món chính GiaiThua(n)/(GiaiThua(k)*GiaiThua(n-k));
return Kq;
Số món lasét là 1 trong p món lasét }

Số món n, m, p là số món do người dùng tự nhập vào


Thực đơn sẽ được tính như sau:
= + +

53
9/12/2022

3.Truyền dữ liệu vào hàm dùng tham trị:

#include<stdio.h>
Kết quả:
void Tanglen(int num) { Truoc khi goi phuong thuc x = 100
num = num + 1; Sau khi goi phuong thuc x = 100
}

int main() {
int x = 100; 100
cout<<“Truoc khi goi phuong thuc x = “<<x);
TangLen(x); // truyen tham tri vao phuong thuc
cout<<“Sau khi goi phuong thuc x = “<<x;
return 0; }

4. Truyền dữ liệu vào hàm dùng tham biến

#include<stdio.h>

void change(int *num) {


Kết quả:
*num = *num + 1;
Truoc khi goi phuong thuc x = 100
} Sau khi goi phuong thuc x = 101

int main() {
int x = 100; 100 Biến (Tên biến , Giá trị biến)
cout<<“Truoc khi goi phuong thuc x “<<x);
TangLen(&x); // truyen tham chieu vao phuong thuc
100
cout<<“Sau khi goi phuong thuc x = “<<x);
return 0; } X : tên chính
num : tên bí danh, tên ở nhà

54
9/12/2022

3.Truyền dữ liệu vào hàm dùng tham trị:


#include<stdio.h>

int Tanglen(int num) { Kết quả:


int kq; Truoc khi goi phuong thuc x = 100
kq = num + 1; Sau khi goi phuong thuc x = 100
return kq;
}
int main() {
int x = 100;
cout<<“Truoc khi goi phuong thuc x = “<<x);
x = TangLen(x); // truyen tham tri vao phuong thuc
cout<<“Sau khi goi phuong thuc x = “<<x;
return 0; }

4. Truyền dữ liệu vào hàm dùng tham biến:


Bài tập 10: thực hiện sắp xếp tăng dần 3 số do người dùng nhập vào
So1 So2 So3

8 -2 3

Bien1 Bien2

-2 8 3 5 1

BienTam

-2 3 8 ……

55
9/12/2022

4. Truyền dữ liệu vào hàm dùng tham biến:


Bài tập 10: thực hiện sắp xếp tăng dần 3 số do người dùng nhập vào

//Khai báo hàm thư viện // Khai báo hàm xử lý chính


#include <iostream> int main ()
using namespace std; { //biến nhập//biến xuất
//khai bao hàm con int So1, So2, So3;
void HoanVi ( int a, int b) //nhập liệu
{ cout<<“Nhap danh sach cac so: ";
int TrungGian; cin>> So1>>So2>>So3;
Trung Gian=a; //xử lý
a=b; if (So1>So2) {HoanVi(So1,So2)}
b=a; if (So2>So3) {HoanVi(So2,So3)}
} if (So1>So2) {HoanVi(So1,So2)}
//kết xuất
cout<<“Danh sach sau khi sap xep
la”<< So1<<“ ”<< So2<<“ “<<So3;
}

4. Truyền dữ liệu vào hàm dùng tham biến:


Bài tập 10: thực hiện sắp xếp tăng dần 3 số do người dùng nhập vào

// Khai báo hàm xử lý chính


//Khai báo hàm thư viện int main ()
#include <iostream> { //biến nhập//biến xuất
using namespace std; int So1, So2, So3;
//khai bao hàm con //nhập liệu
void HoanVi ( int *a, int *b) cout<<“Nhap danh sach cac so: ";
{ cin>> So1>>So2>>So3;
int TrungGian; //xử lý
TrungGian=*a; if (So1>So2) {HoanVi(&So1,&So2);}
*a=*b; if (So2>So3) {HoanVi(&So2,&So3);}
*b=TrungGian;} if (So1>So2) {HoanVi(&So1,&So3);}
//kết xuất
cout<<“Danh sach sau khi sap xep la”<<
So1<<“ ”<< So2<<“ “<<So3;
}

56
9/12/2022

4. Truyền dữ liệu vào hàm dùng tham biến:


Bài tập *: thực hiện sắp xếp giảm dần 3 số do người dùng nhập vào

So1 So2 So3

8 -2 3
Bien1 Bien2

5 1

BienTam

……

5.Bài tập nâng cao kỹ năng: Gợi ý: Toán tử số học trong C++
Bài 1: Nhập vào 1 số nguyên kiểm tra tính chẵn lẻ
Giả sử biến A giữ giá trị 10, biến B giữ 20 thì:
Toán tử Miêu tả Ví dụ
+ Cộng hai toán hạng A + B kết quả là 30
- Trừ toán hạng thứ hai từ toán hạng đầu A - B kết quả là -10
* Nhân hai toán hạng A * B kết quả là 200
/ Phép chia B / A kết quả là 2
% Phép lấy số dư B % A kết quả là 0 ; 3%2 = 1
Toán tử tăng (++), tăng giá trị toán hạng
++ A++ kết quả là 11
thêm một đơn vị <=> a= a+1 ;
Toán tử giảm (--), giảm giá trị toán hạng đi
-- A-- kết quả là 9
một đơn vị <=> a=a-1;

57
9/12/2022

5.Bài tập nâng cao kỹ năng:

Bài 1: Nhập vào 1 số nguyên kiểm tra tính chẵn lẻ

start
đúng Xuất ra màn hình “So
chan”
//biến nhập
So kiểu số nguyên
end

So = giá trị nhập từ sai Xuất ra màn hình “So


So % 2 = = 0
bàn phím le”

//khai báo hàm thư viện


#include <io.h> //kết xuất
Xuất ra màn hình ChuoiKQ;
Using namepace std ;
}
//khai báo hàm xử lý chính
{ //biến nhập
Int So;
//biến xuất
String ChuoiKQ;
//nhập liệu
Xuất ra màn hình “nhap gia tri tu ban phim”;
So = giá trị nhập từ bàn phím;
//xử lý
If (So%2==0)
ChuoiKQ = “Day la so chan”;
else
ChuoiKQ = “Day la so le”;

58
9/12/2022

5.Bài tập nâng cao kỹ năng:

Bài 2: Nhập vào 1 số nguyên kiểm tra dương âm

start
đúng Xuất ra màn hình “So
duong”
//biến nhập
So kiểu số nguyên
end

So = giá trị nhập từ sai Xuất ra màn hình “So


So > 0
bàn phím am”

5.Bài tập nâng cao kỹ năng:


Bài 3: Cho 2 số nhập từ bàn phím, hoán đổi 2 giá trị số trên 2 biến

Cách 1: Dùng biến tạm


Cách 2: Dùng hàm trong C++

14 5

So1 So2

Bientam

59
9/12/2022

5.Bài tập nâng cao kỹ năng:


Bài 3: Cho 2 số nhập từ bàn phím, hoán đổi 2 giá trị số trên 2 biến:
Cách 1: Dùng biến tạm

Bientam kiểu số
start nguyên

//biến nhập
So1,So2 kiểu số Bientam =So1;
nguyên So1=So2;
So2=Bientam;
So1,So2 = giá trị nhập
từ bàn phím

end

5.Bài tập nâng cao kỹ năng:


Bài 3: Cho 2 số nhập từ bàn phím, hoán đổi 2 giá trị số trên 2 biến:
Cách 2: Dùng hàm trong C++ //khai bao thu vien
#include <iostream>
#include <algorithm>
using namespace std;
//khai bao ham xu ly chinh
int main()
{ //bien nhap
int a = 3;
int b = 4;
//xu ly
swap(a,b);
//ket xuat
cout << "a = " << a << "; b = " << b;
return 0;}

60
9/12/2022

5.Bài tập nâng cao kỹ năng:

Bài 4: Tìm ước chung lớn nhất của 2 số nhập từ bàn phím

Định nghĩa ước chung lớn nhất


Ước chung lớn nhất (GCD – Greatest Common Divisor) của 2 số nguyên a và b là số nguyên lớn
nhất d thỏa mãn tính chất cả a và b đều chia hết cho d

Cách 1. Tìm UCLN sử dụng phép trừ


Cách 2. Tìm UCLN sử dụng phép chia dư a %= b; // a = a % b

Cách 3. Tìm UCLN sử dụng giải thuật Euclid

Cách 4: Tìm UCLN sử dụng hàm có sẵn của C++

5.Bài tập nâng cao kỹ năng:


Bài 4: Tìm ước chung lớn nhất của 2 số nhập từ bàn phím

start

Cách 1. Tìm UCLN sử dụng phép trừ

8 14
8 6 UocSoChungLN end
2 6
2 4
2 2

61
9/12/2022

5.Bài tập nâng cao kỹ năng: Bài 4: Tìm ước chung lớn nhất của 2 số nhập từ bàn phím
Cách 1. Tìm UCLN sử dụng phép trừ
start

//Xử lý
while (a!=b)
sai {
a!=b UocSoChungLN end
if ( a>b)
Đúng {
a=a-b;}
else
{ b=b-a;}
}
//Kết xuất
Cout<<“USCLN la: ”<<a;

5.Bài tập nâng cao kỹ năng:


Bài 4: Tìm ước chung lớn nhất của 2 số nhập từ bàn phím
Cách 4: Tìm UCLN sử dụng hàm có sẵn của C++
//khai bao ham thu vien
#include <iostream>
#include <algorithm>
using namespace std;
//khai bao ham xu ly chinh
int main(){
int SoThuNhat = 8;
int SoThuHai = 14;

int UocSoCLN; // __
UocSoCLN=__gcd(SoThuNhat,SoThuHai);
cout<<"Uoc So Chung Lon Nhat la: "<<UocSoCLN;
}

62
9/12/2022

5.Bài tập nâng cao kỹ năng:


Bài 5: Tìm bội số chung nhỏ nhất của 2 số nhập từ bàn phím

Trong số học, bội số chung nhỏ nhất (hay còn gọi tắt là bội chung nhỏ nhất, viết tắt là BCNN,
tiếng Anh: least common multiple hoặc lowest common multiple (LCM) hoặc smallest common
multiple) của hai số nguyên a và b là số nguyên dương nhỏ nhất chia hết cho cả a và b.[1] Tức là
nó có thể chia cho a và b mà không để lại số dư. Nếu a hoặc b là 0, thì không tồn tại số nguyên
dương chia hết cho a và b, khi đó quy ước rằng LCM(a, b) là 0.

C1. Lặp tăng dần cho tới khi tìm được BCNN

C2. Tối ưu lặp của cách 1


C3. Phân tích thừa số nguyên tố
C4. Tìm BCNN của 2 số dựa vào UCLN

//Xử lý
c=a; d=b; //Tich =a.b;
5.Bài tập nâng cao kỹ năng: while (a!=b)
Bài 5: Tìm bội số chung nhỏ nhất của 2 số nhập từ bàn phím {
if ( a>b)
{
C4. Tìm BCNN của 2 số dựa vào UCLN a=a-b;}
else
8 14 { b=b-a;}
8 6 }
kq = (c*d)/a;//tính BSCNN
2 6 //Kết xuất
2 4 cout<<“BSCNN la: ”<<kq;
2 2

8x14 =112
112:2 = 56

63
9/12/2022

5.Bài tập nâng cao kỹ năng:


Bài 6: Viết chương trình C++ để người dùng nhập vào 2 số nguyên và tìm số lớn nhất
trong 2 số đó.

start Nhập So1,So2 từ bàn phím;


Max=So1;

//biến nhập
So1,So2 kiểu số
nguyên đ
Max > So2

//Bien xuat s
Max kiểu số nguyên;
Max=So2 end
cout<<“Nhap vao 2 so bat ky”;
cin>> So1 >> So2;

5.Bài tập nâng cao kỹ năng:


Bài 6: Viết chương trình C++ để người dùng nhập vào 2 số nguyên và tìm số nhỏ nhất
trong 2 số đó.
#include <iostream>
#include <algorithm>
using namespace std;

int main()
{
Cách 2: Sử dụng hàm có sẵn của C++ int a = 3;
int b = 4;
int SoNhoNhat, SoLonNhat;

SoNhoNhat = min(a, b) ;
SoLonNhat = max(a, b);

cout << “So lon nhat la: = " <<SoLonNhat ;


cout<<“So nho nhat la: = “<< SoNhoNhat;
return 0;
}

64
9/12/2022

5.Bài tập nâng cao kỹ năng:


Bài 7: Viết chương trình C++ để người dùng nhập vào 4 số nguyên và tìm số lớn nhất trong 4 số đó
Nhập So1,So2,So3,So4 từ
bàn phím;
Max=So1;
start

Max < So2 đ


Max=So2
//biến nhập if end
So1,So2,So3,So4 kiểu
số nguyên
đ
Max < So3 Max=So3
//Bien xuat if
Max kiểu số nguyên;

Max=So4
Max < So4 đ
cout<<“Nhap vao 3 so bat ky”;
cin>> So1 >> So2 >> So3 >> So4 ; s Xuất ra Max

5.Bài tập nâng cao kỹ năng:


Bài 8: Viết chương trình C++ kiểm tra số đã cho có phải là số nguyên tố hay không.
Định nghĩa: số nguyên tố là số lớn hơn 1 và chỉ chia hết cho 1 và chính nó.
Ví dụ: 2, 3, 5, 7, 11, 13, 17, ... là những số nguyên tố.
Chú ý: Số 0 và 1 không phải là số nguyên tố. Chỉ có số 2 là số nguyên tố chẵn, tất cả
các số chẵn khác không phải là số nguyên tố vì chúng chia hết cho 2.

65
9/12/2022

5.Bài tập nâng cao kỹ năng:


Bài 8: Viết chương trình C++ kiểm tra số đã cho có phải là số nguyên tố hay không.
start
Xuất ra MH “Khong la
So<2
so nguyen to”
//biến nhập
So kiểu số nguyên
i=2
end
So = giá trị nhập từ
bàn phím Xuất ra MH “La so
i < sqrt(So)
nguyen to”

Xuất ra MH “Khong la
So % i== 0 break
so nguyen to”

5.Bài tập nâng cao kỹ năng:


Bài 8: Viết chương trình C++ kiểm tra số đã cho có phải là số nguyên tố hay không.
Nếu một số n không phải là số nguyên tố, nó có thể được phân thành hai yếu tố a
và b:
n=a*b
Nếu cả hai avà bđều lớn hơn căn bậc hai của n thì a * b sẽ lớn hơn n. Vì vậy, ít nhất
một trong các yếu tố đó phải nhỏ hơn hoặc bằng căn bậc hai của n,

66
9/12/2022

Bài 9: Viết chương trình C++ để tính cước điện thoại bàn cho một hộ gia đình với các
thông số như sau:
•Phí thuê bao bắt buộc là 25,000.
•600 đồng cho mỗi phút gọi của 50 phút đầu tiên.
•400 đồng cho mỗi phút gọi của 150 phút tiếp theo.
•200 đồng cho mỗi phút gọi của 200 phút tiếp theo
đúng
start Phut<=50 Tien = 25000 + 600*Phut

sai

đúng
Phut<=200 Tien = 25000 + 600*50
+400*(Phut -50) ;
//biến nhập
Int Phut; sai
//Biến xuất Long , Float, Int Tien = 25000 + 600*50 + 400
Double Tien; *150 + 200*(Phut-150-50) end

5.Bài tập nâng cao kỹ năng:


Bài 10: Nhập vào số i, yêu cầu xuất ra bảng cửu chương thứ i

start So = giá trị nhập từ bàn phím

Int i =1 ; i<=10 ; i++ end

Int Tich = So * I;
Xuất ra màn hình So + “+” +i+”=”+Tich ;
Cout<<So<<”+”<<i<<”=”<<Tich;

int Tich ;
for (int i=1 ; i<=10 ; i++)
{
Tich = So * i;
cout<<So<<”+”<<i<<”=”<<Tich;

67
9/12/2022

5.Bài tập nâng cao kỹ năng:


Bài 11: Tính kết quả của phép toán 1+1/23+1/33+...+1/n3 (làm tròn 3 chữ số thập
phân)

Gợi ý: //ket xuat So = giá trị nhập từ bàn phím;


cout << fixed; int Tong = 0;
cout << setprecision(3); for (int i=1 ; i<=So ; i++)
cout << KetQua; {
Tong = Tong + 1/(i*i*i)

}
System(“cls”);//clear

Một biến trong C++ là tên của vị trí bộ nhớ. Nó được sử dụng để lưu trữ dữ
liệu. Giá trị của nó có thể được thay đổi và nó có thể được sử dụng lại nhiều
lần. Mỗi biến trong C++ có một loại dữ liệu cụ thể, xác định kích thước của bộ
nhớ của biến; phạm vi các giá trị có thể được lưu trữ trong bộ nhớ đó.

Biến là một cách để thể hiện vị trí bộ nhớ thông qua một cái tên để nó có thể
được xác định một cách dễ dàng. Tên của một biến có thể bao gồm các chữ
cái, chữ số và ký tự gạch dưới. Nó phải bắt đầu bằng một chữ cái thư hoặc
một gạch dưới. Biến trong C++ có phân biệt chữ hoa và chữ thường

136

68
9/12/2022

Cú pháp khai báo biến


Cú pháp để khai báo một biến trong C:

Kiểu biến Danh sách biến;

Ví dụ về khai báo biến:

int a; int a = 10, b = 20; // Khai báo 2 biến kiểu số nguyên


float b; float = 20,8;
char c = 'A';
char c;

137

Quy tắc khai báo biến trong C

Một biến có thể có các chữ cái, chữ số và dấu gạch dưới.
Tên biến chỉ có thể bắt đầu bằng bảng chữ cái và dấu gạch dưới. Nó không thể
bắt đầu bằng chữ số.
Không có khoảng trắng trong tên biến.
Tên biến không phải là bất kỳ từ hoặc từ khóa dành riêng như int, float, vv.

Tên biến hợp lệ Tên biến không hợp lệ:

int a; int 2;
int _ab; int a b;
int a30; int long;

138

69
9/12/2022

Các kiểu biến trong C++


Có một vài kiểu biến trong C++ như sau:

1.Biến local (địa phương).


2.Biến global (toàn cầu).
3.Biến static.
4. Biến external.

139

1. Biến local (địa phương).


Một biến được khai báo bên trong hàm hoặc khối lệnh được gọi là biến địa phương.

Nó phải được khai báo khi bắt đầu khối.

void function1() {
int x = 10; // bien local
}

140

70
9/12/2022

2. Biến global (toàn cục).


Một biến được khai báo bên ngoài hàm hoặc khối lệnh được gọi là biến toàn
cầu. Bất kỳ hàm nào cũng có thể thay đổi giá trị của biến toàn cầu. Nó có sẵn
cho tất cả các chức năng.

Trong ví dụ dưới đây, biến a là biến global.

int a = 20; // bien global

void function1() {
int x = 10; // bien local
}
141

3. Biến static (tĩnh). #include <iostream>


Một biến được khai báo với từ khóa static using namespace std;
được gọi là biến tĩnh.
void function1() {
int x = 10; // bien local
Nó giữ lại giá trị của nó sau nhiều lần gọi static int y = 10; // bien static
hàm. x = x + 1;
y = y + 1;
cout << "x = " << x << ", y = " << y <<endl;
}

int main() {
function1();
x = 11, y = 11
function1();
x = 11, y = 12
function1();
x = 11, y = 13
return 0;
}
142

71
9/12/2022

4. Biến external.
Chúng ta có thể chia sẻ một biến trong nhiều tập tin mã nguồn C bằng cách sử
dụng biến external. Để khai báo biến bên ngoài, bạn cần sử dụng từ khóa
extern
File: myfile.h File: test.cpp
#include <iostream>
#include "myfile.h"
extern int x = 10;
using namespace std;
// bien external variable (cung la bien global)
void printValue() {
cout << "x: " << x;
}

int main() {
printValue();
} 143

144

72
9/12/2022

145

146

73
9/12/2022

147

148

74
9/12/2022

149

150

75

You might also like