Bài tập C++ có lời giải/Cấu trúc (Struct)
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;
}