Bỏ qua

Buổi 4: Nhập/Xuất Dữ Liệu với cincout

I. Lý Thuyết

1. Luồng Dữ Liệu Vào/Ra Trong C++

Trong C++, dữ liệu di chuyển theo hai chiều:

  • Xuất (Output): Chương trình → Màn hình → Dùng cout <<
  • Nhập (Input): Bàn phím → Chương trình → Dùng cin >>
Bàn phím → [cin >>] → Biến → Xử lý → [cout <<] → Màn hình

2. Lệnh Nhập Dữ Liệu với cin

cin >> tenBien;              // Nhập 1 giá trị
cin >> bien1 >> bien2;       // Nhập nhiều giá trị cùng lúc

Ví dụ:

int tuoi;
cout << "Nhap tuoi cua ban: ";
cin >> tuoi;
cout << "Tuoi cua ban la: " << tuoi << endl;

Lưu ý: cin đọc đến khoảng trắng đầu tiên. Nếu nhập "Nguyen Van An", chỉ lưu được "Nguyen". Để nhập cả dòng, dùng getline(cin, tenBien).


3. Lệnh Xuất Dữ Liệu với cout Nâng Cao

Định dạng số thực (dùng thư viện <iomanip>):

#include <iomanip>

float x = 3.14159f;
cout << fixed << setprecision(2) << x << endl;   // In: 3.14
cout << fixed << setprecision(4) << x << endl;   // In: 3.1416

Căn lề cột với setw:

cout << setw(10) << "Ten"  << setw(8) << "Diem" << endl;
cout << setw(10) << "An"   << setw(8) << 9.5    << endl;
cout << setw(10) << "Binh" << setw(8) << 7.0    << endl;
✅ Kết quả
       Ten    Diem
        An     9.5
      Binh       7

4. Mẫu Chương Trình Nhập — Xử Lý — Xuất

Mọi bài toán lập trình đều theo 3 bước:

1. NHẬP   → cin >> (đọc dữ liệu từ người dùng)
2. XỬ LÝ → Tính toán bằng các toán tử
3. XUẤT   → cout << (in kết quả ra màn hình)
// Ví dụ: Tính diện tích hình chữ nhật
int dai, rong;

// 1. NHẬP
cout << "Nhap chieu dai: ";   cin >> dai;
cout << "Nhap chieu rong: ";  cin >> rong;

// 2. XỬ LÝ
int dienTich = dai * rong;

// 3. XUẤT
cout << "Dien tich: " << dienTich << endl;

5. Nhập Nhiều Biến

// Cách 1: Nhập từng biến
int a, b;
cout << "Nhap a: "; cin >> a;
cout << "Nhap b: "; cin >> b;

// Cách 2: Nhập cùng một lúc (cách nhau bằng dấu cách hoặc Enter)
int x, y;
cout << "Nhap x va y: ";
cin >> x >> y;

II. Ví Dụ Minh Họa

Ví dụ 1: Nhập tên và tuổi

#include <iostream>
#include <string>
using namespace std;

int main() {
    string ten;
    int tuoi;

    cout << "Nhap ten cua ban: ";
    cin >> ten;
    cout << "Nhap tuoi cua ban: ";
    cin >> tuoi;

    cout << "Xin chao, " << ten << "!" << endl;
    cout << "Ban " << tuoi << " tuoi." << endl;

    return 0;
}
✅ Kết quả (nhập: An, 15)
Nhap ten cua ban: An
Nhap tuoi cua ban: 15
Xin chao, An!
Ban 15 tuoi.

Ví dụ 2: Tính chu vi và diện tích hình chữ nhật

#include <iostream>
using namespace std;

int main() {
    float dai, rong;

    cout << "Nhap chieu dai: ";   cin >> dai;
    cout << "Nhap chieu rong: ";  cin >> rong;

    float chuVi    = 2 * (dai + rong);
    float dienTich = dai * rong;

    cout << "--- Ket qua ---" << endl;
    cout << "Chu vi   : " << chuVi    << endl;
    cout << "Dien tich: " << dienTich << endl;

    return 0;
}
✅ Kết quả (nhập: 8, 5)
Nhap chieu dai: 8
Nhap chieu rong: 5
--- Ket qua ---
Chu vi   : 26
Dien tich: 40

Ví dụ 3: Tính điểm trung bình và xếp loại

#include <iostream>
#include <iomanip>
using namespace std;

