📝 Cú pháp cơ bản C++
📖 Giới thiệu
Trong bài học này, chúng ta sẽ tìm hiểu về những quy tắc cú pháp cơ bản nhất của C++. Đây là nền tảng quan trọng giúp bạn viết code chính xác và dễ đọc.
Cú pháp C++ có một số điểm tương đồng với C và Java, nhưng cũng có những đặc trưng riêng. Việc nắm vững các quy tắc cơ bản sẽ giúp bạn tránh được nhiều lỗi thường gặp và phát triển thói quen lập trình tốt ngay từ đầu.
Chúng ta sẽ học về comments, statements, blocks, identifiers và các quy tắc định dạng code để tạo ra những chương trình dễ đọc và dễ bảo trì.
🔧 Cú pháp
Comments (Chú thích)
// Comment một dòng - dùng để giải thích code ngắn gọn
/*
Comment nhiều dòng
Dùng để giải thích phức tạp
hoặc tạm thời disable code
*/
/**
* Documentation comment
* Thường dùng để mô tả hàm, class
* Có thể được tools tự động xử lý
*/Statements (Câu lệnh)
// Mỗi statement kết thúc bằng dấu chấm phẩy
int x = 10; // Declaration statement
cout << "Hello" << endl; // Expression statement
return 0; // Return statement
; // Empty statement (hợp lệ)Blocks và Scope
{ // Bắt đầu block
int x = 10; // Biến local trong block
cout << x << endl;
} // Kết thúc block - x không tồn tại nữa
// Nested blocks
{
int a = 1;
{
int b = 2; // b chỉ tồn tại trong block này
cout << a + b; // Có thể truy cập a
}
// cout << b; // Lỗi! b không tồn tại
}Case Sensitivity
// C++ phân biệt chữ hoa/thường
int myVariable = 10;
int MyVariable = 20; // Đây là biến khác
int MYVARIABLE = 30; // Đây cũng là biến khác🔬 Phân tích & Giải thích chi tiết
Tại sao cần Comments?
1. Giải thích mục đích của code
// Tính diện tích hình tròn với bán kính r
double area = 3.14159 * r * r;2. Ghi chú các thuật toán phức tạp
/*
* Thuật toán sắp xếp nhanh (Quick Sort)
* Độ phức tạp: O(n log n) trung bình
* Worst case: O(n²)
*/3. TODO và FIXME
// TODO: Thêm validation cho input
// FIXME: Bug khi x = 0Quy tắc đặt tên (Identifiers)
Hợp lệ:
int age; // Tên có nghĩa
int student_count; // Snake_case
int studentCount; // CamelCase
int _private; // Bắt đầu bằng underscore
int var123; // Có chữ sốKhông hợp lệ:
int 123var; // Không bắt đầu bằng số
int class; // Không dùng keyword
int my-var; // Không có dấu gạch ngang
int my var; // Không có khoảng trắngCác Keywords (Từ khóa)
// Một số keywords thường dùng (không được dùng làm tên biến)
auto bool break case catch char class const
do double else enum false float for if
int long new return short static struct switch
true void while public private protectedWhitespace và Formatting
C++ bỏ qua whitespace:
// Tất cả đều hợp lệ nhưng khó đọc
int x=10;cout<<"Hello"<<endl;return 0;
// Nên viết như này
int x = 10;
cout << "Hello" << endl;
return 0;Indentation (Thụt lề):
// Chuẩn: 4 spaces hoặc 1 tab
if (condition) {
statement1;
statement2;
if (nested_condition) {
nested_statement;
}
}💻 Ví dụ minh họa
Chương trình minh họa comments
#include <iostream>
using namespace std;
/*
* Chương trình tính toán cơ bản
* Tác giả: Học viên C++
* Ngày tạo: [Ngày hiện tại]
*/
int main() {
// Khai báo và khởi tạo biến
int a = 10; // Số thứ nhất
int b = 5; // Số thứ hai
/*
Thực hiện các phép tính cơ bản
và hiển thị kết quả
*/
cout << "=== CHƯƠNG TRÌNH TÍNH TOÁN ===" << endl;
// Phép cộng
cout << a << " + " << b << " = " << (a + b) << endl;
// Phép trừ
cout << a << " - " << b << " = " << (a - b) << endl;
// Phép nhân
cout << a << " * " << b << " = " << (a * b) << endl;
// Phép chia
cout << a << " / " << b << " = " << (a / b) << endl;
return 0; // Kết thúc chương trình thành công
}Kết quả:
=== CHƯƠNG TRÌNH TÍNH TOÁN ===
10 + 5 = 15
10 - 5 = 5
10 * 5 = 50
10 / 5 = 2Chương trình minh họa blocks và scope
#include <iostream>
using namespace std;
int main() {
cout << "=== DEMO BLOCKS VÀ SCOPE ===" << endl;
int outer = 100; // Biến ở scope ngoài
cout << "Outer variable: " << outer << endl;
{ // Block level 1
int inner1 = 200; // Biến chỉ tồn tại trong block này
cout << "Inner1 variable: " << inner1 << endl;
cout << "Có thể truy cập outer: " << outer << endl;
{ // Block level 2 (nested)
int inner2 = 300;
cout << "Inner2 variable: " << inner2 << endl;
cout << "Truy cập từ block cha: " << inner1 << endl;
cout << "Truy cập từ block gốc: " << outer << endl;
}
// cout << inner2; // Lỗi! inner2 không tồn tại nữa
cout << "Sau khi thoát block con" << endl;
}
// cout << inner1; // Lỗi! inner1 không tồn tại nữa
cout << "Quay về scope chính: " << outer << endl;
return 0;
}Kết quả:
=== DEMO BLOCKS VÀ SCOPE ===
Outer variable: 100
Inner1 variable: 200
Có thể truy cập outer: 100
Inner2 variable: 300
Truy cập từ block cha: 200
Truy cập từ block gốc: 100
Sau khi thoát block con
Quay về scope chính: 100Chương trình kiểm tra đặt tên
#include <iostream>
#include <string>
using namespace std;
int main() {
// Các cách đặt tên hợp lệ
int studentAge = 18; // camelCase
int student_count = 50; // snake_case
string firstName = "Nguyen"; // camelCase cho string
double PI_VALUE = 3.14159; // UPPER_CASE cho hằng số
cout << "=== THÔNG TIN HỌC SINH ===" << endl;
cout << "Tuổi học sinh: " << studentAge << endl;
cout << "Số lượng học sinh: " << student_count << endl;
cout << "Tên: " << firstName << endl;
cout << "Giá trị PI: " << PI_VALUE << endl;
// Minh họa case sensitivity
int myVar = 10;
int MyVar = 20;
int MYVAR = 30;
cout << "\n=== CASE SENSITIVITY ===" << endl;
cout << "myVar = " << myVar << endl;
cout << "MyVar = " << MyVar << endl;
cout << "MYVAR = " << MYVAR << endl;
return 0;
}🏋️ Thực hành
Bài tập 1: Sửa Comments
Thêm comments phù hợp vào chương trình sau:
#include <iostream>
using namespace std;
int main() {
int length = 10;
int width = 5;
int area = length * width;
int perimeter = 2 * (length + width);
cout << "Area: " << area << endl;
cout << "Perimeter: " << perimeter << endl;
return 0;
}Bài tập 2: Tìm và sửa lỗi syntax
#include <iostream>
using namespace std
int main()
int x = 10
int y = 20;
cout << "Sum: " << x + y << endl
return 0;Bài tập 3: Cải thiện formatting
Sắp xếp lại code sau cho dễ đọc:
#include <iostream>
using namespace std;int main(){int a=10;int b=20;if(a>b){cout<<"a is greater"<<endl;}else{cout<<"b is greater"<<endl;}return 0;}Bài tập 4: Viết chương trình với nested blocks
Viết chương trình có 3 level blocks, mỗi level khai báo 1 biến và in ra giá trị của tất cả biến có thể truy cập được.
Lời giải chi tiết
Bài tập 1:
#include <iostream>
using namespace std;
/*
* Chương trình tính diện tích và chu vi hình chữ nhật
*/
int main() {
// Khai báo kích thước hình chữ nhật
int length = 10; // Chiều dài (cm)
int width = 5; // Chiều rộng (cm)
// Tính toán diện tích và chu vi
int area = length * width; // Diện tích = dài * rộng
int perimeter = 2 * (length + width); // Chu vi = 2 * (dài + rộng)
// Hiển thị kết quả
cout << "Area: " << area << endl; // In diện tích
cout << "Perimeter: " << perimeter << endl; // In chu vi
return 0; // Kết thúc chương trình
}Bài tập 2:
#include <iostream>
using namespace std; // Thiếu dấu ;
int main() { // Thiếu {
int x = 10; // Thiếu dấu ;
int y = 20;
cout << "Sum: " << x + y << endl; // Thiếu dấu ;
return 0;
} // Thiếu }Bài tập 3:
#include <iostream>
using namespace std;
int main() {
int a = 10;
int b = 20;
if (a > b) {
cout << "a is greater" << endl;
} else {
cout << "b is greater" << endl;
}
return 0;
}Bài tập 4:
#include <iostream>
using namespace std;
int main() {
int level1 = 1;
cout << "Level 1 - có thể truy cập: level1=" << level1 << endl;
{
int level2 = 2;
cout << "Level 2 - có thể truy cập: level1=" << level1
<< ", level2=" << level2 << endl;
{
int level3 = 3;
cout << "Level 3 - có thể truy cập: level1=" << level1
<< ", level2=" << level2 << ", level3=" << level3 << endl;
}
cout << "Quay về Level 2 - có thể truy cập: level1=" << level1
<< ", level2=" << level2 << endl;
}
cout << "Quay về Level 1 - có thể truy cập: level1=" << level1 << endl;
return 0;
}📋 Tóm tắt
🎯 Những gì đã học
- Comments:
//cho một dòng,/* */cho nhiều dòng - Statements: Mỗi câu lệnh kết thúc bằng dấu
; - Blocks: Code được nhóm trong
{ }, tạo ra scope riêng - Identifiers: Quy tắc đặt tên biến, hàm (bắt đầu bằng chữ cái hoặc
_) - Case Sensitivity: C++ phân biệt chữ hoa/thường
🔧 Best Practices đã học
- Sử dụng comments để giải thích code
- Thụt lề code đúng cách (4 spaces hoặc 1 tab)
- Đặt tên biến có ý nghĩa
- Sử dụng consistent naming convention
- Tránh dùng keywords làm tên biến
🚀 Chuẩn bị cho bước tiếp theo
Bài học tiếp theo sẽ tìm hiểu về biến và hằng số trong C++. Đảm bảo bạn đã:
- [x] Hiểu cách viết comments hợp lý
- [x] Biết quy tắc kết thúc statements bằng
; - [x] Nắm được khái niệm blocks và scope
- [x] Áp dụng được quy tắc đặt tên identifiers
💡 Lời khuyên
"Code được đọc nhiều hơn là được viết. Hãy viết code như thể người đọc nó là một kẻ có khuynh hướng bạo lực và biết địa chỉ nhà bạn!"
Chuyển sang: Biến và hằng số để học cách khai báo và sử dụng biến trong C++!