# 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 ```