int main() {
    float toan, van, anh;

    cout << "Nhap diem Toan: "; cin >> toan;
    cout << "Nhap diem Van : "; cin >> van;
    cout << "Nhap diem Anh : "; cin >> anh;

    float diemTB = (toan + van + anh) / 3.0f;

    cout << fixed << setprecision(2);
    cout << "Diem trung binh: " << diemTB << endl;

    return 0;
}
✅ Kết quả (nhập: 8.5, 7.5, 9.0)
Nhap diem Toan: 8.5
Nhap diem Van : 7.5
Nhap diem Anh : 9.0
Diem trung binh: 8.33

Ví dụ 4: Nhập họ tên đầy đủ bằng getline

#include <iostream>
#include <string>
using namespace std;

int main() {
    string hoTen;

    cout << "Nhap ho ten day du: ";
    getline(cin, hoTen);  // Đọc cả dòng kể cả khoảng trắng

    cout << "Xin chao, " << hoTen << "!" << endl;

    return 0;
}
✅ Kết quả (nhập: Nguyen Van An)
Nhap ho ten day du: Nguyen Van An
Xin chao, Nguyen Van An!

Lưu ý: Nếu trước getline có dùng cin >>, cần thêm cin.ignore() để bỏ ký tự \n còn thừa trong buffer, tránh getline bị bỏ qua.


III. Bài Tập Thực Hành Tại Lớp

Bài 1: Nhập và in thông tin học sinh

Đề bài: Viết chương trình nhập tên (1 từ), tuổi, điểm từ bàn phím rồi in ra thẻ thông tin.

Phân tích đề

Các biến cần khai báo:

  • string ten — tên học sinh

  • int tuoi — tuổi

  • float diem — điểm số

Quy trình: Nhập lần lượt từng biến với lời nhắc rõ ràng → In ra thẻ

Output mẫu:

Nhap ten: An
Nhap tuoi: 15
Nhap diem: 8.5
=== THONG TIN ===
Ten : An
Tuoi: 15
Diem: 8.5
=================

Gợi ý code
#include <iostream>
using namespace std;

int main() {
    string ten;
    int tuoi;
    float diem;

    cout << "Nhap ten : "; cin >> ten;
    cout << "Nhap tuoi: "; cin >> tuoi;
    cout << "Nhap diem: "; cin >> diem;

    cout << "=== THONG TIN ===" << endl;
    cout << "Ten : " << ten  << endl;
    cout << "Tuoi: " << tuoi << endl;
    cout << "Diem: " << diem << endl;
    cout << "=================" << endl;

    return 0;
}

Bài 2: Tính chu vi và diện tích hình tròn

Đề bài: Nhập bán kính từ bàn phím, tính và in chu vi, diện tích hình tròn (PI = 3.14159). Kết quả hiển thị 2 chữ số thập phân.

Phân tích đề

Công thức:

  • Chu vi = 2 × PI × r

  • Diện tích = PI × r × r

Cần dùng: fixed << setprecision(2) từ thư viện <iomanip>

Output mẫu:

Nhap ban kinh: 7
Chu vi   : 43.98
Dien tich: 153.94

Gợi ý code
#include <iostream>
#include <iomanip>
using namespace std;

int main() {
    const float PI = 3.14159f;
    float r;

    cout << "Nhap ban kinh: "; cin >> r;

    float chuVi    = 2 * PI * r;
    float dienTich = PI * r * r;

    cout << fixed << setprecision(2);
    cout << "Chu vi   : " << chuVi    << endl;
    cout << "Dien tich: " << dienTich << endl;

    return 0;
}

Bài 3: Đổi nhiệt độ Celsius ↔ Fahrenheit

Đề bài: Nhập nhiệt độ Celsius từ bàn phím, chuyển đổi và in ra Fahrenheit. Công thức: F = C * 9/5 + 32.

Phân tích đề

Lưu ý: 9/5 = 1 (chia số nguyên!). Phải viết 9.0/5 hoặc 9.0f/5 để ra 1.8.

Output mẫu:

Nhap nhiet do Celsius: 100
Nhiet do Fahrenheit: 212.00

Gợi ý code
#include <iostream>
#include <iomanip>
using namespace std;

int main() {
    float celsius;
    cout << "Nhap nhiet do Celsius: "; cin >> celsius;

    float fahrenheit = celsius * 9.0f / 5 + 32;

    cout << fixed << setprecision(2);
    cout << "Nhiet do Fahrenheit: " << fahrenheit << endl;

    return 0;
}

Bài 4: Tính tiền điện

Đề bài: Nhập số điện tiêu thụ (kWh). Giá điện 2.000 đồng/kWh. Tính tiền điện trước và sau thuế VAT 10%.

