4. KIỂU CẤU TRÖC
4.4. Các ví dụ minh hoạ
Dưới đây chúng ta đưa ra một vài ví dụ minh hoạ cho việc sử dụng kiểu cấu trúc.
Ví dụ 1 : Cộng, trừ, nhân chia hai phân số được cho dưới dạng cấu trúc. #include <iostream.h> #include <conio.h> struct Phanso { int tu ; int mau ; } a, b, c ; void main() { clrscr();
cout << "Nhập phân số a:" << endl ; cout << "Tử:"; cin >> a.tu;
cout << "Mẫu:"; cin >> a.mau;
cout << "Nhập phân số b:" << endl ; cout << "Tử:"; cin >> b.tu;
c.tu = a.tu*b.mau + a.mau*b.tu; // tính và in a+b c.mau = a.mau*b.mau;
cout << "a + b = " << c.tu << "/" << c.mau; c.tu = a.tu*b.mau - a.mau*b.tu;
c.mau = a.mau*b.mau;
cout << "a - b = " << c.tu << "/" << c.mau; // tính và in a-b c.tu = a.tu*b.tu;
c.mau = a.mau*b.mau;
cout << "a * b = " << c.tu << "/" << c.mau; // tính và in axb c.tu = a.tu*b.mau;
c.mau = a.mau*b.tu;
cout << "a + b = " << c.tu << "/" << c.mau; // tính và in a/b getch();
}
Ví dụ 2 : Nhập mảng K41T. Tính tuổi trung bình của sinh viên nam, nữ. Hiện danh
sách của sinh viên có điểm thi cao nhất. #include <iostream.h> #include <conio.h> void main() { struct Ngaythang { int ng ; int th ; int nam ; }; struct Sinhvien { char hoten[25] ; Ngaythang ns; int gt;
float diem ; } x, K41T[60]; int i, n;
// nhập dữ liệu
cout << "Cho biết số sinh viên: "; cin >> n; for (i=0; i<n; i++)
{
cout << "Nhap sinh vien thu " << i); cout << "Ho ten: " ; cin.getline(x.hoten);
cout << "Ngày sinh: " ; cin >> x.ns.ng >> x.ns.th >>x.ns.nam ; cout << "Giới tính: " ; cin >> x.gt ;
cout << "Điểm: " ; cin >> x.diem ; cin.ignore();
K41T[i] = x ; }
}
// Tính điểm trung bình float tbnam = 0, tbnu = 0; int sonam = 0, sonu = 0 ; for (i=0; i<n; i++)
if (K41T[i].gt == 1) { sonam++ ; tbnam += K41T[1].diem ; } else { sonu++ ; tbnu += K41T[1].diem ; }
cout << "Điểm trung bình của sinh viên nam là " << tbnam/sonam ; cout << "Điểm trung bình của sinh viên nữ là " << tbnu/sonu ; float diemmax = 0;
for (i=0; i<n; i++)
if (diemmax < K41T[i].diem) diemmax = K41T[i].diem ; // In danh sách sinh viên có điểm cao nhất
for (i=0; i<n; i++) {
if (K41T[i].diem < diemmax) continue ;// In danh sách x = K41T[i] ;
cout << x.hoten << '\t' ;
cout << x.ns.ng << "/" << x.ns.th << "/" << x.ns.nam << '\t' ; cout << (x.gt == 1) ? "Nam": "Nữ" << '\t' ;
cout << x.diem << endl; }
}
Ví dụ 3 : Nhập, hiển thị danh sách n sinh viên, n<100. Tìm kiếm sinh viên có điểm trung bình lớn nhất. Biết một sinh viên có các thông tin : họ tên, điểm môn 1, môn 2, môn 3, điểm trung bình.
#include<iostream.h> #include<string.h> #include<stdio.h> typedef struct{ char hten[30];
int m1, m2, m3;//diem mon 1, mon 2, mon 3 float dtb;
}Sinh_vien;
void nhap(Sinh_vien a[100], int &n) {
int i;
cout<<"Nhap so sv trong danh sach: "; cin>>n; for(i=0; i<n;i++) { cout<<"Nhap ho ten: "; fflush(stdin); gets(a[i].hten);
cin>>a[i].m1>>a[i].m2>>a[i].m3;
a[i].dtb=(float)(a[i].m1+a[i].m2+a[i].m3)/3; }
}
void hthi(Sinh_vien a[100], int n) {
for(int i=0;i<n;i++) {
cout<<"\nHo ten: "<<a[i].hten <<" Diem mon 1: "<<a[i].m1 <<" Diem mon 2: "<<a[i].m2 <<" Diem mon 3: "<<a[i].m3 <<" Diem TB: "<<a[i].dtb<<endl; }
}
int max(Sinh_vien a[100], int n) { int i; float m=a[0].dtb; int vt=0; for(i=1;i<n;i++) if(m<a[i].dtb) { m=a[i].dtb; vt=i; } return vt; } void main() {
Sinh_vien a[100]; int n;
nhap(a,n);
cout<<"\nDanh sach sv ban dau\n"; hthi(a,n);
cout<<"\nSinh vien co diem trung binh cao nhat la: "<<max(a,n); }