Bài tập C++ có lời giải/Cấu trúc (Struct)

Tủ sách mở Wikibooks

Bài 1: Viết chương trình nhập vào N phân số (mỗi dòng gồm 2 số nguyên là tử số và mẫu số), yêu cầu tìm phân số nhỏ nhất trong các phân số trên (sau khi tối giản).

Input
Output
1 2
2 4
1/2
#include <iostream>
using namespace std;

struct PhanSo {
	int tu, mau;
};

istream& operator >> (istream & is, PhanSo & m) {
	is >> m.tu >> m.mau;
	return is;
}

ostream& operator << (ostream & os, PhanSo m) {
	os << m.tu << "/" << m.mau;
	return os;
}

int UCLN(int m , int n) {
    
	if (m == 0 && n == 0)
	    return 1;
	    
	while (m != n) {
		if (m > n)
		    m -= n;
		else n -= m;
	}
	return m;
}

void Rutgon(PhanSo & m) {
	int d = UCLN(m.tu, m.mau);
	m.tu /= d;
	m.mau /= d;
}

bool operator > (PhanSo m, PhanSo n) {
	if (m.tu / m.mau > n.tu / n.mau)
		return true;
	return false;
}

int main () {
	int d , bdem = 1;
	PhanSo A[100];
	while (cin >> A[bdem]) {
		Rutgon(A[bdem]);
		++bdem;
	}
	PhanSo K = A[1];
	for (int i = 2; i < bdem; i++) {
		if (K > A[i]){
			K=A[i];
		}
	}
	cout << K;
	return 0;
}

Bài 2: Nhập vào một danh sách lớp SinhVien, yêu cầu xuất ra thông tin của tất cả sinh viên có điểm trung bình cao nhất và thấp nhất trong lớp đó.

  • Dữ liệu vào: Một danh sách lớp sinh viên với số lượng N tùy ý.
  • Dữ liệu ra: Họ tên, năm sinh và điểm trung bình của tất cả các sinh viên có điểm trung bình cao nhất và thấp nhất.

VD:

Input
Output
NguyenVanA
1998
9.3
NguyenVanB
1998
9.3
NguyenVanC
1998
9.3
NguyenVanD
1998
9
NguyenVanE
1998
9
Diem cao nhat lop:
#1
NguyenVanA 1998 9.3
#2
NguyenVanB 1998 9.3
#3
NguyenVanC 1998 9.3
Diem thap nhat lop:
#1
NguyenVanD 1998 9
#2
NguyenVanE 1998 9
#include <iostream>
#include <string>

using namespace std;

typedef struct SinhVien
{
	string HoTen;
	int NamSinh;
	double DTB;
} sv;

int main()
{
	sv a[100];
	int n = 0;
	while (cin >> a[n].HoTen >> a[n].NamSinh >> a[n].DTB) {
		n++;
	}
	double max = a[0].DTB, min = a[0].DTB;
	for (int i = 1; i < n; i++) {
		if (max < a[i].DTB) max = a[i].DTB;
		if (min > a[i].DTB) min = a[i].DTB;
	}
	int j = 0;
	cout << "Diem cao nhat lop:" << endl;
	for (int i = 0; i < n; i++) {
		if (a[i].DTB == max) {
			cout << "#" << j + 1 << endl;
			cout << a[i].HoTen << " " << a[i].NamSinh << " " << a[i].DTB << endl;
			j++;
		}
	}
	j = 0;
	cout << "Diem thap nhat lop:" << endl;
	for (int i = 0; i < n; i++) {
		if (a[i].DTB == min) {
			cout << "#" << j + 1 << endl;
			cout << a[i].HoTen << " " << a[i].NamSinh << " " << a[i].DTB << endl;
			j++;
		}
	}
    return 0;
}