Phân tích đề

Công thức:

  • Tiền điện = số kWh × 2000

  • Thuế VAT = Tiền điện × 10%

  • Tổng = Tiền điện + Thuế VAT

Output mẫu:

Nhap so kWh tieu thu: 150
Tien dien truoc thue: 300000
Thue VAT (10%)      : 30000
Tong tien phai tra  : 330000

Gợi ý code
#include <iostream>
using namespace std;

int main() {
    int kWh;
    cout << "Nhap so kWh tieu thu: "; cin >> kWh;

    float tienDien = kWh * 2000.0f;
    float vat      = tienDien * 0.1f;
    float tongTien = tienDien + vat;

    cout << "Tien dien truoc thue: " << tienDien << endl;
    cout << "Thue VAT (10%)      : " << vat      << endl;
    cout << "Tong tien phai tra  : " << tongTien << endl;

    return 0;
}

IV. Bài Tập Về Nhà

Bài 1: Tính chu vi và diện tích tam giác đều

Đề bài: Nhập cạnh của tam giác đều. Tính và in chu vi. Tính diện tích theo công thức: S = (sqrt(3) / 4) * a * a (dùng sqrt từ thư viện <cmath>).

Phân tích đề

Cần thêm thư viện: #include <cmath> để dùng hàm sqrt()

Công thức:

  • Chu vi = 3 × cạnh

  • Diện tích = (√3 / 4) × cạnh²

Output mẫu:

Nhap canh tam giac deu: 6
Chu vi   : 18.00
Dien tich: 15.59


Bài 2: Máy tính đơn giản

Đề bài: Nhập 2 số nguyên a, b từ bàn phím. In ra kết quả 5 phép tính: cộng, trừ, nhân, chia (số thực), chia lấy dư.

Phân tích đề

Các bước thực hiện:

  1. Nhập ab

  2. Tính và in 5 phép toán

  3. Với phép chia: dùng (float)a / b để ra số thực

Output mẫu:

Nhap so a: 17
Nhap so b: 4
17 + 4 = 21
17 - 4 = 13
17 * 4 = 68
17 / 4 = 4.25
17 % 4 = 1


Bài 3: Tính BMI

Đề bài: Nhập cân nặng (kg) và chiều cao (m). Tính và in chỉ số BMI. Công thức: BMI = canNang / (chieuCao * chieuCao). Hiển thị kết quả 2 chữ số thập phân.

Phân tích đề

Output mẫu:

Nhap can nang (kg): 60
Nhap chieu cao (m): 1.70
Chi so BMI: 20.76


Bài 4: Tính tiền gửi tiết kiệm

Đề bài: Nhập số tiền gốc (VND) và lãi suất (%/năm). Tính tiền lãi và tổng tiền sau 1 năm.

Phân tích đề

Công thức:

  • Tiền lãi = Tiền gốc × (lãi suất / 100)

  • Tổng tiền = Tiền gốc + Tiền lãi

Output mẫu:

Nhap tien goc (VND)   : 10000000
Nhap lai suat (%/nam) : 7.5
Tien lai sau 1 nam    : 750000.00
Tong tien nhan duoc   : 10750000.00


V. Ghi Chú Quan Trọng

Lỗi hay gặp

Lỗi Nguyên nhân Cách sửa
Nhập số thực nhưng biến là int int x; cin >> x; nhap 3.5 → x = 3 Khai báo float x nếu cần số thực
cin chỉ lấy 1 từ đầu tiên cin >> ten với input "Nguyen Van An" → ten = "Nguyen" Dùng getline(cin, ten) để lấy cả dòng
Quên #include <iomanip> setprecision hoặc setw không hoạt động Thêm #include <iomanip>
setprecision không hoạt động đúng Chưa có fixed trước Dùng cout << fixed << setprecision(2)

Cú Pháp Quan Trọng

// Nhập dữ liệu
cin >> bien;
cin >> bien1 >> bien2 >> bien3;

// Xuất định dạng đặc biệt
#include <iomanip>
cout << fixed << setprecision(2) << soThuc;  // 2 chữ số thập phân
cout << setw(10) << "Ten";                    // Căn phải, độ rộng 10

// Nhập cả dòng (có khoảng trắng)
string hoTen;
getline(cin, hoTen);

VI. Ôn Tập Trắc Nghiệm

Kiểm tra kiến thức buổi học qua 15 câu trắc nghiệm:

Làm bài trắc nghiệm Buổi 4