---
# System prepended metadata

title: Tài liệu lớp C++

---

# Giới thiệu C++

## Nhóm zalo lớp : https://zalo.me/g/uqtoca509

## Cài đặt C++ (Windows)

Bước 1 : Tải C++ tại đây: http://www.codeblocks.org/downloads/26

Bước 2 : Chọn download codeblocks-20.3-setup.exe

![image](https://hackmd.io/_uploads/rJxe2qCYT.png)

Bước 3 : Chạy File vừa được tải về, bấm Next và Install ở những lần lựa chọn để cài đặt CodeBlocks

## Sử dụng CodeBlocks

Bước 1 : Mở CodeBlocks lên, để tạo một file mới ta bấm tổ hợp phím Ctrl + Shift + N.

Bước 2 : Bấm Ctrl + S để lưu File đó. khi lưu file code C++, phải đặt tên có dạng [tên file].cpp, ví dụ như main.cpp

![image](https://hackmd.io/_uploads/ry83RcCKp.png)

Giờ ta sẽ thử cài đặt một chương trình in ra "Hello World".

![image](https://hackmd.io/_uploads/S1StgoCt6.png)

Sau khi code xong, ta sẽ bấm F9 để biên dịch và chạy thử.

![image](https://hackmd.io/_uploads/SJislsAtT.png)

## Kiểu dữ liệu

Những dữ liệu trong C++ đều có kiểu của chúng, số 5 có kiểu là số nguyên int, số 5.5 có kiểu là số thực float, xâu "ABC" có kiểu là string,...

## Biến dữ liệu 

Để lưu trữ các dữ liệu trong lập trình, ta cần sử dụng 'biến'. Ta có thể gán giá trị dữ liệu sử dụng toán tử `=`. Cú pháp gán dữ liệu: `[var_name] = [value]`.

```C++
string a = "ABC"; // tạo một biến tên a kiểu string, có giá trị là "ABC"
int b = 5; // tạo một biến số nguyên b có giá trị là 5
float c = 5.5; // tạo một biến số thực c có giá trị là 5.5
```


Lưu ý, quy tắc tên biến như sau:

- Tên biến trong C++ phải bắt đầu bằng một chữ cái (a-z, A-Z) hoặc dấu gạch dưới (_).
- Tên biến có thể chứa các chữ cái (a-z, A-Z), các chữ số (0-9) và dấu gạch dưới (_).
- C++ phân biệt chữ hoa và chữ thường, vì vậy biến "name" và "Name" được coi là hai biến khác nhau.
- Tên biến không thể chứa các ký tự đặc biệt như @, $, % và *.

## Các toán tử trong C++
Các toán tử `+`, `-` và `*` lần lượt thể hiện các phép toán cộng, trừ và nhân, ví dụ : 

```C++
3 * 4 = 12
3 + 4 = 7
3 - 4 = -1
```

Các biến có thể sử dụng để làm các biểu thức như trong toán học, ví dụ : 

```C++
int a = 3;
int b = 4;
int c = a * b + 3; //lúc này c = 3 * 4 + 3 = 15
int d = a + b * 2; //d = 11
```

Đối với phép chia, tùy thuộc vào kiểu dữ liệu sẽ cho ra kết quả khác nhau. Nếu kiểu dữ liệu là int, phép chia `/` sẽ cho ra phần nguyên của phép toán, còn nếu kiểu dữ liệu là số thực sẽ cho ra đáp án có số thập phân. Ví dụ : 
```c++
int a = 10;
int b = 4;
int c = a / b; //lúc này c = 2 vì phần nguyên của 10 chia 4 là 2

float x = 10
float y = 4
float z = x / y; //z = 2.5 vì x, y có kiểu số thực.
```

Đối với kiểu int, có thể toán tử là `%` có nghĩa là chia lấy dư, trả về phần dư của phép chia : 

```C++
int a = 10;
int b = 4;
int c = a % b // lúc này c = 2 vì 10 chia 4 dư 2
```

Tổng kết các toán tử số học:


| Toán tử | Phép toán học | Cú pháp |
| -------- | -------- | -------- |
| `+`     | Cộng     | `x + y`     |
| `-`     | Trừ     | `x - y`     |
| `*`     | Nhân     | `x * y`     |
| `/`     | Chia     | `x / y`     |
| `%`     | Chia lấy dư     | `x % y`     |

## Nhập xuất dữ liệu

Để nhập dữ liệu từ bàn phím vào một biến ta sử dụng cú pháp 
`cin >> [tên biến]`

```C++
int a;
cin >> a;
```

Để in ra dữ liệu ta sử dụng lệnh `cout << `

```C++
int a = 10;
int b = 20;
cout << a;
cout << b;
cout << a * b;
```

Chương trình trên in ra `1020200` vì ta không thực hiện hành động in ra xuống dòng. Để in xuống dòng ta thêm `<< '\n'` vào cuối lệnh in.

```C++
int a = 10;
int b = 20;
cout << a << '\n';
cout << b << '\n';
cout << a * b << '\n';
```

Khi đó chương trình in ra 3 dòng

```
10
20
200
```

Chương trình sau đây, nhập vào 2 số nguyên là chiều dài và chiều rộng của hình chữ nhật và in ra diện tích và chu vi của nó: 
```C++
int length;
int breadth;

cin >> length;
cin >> breadth;

int area = length * breadth;

cout << "Area is " << area << '\n';
cout << "Perimeter is " << 2 * (length + breadth) << '\n';
```

## Bài tập thực hành 
https://bkdnoj.com/contest/cppb1/problem

# Lệnh điều kiện

## Câu điều kiện if-else

Câu lệnh `if` là một câu lệnh Logic, đánh giá điều kiện được đưa ra là `true` hay `false`. 

Nếu điều kiện đó đúng (`true`) thì câu lệnh if sẽ được thực hiện, nếu không thì bỏ qua.

```C++
if(true) {
    cout << "Xin Chao";
}
```

## Cấu trúc câu lệnh điều kiện

Cấu trúc của câu lệnh `if` là :

```c++
if([điều kiện được đánh giá]) {
    [lệnh thực hiện]
}
```

Ví dụ:

```c++
if(2 > 1) {
    cout << "Hi";
}
```

## Các toán tử trong if

Để so sánh giữa các biến hay số, ta sẽ có các toán tử sau :


| Toán tử | Phép so sánh | Cú pháp |
| -------- | -------- | -------- |
| `>`     | Lớn hơn     | `a > b`     |
| `<`     | Bé hơn     | `a < b`     |
| `==`     | Bằng nhau    | `a == b`     |
| `!=`     | Khác nhau    | `a != b`     |
| `>=`     | Lớn hơn hoặc bằng     | `a >= b`     |
| `<=`    | Bé hơn hoặc bằng     | `a <= b`     |

Ví dụ như sau 

```C++
if(3 > 2) // sẽ bằng true vì 3 > 2
if(3 < 2) // sẽ bằng false vì 3 không bé hơn 2
if(3 >= 2) // bằng true vì 3 lớn hơn 2 và đây là phép toán lớn hơn HOẶC bằng
if(3 <= 2) // bằng false vì 3 không bé hơn hoặc bằng 2
if(3 == 2) // bằng false vì 3 không bằng 2
//Lưu ý : Toán tử bằng có 2 dấu bằng, nếu khi 3 = 2 sẽ sai 
if(3 != 2) // bằng true vì 3 không bằng 2
```

## Câu lệnh && và ||

Nếu có nhiều hơn 1 điều kiện cần được kiểm tra, ta sẽ dùng đến các toán tử `&&` và `||`

`&&` có nghĩa là và, cú pháp như sau 

```C++
if([điều kiện 1] && [điều kiện 2]) {

}
```

ở đây sẽ kiểm tra cả hai điều kiện, và cả 2 phải đều đúng thì câu lệnh `if` đó mới đúng

```C++
if(3 > 2 && 1 > 2) 
```

Ở đây `3 > 2` là đúng như vì điều kiện `1 > 2` sai nên câu lệnh `if` này vẫn `false`.

`||` có nghĩa là hoặc, cú pháp : 

```C++
if([điều kiện 1] || [điều kiện 2]) {

}
```

`||` sẽ chỉ cần một trong các điều kiện được kiểm tra là đúng, thì câu lệnh đó sẽ đúng

```C++
if(3 > 2 || 1 > 2) 
```

Ở đây câu lệnh này đúng vì có vế `1 > 2` là đúng

### if-else

Chúng ta có thể bổ sung vào lệnh if như sau

```C++
if(điều kiện) {
    dãy lệnh 1
} else {
    dãy lệnh 2
}
```

Nếu điều kiện đúng, thì dãy lệnh 1 sẽ được thực hiện. Ngược lại (`else`), thì dãy lệnh 2 sẽ được thực thi.

Ví dụ:

```C++
int n; cin >> n;

if(n % 2 == 1) {
    cout << "Le";
} else {
    cout << "Chan";
}
```

Đây là bài kiểm tra số n là chẵn hay lẻ, nếu n chia 2 dư 1 thì in ra Lẻ, không thì in ra Chẵn

## Bài tập

Bài giải cho câu khó contest `if` : 
![image](https://hackmd.io/_uploads/H1LhIGYc6.png)


# Câu lệnh vòng lặp

## Lệnh For

Câu lệnh vòng lặp là loại câu lệnh sẽ thực hiện cho đến khi điều kiện vẫn còn `true`

Cú pháp câu lệnh for : 

```C++
for(câu lệnh ban đầu; điều kiện; câu lệnh mỗi lần lặp) {
    dãy lệnh
}
```

Câu lệnh ban đầu là câu lệnh sẽ thực hiện khi `bắt đầu` vòng for, và nó chỉ thực hiện một lần

Điều kiện là mỗi lần lặp lại câu lệnh, sẽ kiểm tra nếu `true` thì thực hiện dãy lệnh, không thì sẽ dừng lại.

Câu lệnh mỗi vòng lặp, Nó sẽ thực hiện một lần mỗi lần lặp.

```C++
int i;
for(i = 1; i <= 10; i = i + 1) {
    cout << i << " ";
}

//Câu lệnh đầu tiên là i = 1
//Điều kiện là i <= 10
//Mỗi lần lặp thì nó sẽ tăng i lên 1 vì có cái lệnh i = i + 1
```

## Lệnh while

Cú pháp lệnh while :

```C++
while(điều kiện) {
    dãy lệnh
}
```

Lệnh while sẽ kiểm tra điều kiện, nếu `true` thì sẽ thực hiện dãy lệnh còn `false` thì dừng lại

## Break và Continue

### Break
Chỉ có thể sử dụng ở trong vòng lặp, khi gặp câu lệnh này, vòng lặp ngay lập tức bị dừng lại.

### Continue
Chỉ có thể sử dụng ở trong vòng lặp, khi gặp câu lệnh này, ngay lập tức bỏ qua lần lặp này.

## Bài tập vòng lặp

https://bkdnoj.com/contest/cppb3/problem

# Các cú pháp đặc biệt

## Thư viện tổng
Sau này chỉ cần khai báo thư viện này ở đầu chương trình, sẽ có tất cả các loại thư viện trong C++

```C++
#include<bits/stdc++.h>
```

## Cố định số chữ số in ra sau dấu phẩy thập phân

Cú pháp 

```C++
cout << fixed;
cout << setprecision([số lượng số cần in ra sau dấu phẩy]);
```

```C++
cout << fixed;
cout << setprecision(2); //In ra 2 số sau số thập phân
```

