Biến, kiểu dữ liệu, toán tử, câu lệnh cin
Biến
Giống như Toán học, trong lập trình, cần phải sử dụng biến để giải quyết các bài toán khác nhau.
Ví dụ
Cho một hình vuông có cạnh độ dài 10
đơn vị, in ra chu vi và diện tích của hình vuông đó.
Mã nguồn
#include <bits/stdc++.h>
using namespace std;
int main() {
cout << "Chu vi: " << 10 * 4 << "\n";
cout << "Dien tich: " << 10 * 10;
return 0;
}
Khi cần tính với độ dài khác, ta phải thay đổi từng số trực tiếp trong các lệnh cout
. Thay vào đó, sử dụng biến sẽ làm cho chương trình linh hoạt hơn.
Biến
Biến là tên đại diện cho một vùng nhớ dùng để lưu trữ dữ liệu. Giá trị của biến có thể thay đổi trong quá trình chương trình thực thi.
Sử dụng biến đúng cách giúp chương trình trở nên linh hoạt, dễ đọc và dễ kiểm soát.
Khai báo biến
Cú pháp tạo ra một biến trong C++
có dạng:
<kiểu dữ liệu> <tên biến>;
Ví dụ 1
Khai báo một biến số nguyên n
.
Mã nguồn
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
return 0;
}
Biến có thể được khởi tạo giá trị ngay tại thời điểm khai báo bằng toán tử gán =
:
Ví dụ 2
Cho một hình vuông có cạnh độ dài 10
đơn vị, in ra chu vi và diện tích của hình vuông đó.
Mã nguồn
#include <bits/stdc++.h>
using namespace std;
int main() {
int a = 10;
cout << "Chu vi: " << a * 4 << "\n";
cout << "Dien tich: " << a * a;
return 0;
}
Khi cần tính chu vi và diện tích cho hình vuông khác, chỉ cần thay đổi giá trị gán cho biến a
.
Ngoài ra, ta có thể khai báo và khởi tạo nhiều biến trên cùng một dòng bằng cách sử dụng dấu phẩy ,
để ngăn cách:
Ví dụ 3
Khởi tạo đồng thời biến a
có giá trị bằng 2, biến b
có giá trị bằng 3.
Mã nguồn
int a = 2, b = 3;
Kiểu dữ liệu
Kiểu số nguyên
Trong C++
, kiểu số nguyên được dùng để lưu trữ các số nguyên không có phần thập phân. Có nhiều loại số nguyên khác nhau, cho phép lựa chọn phạm vi giá trị phù hợp với nhu cầu, giúp tối ưu hóa việc sử dụng bộ nhớ.
Các kiểu số nguyên phổ biến bao gồm:
int
: Kiểu số nguyên phổ biến và thông dụng nhất.short
: Thường có kích thước nhỏ hơnint
, dùng để chứa các số có giá trị không lớn.long long
: Có kích thước lớn hơnint
, dùng để chứa các số nguyên rất lớn.
Kiểu dữ liệu | Kích thước (byte) | Phạm vi giá trị |
---|---|---|
short |
\(2\) | Từ \(-2^{15}\) đến \(2^{15} - 1\) |
int |
\(4\) | Từ \(-2^{31}\) đến \(2^{31} - 1\) (Khoảng \(-2 \times 10^9\) đến \(2 \times 10^9\)) |
long long |
\(8\) | Từ \(-2^{63}\) đến \(2^{63} - 1\) (Khoảng \(-9 \times 10^{18}\) đến \(9 \times 10^{18}\)) |
Ví dụ
#include <bits/stdc++.h>
using namespace std;
int main() {
int so_hoc_sinh = 30;
short so_phong_hoc = 5;
long long dan_so_the_gioi = 8000000000LL; // Hậu tố 'LL' cho long long
cout << "So hoc sinh: " << so_hoc_sinh << "\n";
cout << "So phong hoc: " << so_phong_hoc << "\n";
cout << "Dan so the gioi: " << dan_so_the_gioi;
return 0;
}
Kiểu số thực
Trong C++, kiểu số thực (hay còn gọi là kiểu dấu phẩy động) được sử dụng để biểu diễn các số có phần thập phân. Các kiểu này rất quan trọng trong các bài toán khoa học, kĩ thuật, tài chính và bất kì lĩnh vực nào cần đến sự tính toán chính xác với các số thập phân.
Các kiểu số thực chính trong C++ bao gồm:
float
: Có độ chính xác đơn, thường chiếm 4 byte bộ nhớ. Đây là lựa chọn tốt khi bạn không cần độ chính xác quá cao và muốn tiết kiệm bộ nhớ.double
: Có độ chính xác kép, thường chiếm 8 byte bộ nhớ. Đây là kiểu được sử dụng phổ biến nhất cho số thực vì nó cung cấp sự cân bằng tốt giữa độ chính xác và hiệu năng.long double
: Có độ chính xác mở rộng, thường chiếm 8, 12 hoặc 16 byte tùy thuộc vào hệ thống. Dùng cho các phép tính đòi hỏi độ chính xác cực kì cao.
Kiểu dữ liệu | Kích thước (byte) | Độ chính xác |
---|---|---|
float |
\(4\) | \(6 - 7\) chữ số |
double |
\(8\) | \(15 - 16\) chữ số |
long double |
\(8\), \(12\) hoặc \(16\) | Cao hơn double |
Ví dụ
#include <bits/stdc++.h>
using namespace std;
int main() {
float diem_trung_binh = 8.5f; // Hậu tố 'f' cho kiểu float
double so_pi = 3.1415926535;
long double nano_giay = 0.000000001;
cout << "Diem trung binh: " << diem_trung_binh << "\n";
cout << "So Pi: " << so_pi << "\n";
cout << "Mot nano giay (s): " << nano_giay;
return 0;
}
Lưu ý
Trong các ngôn ngữ lập trình, số thực sử dụng dấu chấm .
để ngăn cách phần nguyên và phần thập phân, thay vì dấu phẩy ,
như trong Toán học.
Kiểu logic (đúng/sai)
Kiểu dữ liệu bool
trong C++
chỉ lưu trữ hai trạng thái: \textbf{Đúng} hoặc \textbf{Sai}, tương ứng với true
và false
trong C++
. Bản chất của kiểu bool
là một số nguyên, trong đó true
tương đương với giá trị 1
, còn false
tương đương với 0
.
Ví dụ
Mã nguồn
bool san_sang = true;
cout << san_sang << "\n";
san_sang = false;
cout << san_sang;
Đầu ra
1
0
Kiểu kí tự và kiểu xâu kí tự
Hai kiểu dữ liệu này sẽ được giới thiệu chi tiết ở Chương VIII - Kí tự và xâu kí tự.
Quy tắc đặt tên biến
Tên biến trong C++
phải tuân theo các quy tắc sau:
- Chỉ chứa chữ cái (
a-z
,A-Z
), chữ số (0-9
) và dấu gạch dưới (_
). - Không được bắt đầu bằng chữ số.
- Không được trùng với các từ khóa của
C++
(ví dụ:int
,return
,cout
, \(\ldots\)). C++
phân biệt chữ hoa và chữ thường, do đóTuoi
vàtuoi
là hai biến khác nhau.
Ví dụ
Mã nguồn đúng
int ma_hoc_sinh;
double _pi;
short soNho;
Mã nguồn sai
int 1so; // Sai vì bắt đầu bằng số
double float; // Sai vì "float" là từ khóa của C++
bool dung sai; // Sai vì có dấu cách
Hằng số - const
Trong thực tế, có những đại lượng mà giá trị của chúng không bao giờ thay đổi (ví dụ: số \(\pi = 3.14159\), tốc độ âm thanh \(v = 343.2\,\text{m/s}\),\ldots). Nếu lưu các giá trị này vào biến thông thường, chúng có thể bị thay đổi ngoài ý muốn trong quá trình thực thi chương trình. Vì vậy, khái niệm \textbf{hằng số (constant)} đã được đưa vào trong lập trình để đảm bảo các giá trị này luôn được giữ nguyên.
Biến hằng trong C++
là biến không thể thay đổi giá trị khi chạy chương trình.
Cú pháp:
const <kiểu dữ liệu> <tên biến hằng> = <giá trị>;
Ví dụ
int main() {
const double PI = 3.14159;
const int SO_HS = 30;
PI = 3.14; // Báo lỗi, không được phép thay đổi
return 0;
}
Thông thường, tên biến hằng thường được viết hoa toàn bộ để phân biệt với biến thường.
Các phép toán cơ bản
Toán tử số học
Phép toán | Toán tử |
---|---|
Cộng | + |
Trừ | - |
Nhân | * |
Chia | / |
Chia lấy dư | % |
Ví dụ
Mã nguồn
int a = 10, b = 3;
cout << "a + b = " << (a + b) << "\n";
cout << "a - b = " << (a - b) << "\n";
cout << "a * b = " << (a * b) << "\n";
cout << "a / b = " << (a / b) << "\n";
cout << "a % b = " << (a % b);
Đầu ra
a + b = 13
a - b = 7
a * b = 30
a / b = 3
a % b = 1
Với biểu thức có nhiều toán tử, các phép toán được thực hiện theo thứ tự ưu tiên giảm dần như sau:
- Các biểu thức trong cặp ngoặc đơn
()
; - Toán tử một ngôi
+
,-
ở trước các số (để thể hiện số dương, số âm); - Các phép toán nhân
*
, chia/
, chia lấy dư%
; - Các phép toán cộng
+
, trừ-
.
Các toán tử có cùng mức ưu tiên sẽ được thực hiện theo chiều từ trái sang phải.
Lưu ý
- Khác với Toán học sử dụng ba loại cặp ngoặc
()
,[]
,{}
để phân biệt cấp độ,C++
chỉ sử dụng duy nhất cặp ngoặc tròn()
. - Chỉ được sử dụng phép chia lấy dư
%
cho hai số nguyên. - Trong phép chia, nếu số bị chia và số chia đều là biến kiểu số nguyên thì kết quả trả về là phần nguyên của phép chia. Nếu một trong hai hoặc cả hai là biến kiểu số thực thì kết quả trả về là một số thực.
Ví dụ
Mã nguồn
int a = 10, b = 3;
double x = 10, y = 3;
cout << a / b << "\n";
cout << x / y;
Đầu ra
3
3.33333
Toán tử gán
Toán tử gán dùng để gán giá trị cho biến:
Phép toán | Kí hiệu | Ví dụ | Tương đương |
---|---|---|---|
Gán | = |
x = 10 |
- |
Cộng rồi gán | += |
x += 5 |
x = x + 5 |
Trừ rồi gán | -= |
x -= 3 |
x = x - 3 |
Nhân rồi gán | *= |
x *= 2 |
x = x * 2 |
Chia rồi gán | /= |
x /= 2 |
x = x / 2 |
Chia dư rồi gán | %= |
x %= 3 |
x = x % 3 |
Ví dụ
Mã nguồn
int x = 10;
cout << x << "\n";
x += 5;
cout << x << "\n";
x *= 2;
cout << x;
Đầu ra
10
15
30
Toán tử tăng/giảm
Toán tử tăng ++
và toán tử giảm --
dùng để tăng hoặc giảm giá trị của biến.
Tùy thuộc vào vị trí của toán tử mà thứ tự thực hiện phép toán có thể khác nhau:
Phép toán | Kí hiệu | Ví dụ | Kết quả |
---|---|---|---|
Tăng trước | ++x |
x = 5; y = ++x; |
x = 6, y = 6 |
Tăng sau | x++ |
x = 5; y = x++; |
x = 6, y = 5 |
Giảm trước | --x |
x = 5; y = --x; |
x = 4, y = 4 |
Giảm sau | x-- |
x = 5; y = x--; |
x = 4, y = 5 |
Ví dụ
Mã nguồn
int x = 5;
cout << ++x << "\n"; // In ra 6
cout << x++ << "\n"; // In ra 6, sau đó x tăng lên 7
cout << x;
Đầu ra
6
6
7
Câu lệnh nhập cin
Lệnh cin
dùng để nhập từ bàn phím. Có thể nhập nhiều giá trị trong một dòng bằng cách nối toán tử nhập >>
.
Cú pháp:
cin >> <biến_1> >> <biến_2> ...;
Ví dụ
Mã nguồn
#include<bits/stdc++.h>
using namespace std;
int main(){
int a, b;
cin >> a >> b;
// toán tử >> có thể dùng nhiều lần như toán tử <<
cout << a << " + " << b << " = " << a + b << "\n";
cout << a << " * " << b << " = " << a * b << "\n";
cout << a << " - " << b << " = " << a - b;
return 0;
}
Đầu vào
4 5
Đầu ra
4 + 5 = 9
4 * 5 = 20
4 - 5 = -1
Các khái niệm Toán học cần biết
- Giá trị tuyệt đối của số \(x\) là khoảng cách từ điểm \(x\) đến điểm gốc 0 trên trục số. Kí hiệu là \(|x|\).
Ví dụ
- \(|6| = 6\)
- \(|-3.1| = 3.1\)
- \(|0| = 0\)
- Lũy thừa bậc \(n\) của \(a\) là tích của \(n\) thừa số \(a\). Kí hiệu là \(a^n\), trong đó \(n\) được gọi là số mũ, \(a\) được gọi là cơ số.
Ví dụ
- \(2^3 = 2 \times 2 \times 2 = 8\)
- \(2^4 = 2 \times 2 \times 2 \times 2 = 16\)
- \(5^1 = 5\)
- Căn bậc hai bậc \(x\) là số \(a\) không âm sao cho \(a \times a = x\). Kí hiệu là \(\sqrt x\).
Ví dụ
- \(\sqrt {16} = 4\)
- \(\sqrt {0.25} = 0.5\)
- \(\sqrt {2} = 1.41421\ldots\)
- Số hữu tỉ là số có thể biểu diễn dưới dạng phân số.
- Số vô tỉ là số không thể biểu diễn dưới dạng phân số.
- Số thực là tên gọi chung cho số hữu tỉ và số vô tỉ.
Ví dụ
- \(0.25; \frac 1 3; -1\) là các số hữu tỉ.
- \(\sqrt{2}\); số \(\pi\), số \(e\) là các số vô tỉ.
- Tất cả các số trên được gọi chung là số thực.
- Cho hai số nguyên \(a\), \(b\), biết \(a\) chia hết cho \(b\). Khi đó \(a\) được gọi là bội số của \(b\), và \(b\) được gọi là ước số của \(a\) (gọi tắt là bội và ước).
Ví dụ
- 6 có các ước là \(-6, -3, -2, -1, 1, 2, 3, 6\).
- 4 có các bội là \(4, 8, 12, 16, \ldots\) và \(-4, -8, -12, -16, \ldots\)