I. Kiểu dữ liệu là gì?
1. Kiểu dữ liệu nguyên thủy (Primitive Type)
Trong thực tế, các bài toán thường có dữ liệu đầu vào và kết quả thuộc vào các kiểu dữ liệu phổ biến như số nguyên, số thực, và nhiều loại khác. Việc sử dụng các kiểu dữ liệu này liên quan chặt chẽ đến việc thực hiện các phép toán trên dữ liệu và quản lý bộ nhớ được cấp phát cho chúng. Mỗi ngôn ngữ lập trình cung cấp cho người dùng một tập hợp các kiểu dữ liệu và xác định phạm vi lưu trữ cũng như các phép toán có thể thực hiện trên từng kiểu dữ liệu đó. Trong ngôn ngữ C++, chúng ta có sẵn 7 kiểu dữ liệu nguyên thủy sau đây:
2. Phạm vi của các kiểu dữ liệu
Mỗi kiểu dữ liệu đều có phạm vi lưu trữ riêng. Ngoài ra, người dùng còn có thể sử dụng một số modifier khác nhau trước kiểu dữ liệu để thay đổi khoảng giá trị của nó. Trong ngôn ngữ C++, có 4 loại modifier như sau:
-
"signed": Đây là kiểu có dấu, cho phép biểu diễn cả các số âm và số dương.
-
"unsigned": Đây là kiểu không dấu, chỉ cho phép biểu diễn các số không âm (số dương hoặc 0).
-
"long": Đây là kiểu dữ liệu có nhiều chữ số hơn so với kiểu nguyên thủy tương ứng, mở rộng phạm vi lưu trữ của kiểu đó.
-
"short": Đây là kiểu dữ liệu có ít chữ số hơn so với kiểu nguyên thủy tương ứng, giới hạn phạm vi lưu trữ của kiểu đó.
Bảng dưới đây thống kê phạm vi lưu trữ cũng như bộ nhớ tiêu tốn của các kiểu dữ liệu dạng số trong C++ kèm theo modifier của chúng:
Ngoài ra, C++ cung cấp một số từ khóa để đưa ra giá trị nhỏ nhất và lớn nhất lưu trữ được của một kiểu dữ liệu, thể hiện trong bảng dưới đây:
Riêng đối với kiểu dữ liệu "char", nó có thể lưu trữ cả số và kí tự. Trong trường hợp kí tự, kiểu "char" có thể lưu trữ đến 256 kí tự khác nhau, tương ứng với bảng mã ASCII. Bảng mã ASCII là một bảng kí tự và mã kí tự được sử dụng trong lĩnh vực tin học và nhiều lĩnh vực khác. Nó bao gồm các kí tự chữ cái, số, dấu câu và các kí tự đặc biệt khác.
II. Khai báo hằng và biến
1. Khai báo và sử dụng hằng số
Hằng số (hay còn gọi là hằng) là một giá trị cố định không thay đổi trong suốt quá trình thực thi chương trình sau khi đã khai báo. Việc khai báo hằng thường được sử dụng để đại diện cho các giá trị xuất hiện nhiều lần trong chương trình.
- Cú pháp khai báo:
- Ví dụ:
Sau khi được khai báo, hằng số có thể được sử dụng trong các câu lệnh và kết hợp với các toán tử trong ngôn ngữ lập trình C++. Thông thường, khai báo hằng số được đặt ngay sau phần khai báo thư viện và không gian tên của chương trình. Dưới đây là ví dụ đưa ra diện tích của một hình tròn có bán kính bằng 2.5 sử dụng hằng số pi=3.14:
2. Khai báo và sử dụng biến
Biến là một giá trị được sử dụng trong chương trình và có thể thay đổi theo ý người sử dụng. Các biến trong chương trình phải được đặt tên và khai báo để chương trình có thể hiểu và sử dụng chúng.
- Cú pháp khai báo:
- Ví dụ:
Sử dụng: Sau khi được khai báo, biến có thể được sử dụng trong các câu lệnh, đi kèm với các toán tử trong C++. Dưới đây là ví dụ đưa ra tổng của hai số 10 và 15:
3. Các lưu ý khi khai báo và sử dụng hằng, biến là gì?
Các định danh, bao gồm tên biến, tên hằng và tên của các hàm, được quy chung gọi là "identifier" trong lập trình. Các định danh mà người dùng tự đặt phải tuân theo một số quy tắc chung sau đây:
-
Định danh không được trùng với từ khóa của ngôn ngữ C++. Từ khóa là các từ tiếng Anh đã được định nghĩa và có ý nghĩa đặc biệt trong ngôn ngữ, ví dụ như "cin", "cout", "enum", "struct",... Các từ khóa thường được hiển thị bằng màu khác để phân biệt với các định danh của người dùng.
-
Định danh chỉ được phép chứa chữ cái, số và dấu gạch dưới "_". Không được phép sử dụng dấu cách, các kí tự đặc biệt và không được phép bắt đầu bằng chữ số.
-
Định danh phân biệt chữ hoa và chữ thường. Ví dụ, hai tên biến "Your_Name" và "your_name" là hai định danh khác nhau hoàn toàn.
-
Tên định danh nên tuân theo quy tắc viết code C++ (C++ coding convention). Chúng chỉ bao gồm các chữ cái thường Latin và số, và khi tên biến bao gồm nhiều từ, chúng được phân tách bằng dấu gạch dưới "_" (quy tắc snake case). Ví dụ: "school_name", "school_id".
-
Tên định danh nên được đặt theo ý nghĩa của chúng trong ngữ cảnh sử dụng. Tránh sử dụng các tên vô nghĩa như "a", "b", "c",... vì điều này sẽ gây khó khăn trong việc kiểm tra và sửa lỗi chương trình.
III. Biến tự động (automatic variables) là gì?
Biến tự động (auto) là một tính năng tiện ích trong phiên bản C++11, cho phép người dùng khai báo biến mà không cần xác định trước kiểu dữ liệu của nó. Từ khóa "auto" sẽ tự động chọn kiểu phù hợp cho biến dựa trên giá trị được gán cho nó. Điều này thường không cần thiết đối với các kiểu dữ liệu nguyên thủy, nhưng lại rất hữu ích khi sử dụng các kiểu dữ liệu phức tạp hoặc khi muốn tự động chọn kiểu trả về của một hàm.
Ngoài ra bạn có thể kiểm tra kiểu trả về của biến bằng cú pháp:
- Ví dụ:
Kết quả:
IV. Câu lệnh nhập - xuất cơ bản trong C++ là gì?
Ngôn ngữ lập trình C++ cung cấp hai câu lệnh nhập xuất dữ liệu trong thư viện <iostream>, đó là "cin" và "cout". Câu lệnh "cin" được sử dụng để nhận dữ liệu từ bàn phím hoặc từ file, trong khi câu lệnh "cout" được sử dụng để hiển thị kết quả tính toán ra màn hình hoặc ghi vào file. Cách sử dụng như sau:
Trong ngôn ngữ lập trình C++, câu lệnh "cin" chỉ được sử dụng để nhập giá trị cho các biến. Ví dụ, câu lệnh "cin >> a;", "cin >> x >> y;",... là các câu lệnh hợp lệ, trong đó giá trị nhập từ bàn phím được gán cho biến tương ứng. Tuy nhiên, các câu lệnh như "cin >> 4;", "cin >> int x;", "cin >> "number";",... là không hợp lệ và sẽ gây ra lỗi.
Câu lệnh "cout" được sử dụng để in ra giá trị của các biến, biểu thức có giá trị, hằng số, kí tự và chuỗi kí tự. Khi in ra một kí tự, ta đặt kí tự đó trong cặp dấu '', còn khi in ra một chuỗi kí tự, ta đặt chuỗi đó trong cặp dấu "". Ví dụ, câu lệnh "cout << 5;", "cout << a + b;", "cout << "Hello World";",... là các câu lệnh hợp lệ để in ra giá trị tương ứng. Tuy nhiên, các câu lệnh như "cout << a = 5;", "cout << int g = a + b;",... là không hợp lệ và sẽ gây ra lỗi.
Cả lệnh "cin" và "cout" cũng có thể được áp dụng cho nhiều biến, biểu thức hoặc hằng số liên tiếp. Khi cần nhập hoặc xuất nhiều đối tượng liên tiếp, ta có thể phân tách chúng bằng các dấu >> hoặc << tương ứng. Đối với lệnh "cin", khi nhập giá trị cho nhiều biến, ta có thể phân tách chúng bằng dấu cách hoặc dấu xuống dòng. Ví dụ: "cin >> a >> b;", "cout << "Tổng các số từ 1 tới " << N << " là: " << S;",...
Ví dụ: Chương trình dưới đây cho phép nhập vào hai số nguyên �a và �b từ bàn phím sau đó đưa ra tổng của hai số đó:
V. Ép kiểu cho biến và hằng như thế nào?
1. Khi nào cần ép kiểu?
Trong quá trình tính toán, có những trường hợp khi kết quả của biểu thức có kiểu dữ liệu khác so với các toán hạng trong biểu thức. Một ví dụ điển hình là khi cần tính giá trị thập phân của một số hữu tỉ a/b, với a, b thuộc tập số nguyên (Z). Theo tư duy thông thường, nhiều bạn sẽ viết chương trình như thế này: