[CƠ SỞ LẬP TRÌNH] – BÀI TẬP STRUCT TRONG C++ (PHẦN 1)

Bài 1: Viết chương trình nhập thông tin họ tên học sinh, điểm thi 2 môn Văn, Toán. Tính điểm trung bình, in kết quả ra màn hình theo format.
Bài 2: Viết chương trình khai báo cấu trúc lưu trữ thông tin sinh viên: mã sinh viên, họ tên, ngày sinh, địa chỉ, khoa, môn 1, môn 2, môn 3.
Bài 3: Viết chương trình nhập 1 danh sách 10 nhân viên gồm các thông tin như sau: họ lót, tên, ngày sinh, mức lương. Xuất ra màn hình danh sách nhân viên này theo thứ tự vần tên tăng dần. Cho biết người có mức lương cao nhất và thấp nhất.

BÀI TẬP CẤU TRÚC (STRUCT)

Bài 1: Viết chương trình nhập thông tin họ tên học sinh, điểm thi 2 môn Văn, Toán. Tính điểm trung bình, in kết quả ra màn hình theo format sau

a. Viết hàm nhập thông tin học sinh theo prototype sau
void Nhap(HocSinh &hs);
b. Viết hàm xuất thông tin học sinh theo prototype sau
void Xuat(HocSinh hs);
c. Viết hàm tính điểm trung bình học sinh theo prototype sau
void TinhTB(HocSinh &hs);
d. Viết chương trình nhập thông tin học sinh, tính điểm trung bình và in kết quả học sinh ra màn hình.

Hướng dẫn:

Khai báo kiểu cấu trúc HocSinh

struct HocSinh
{
       char HoTen[30];
       float Van, Toan, DTB;
};

a. Hàm nhập thông tin học sinh

void Nhap(HocSinh& hs)
{
       cout << “Nhap ho ten hoc sinh: “;
       gets_s(hs.HoTen);
       cout << “Toan: “;
       cin >> hs.Toan;
       cout << “Van: “;
       cin >> hs.Van;
}

b. Hàm xuất thông tin học sinh

void Xuat(HocSinh hs)
{
       cout << left << setw(30) << “Ho ten” << setw(10) << “Toan” << setw(10) << “Van” << setw(15) << “Trung binh” << endl;
       cout << setw(30) << hs.HoTen << setw(10) << fixed << setprecision(1) << hs.Toan << setw(10) << hs.Van << setw(15) << hs.DTB;
}

c. Hàm tính điểm trung bình học sinh

void TinhTB(HocSinh& hs)
{
       hs.DTB = (hs.Toan + hs.Van) / 2;
}

d. Viết chương trình nhập thông tin học sinh, tính điểm trung bình và in kết quả học sinh ra màn hình.

Kết quả:

Bài 2: Viết chương trình khai báo cấu trúc lưu trữ thông tin sinh viên

  • Mã sinh viên
  • Họ tên
  • Ngày sinh
  • Địa chỉ
  • Khoa
  • Môn 1
  • Môn 2
  • Môn 3

a. Viết hàm nhập thông tin sinh viên
b. Viết hàm xuất thông tin sinh viên
c. Viết hàm tính điềm trung bình và xuất kết quả ra màn hình
d. Viết hàm nhập mảng N sinh viên, tính điểm trung bình và in danh sách vừa nhập ra màn hình

Hướng dẫn:

Khai báo kiểu cấu trúc SinhVien

struct SinhVien
{
       char MSV[15], HoTen[50], NgaySinh[15], DiaChi[30], Khoa[30];
       float Mon1, Mon2, DTB;
};

Hàm nhập thông tin sinh viên

void Nhap(SinhVien& sv)
{
       while (getchar() != ‘\n’);
       cout << “Ma sinh vien: “; gets_s(sv.MSV);
       cout << “Ho ten: “; gets_s(sv.HoTen);
       cout << “Ngay sinh: “; gets_s(sv.NgaySinh);
       cout << “Dia chi: “; gets_s(sv.DiaChi);
       cout << “Khoa: “; gets_s(sv.Khoa);
       cout << “Mon 1: “; cin >> sv.Mon1;
       cout << “Mon 2: “; cin >> sv.Mon2;
}

Hàm xuất thông tin sinh viên

void Xuat(SinhVien sv)
{
       DTB(sv);
       cout << left << setw(15) << sv.MSV << setw(50) << sv.HoTen << setw(15) << sv.NgaySinh << setw(30) << sv.DiaChi << setw(30) << sv.Khoa;
       cout << setw(10) << fixed << setprecision(1) << sv.Mon1 << setw(10) << sv.Mon2 << setw(10) << sv.DTB << endl;
}

Hàm tính điểm trung bình sinh viên

void DTB(SinhVien& sv)
{
       sv.DTB = (sv.Mon1 + sv.Mon2) / 2;
}

Hàm nhập danh sách sinh viên

void NhapNSV(SinhVien a[], int n)
{
       for (int i = 0; i < n; i++)
       {
              cout << “Nhap sinh vien thu ” << i + 1 << endl;
              Nhap(a[i]);
       }
}

Hàm xuất danh sách sinh viên

void XuatNSV(SinhVien a[], int n)
{
       cout << endl << left << setw(15) << “Ma sinh vien” << setw(50) << “Ho ten” << setw(15) << “Ngay sinh” << setw(30) << “Dia chi” << setw(30) << “Khoa”;
       cout << setw(10) << “Mon 1” << setw(10) << “Mon 2” << setw(10) << “DTB”;
       cout << “\n———————————————————————————————————-\n”;
       for (int i = 0; i < n; i++)
              Xuat(a[i]);
}

Code chương trình hoàn chỉnh:

Kết quả:

Bài 3: Viết chương trình nhập 1 danh sách 10 nhân viên gồm các thông tin như sau:

  • Họ lót
  • Tên
  • Ngày sinh
  • Mức lương

Xuất ra màn hình danh sách nhân viên này theo thứ tự vần tên tăng dần. Cho biết người có mức lương cao nhất và thấp nhất.

Hướng dẫn:

Khai báo kiểu cấu trúc NhanVien

struct NhanVien
{
       char holot[30], ten[20], ngaysinh[15];
       float luong;
};

Hàm nhập thông tin nhân viên

void NhapNV(NhanVien& nv)
{
       while (getchar() != ‘\n’);
       cout << “Ho lot: “; gets_s(nv.holot);
       cout << “Ten: “; gets_s(nv.ten);
       cout << “Ngay sinh: “; gets_s(nv.ngaysinh);
       cout << “Muc luong: “; cin >> nv.luong;
}

Hàm xuất thông tin nhân viên

void XuatNV(NhanVien nv)
{
       cout << left << setw(30) << nv.holot << setw(20) << nv.ten << setw(20) << nv.ngaysinh << setw(20) << fixed << setprecision(0) << nv.luong << endl;
}

Hàm nhập danh sách nhân viên

void NhapNNV(NhanVien a[], int n)
{
       for (int i = 0; i < n; i++)
       {
              cout << “\nNhap thong tin vien thu ” << i + 1 << endl;
              NhapNV(a[i]);
       }
}

Hàm xuất danh sách nhân viên theo thứ tự vần tên tăng dần

void XuatNNV(NhanVien a[], int n)
{
       cout << endl << left << setw(30) << “Ho lot” << setw(20) << “Ten” << setw(20) << “Ngay sinh” << setw(20) << “Muc luong”;
       cout << “\n—————————————————————-\n”;
       for (int i = 0; i < n; i++)
       {
              for (int j = i + 1; j < n; j++)
                     if (strcmp(a[i].ten, a[j].ten) > 0)
                     {
                            NhanVien t;
                            t = a[i];
                            a[i] = a[j];
                            a[j] = t;
                     }
              XuatNV(a[i]);
       }
}

Hàm tìm nhân viên có mức lương cao nhất

void Luong_CaoNhat(NhanVien a[], int n)
{
       double max = a[0].luong;
       for (int i = 0; i < n; i++)
              if (max < a[i].luong)
                     max = a[i].luong;
       cout << “\nNhan vien co muc luong cao nhat:\n”;
       for (int i = 0; i < n; i++)
              if (a[i].luong == max)
                     XuatNV(a[i]);
}

Hàm tìm nhân viên có mức lương thấp nhất

void Luong_ThapNhat(NhanVien a[], int n)
{
       double min = a[0].luong;
       for (int i = 0; i < n; i++)
              if (min > a[i].luong)
                     min = a[i].luong;
       cout << “\nNhan vien co muc luong thap nhat:\n”;
       for (int i = 0; i < n; i++)
              if (a[i].luong == min)
                     XuatNV(a[i]);
}

Code chương trình hoàn chỉnh:

Kết quả:

Tác giả: Lê Thị Mỹ Hậu (sinh viên lớp 21DTH3, khoa Công Nghệ Thông Tin)

Bình luận về bài viết này