NỘI DUNG:
Ôn tập các kiến thức liên quan đến cấu trúc (struct) trong C
Tìm hiểu lý thuyết rước khi xem bài này
BÀI 1:
BÀI 1:
Tạo struct PhanSo với 2 trường dữ liệu là tuSo và mauSo. Xây dựng các hàm:
- Nhập phân số,
- Xuất phân số,
- Tìm ước số chung lớn nhất,
- Rút gọn phân số.
Input: Nhập phân số (tử số và mẫu số) từ bàn phím
Output: In ra phân số đã rút gọn.
BÀI 2:
THỰC HIỆN
BÀI 1:
BÀI 2:
Xong!
Tạo struct PhanSo với 2 trường dữ liệu là tuSo và mauSo. Xây dựng các hàm:
- Nhập phân số,
- Xuất phân số,
- Tính tổng 2 phân số,
- Tính tích 2 phân số,
- Tính thương 2 phân số.
Input: Nhập phân số (tử số và mẫu số) từ bàn phím
Output: Xuất tổng, thương, tích
BÀI 3:
Xây dựng hàm các nhập và xuất phân số
Input:
- Nhập n (số lượng phân số cần nhập) từ bàn phím,
- Nhập vào các phân số theo số lượng n
Output: Xuất ra tất cả các phân số vừa nhập
BÀI 4:
Tạo struct SinhVien với các trường thông tin: họ tên, điểm. Xây dựng các
hàm:
- Nhập thông tin sinh viên
- Xuất thông tin sinh viên
- Sắp xếp giảm dần theo cột/trường dữ liệu điểm
Input: Nhập vào họ tên, điểm của sinh viên
Output:
Output:
- Hiển thị ra thông tin sinh viên,
điểm, học lực (1 sinh viên)
- Hiển thị ra thông tin sinh viên, điểm, học lực, sắp xếp theo thứ
tự điểm giảm dần (danh sách sinh viên)
BÀI 5:
Tạo struct NhanVien với các trường thông tin: mã nhân viên, tên nhân viên,
lương căn bản. Xây dựng các hàm:
- Nhập thông tin nhân viên
- Xuất danh sách nhân viên
- Sắp xếp tên theo thứ tự từ a đến z
- Sắp xếp mức lương căn bản theo thứ tự giảm dần
- Và một số hàm khác nếu cần thiết
Input: Nhập thông tin cho n nhân viên, n là số lượng nhân viên
Output:
- Hiển thị thông tin nhân viên theo tên đã sắp xếp theo yêu cầu xây dựng
hàm
- Hiển thị thông tin nhân viên theo mức lương căn bản đã sắp xếp theo yêu cầu xây dựng hàm
- Hiển thị thông tin nhân viên theo mức lương căn bản đã sắp xếp theo yêu cầu xây dựng hàm
- Hiển thị thông tin 2 nhân viên có mức lương cao nhất.
- Hiển thi thông tin 1 nhân viên có mức lương cao/thấp nhất.
THỰC HIỆN
BÀI 1:
Tạo struct PhanSo với 2 trường dữ liệu là tuSo và mauSo. Xây dựng các
hàm:
- Nhập phân số,
- Xuất phân số,
- Tìm ước số chung lớn nhất,
- Rút gọn phân số.
Input: Nhập phân số (tử số và mẫu số) từ bàn phím
Output: In ra phân số đã rút gọn.
Code:
#include<stdio.h>
struct PhanSo{
int tuSo;
int mauSo;
};
typedef struct PhanSo PS;
int uCLN(int a, int b){
if (a == 0 || b == 0) return a + b;
while ( a != b){
if ( a > b)
// a = a - b;
a -= b;
else
b -= a;
}return a;
}
void rutGonPhanSo(PS &ps){ // cả tử và mẫu cùng chia hết cho ước số chung lớn nhất
int uocSo = uCLN(ps.tuSo, ps.mauSo);
ps.mauSo = ps.mauSo / uocSo;
ps.tuSo = ps.tuSo / uocSo;
}
void nhapPhanSo(PS &ps){
printf("\nNhap TU so: ");
scanf("%d", &ps.tuSo);
printf("\nNhap MAU so: ");
scanf("%d", &ps.mauSo);
}
void xuatPhanSo(PS ps){
rutGonPhanSo(ps); // rút gọn rồi mới in ra
printf("\n%d/%d", ps.tuSo, ps.mauSo);
}
int main(){
PS ps;
nhapPhanSo(ps);
// rutGonPhanSo(ps);
xuatPhanSo(ps);
}
BÀI 2:
Tạo struct PhanSo với 2 trường dữ liệu là tuSo và mauSo. Xây dựng các
hàm:
- Nhập phân số,
- Xuất phân số,
- Tính tổng 2 phân số,
- Tính tích 2 phân số,
- Tính thương 2 phân số.
Input: Nhập phân số (tử số và mẫu số) từ bàn phím
Output: Xuất tổng, thương, tích
Code:
#include<stdio.h>
struct PhanSo{
int tuSo;
int mauSo;
};
typedef struct PhanSo PS;
void nhapPhanSo(PS &a){
printf("\nNhap TU so: "); scanf("%d", &a.tuSo);
printf("\nNhap MAU so: "); scanf("%d", &a.mauSo);
}
void xuatPhanSo(PS a){
printf("%d/%d", a.tuSo, a.mauSo);
}
PS tongPhanSo(PS a, PS b){
PS tong;
tong.tuSo = (a.tuSo * b.mauSo) + (b.tuSo * b.mauSo); // hieu thay + thanh tru
tong.mauSo = a.mauSo * b.mauSo;
return tong;
}
PS tichPhanSo(PS a, PS b){
PS tich;
tich.mauSo = a.mauSo * b.mauSo;
tich.tuSo = a.tuSo * b.tuSo;
return tich;
}
PS thuongPhanSo(PS a, PS b){
PS thuong;
thuong.tuSo = a.tuSo * b.mauSo;
thuong.mauSo = a.mauSo * b.tuSo;
return thuong;
}
int main(){
PS ps1, ps2;
nhapPhanSo(ps1);
nhapPhanSo(ps2);
printf("\nTong 2 phan so la: ");
xuatPhanSo(tongPhanSo(ps1, ps2));
printf("\nTich 2 phan so la: ");
xuatPhanSo(tichPhanSo(ps1, ps2));
printf("\nThuong 2 phan so la: ");
xuatPhanSo(thuongPhanSo(ps1, ps2));
}
BÀI 3:
Xây dựng hàm các nhập và xuất phân số
Input:
- Nhập n (số lượng phân số cần nhập) từ bàn phím,
- Nhập vào các phân số theo số lượng n
Output: Xuất ra tất cả các phân số vừa nhập
Code:
#include<stdio.h>
struct PhanSo{
int tuSo;
int mauSo;
};
typedef struct PhanSo PS;
void nhapPhanSo(PS &ps){
printf("\nNhap TU so: ");
scanf("%d", &ps.tuSo);
printf("\nNhap MAU so: ");
scanf("%d", &ps.mauSo);
}
void xuatPhanSo(PS ps){
printf("\n%d/%d", ps.tuSo, ps.mauSo);
}
int main(){
PS ps[100]; // mảng một chiều
int n, i;
printf("\nNhap vao SO LUONG phan so can nhap: ");
scanf("%d", &n);
for(i = 0; i < n; i++) nhapPhanSo(ps[i]);
printf("\nCac phan so vua nhap la: ");
for(i = 0; i < n; i++) xuatPhanSo(ps[i]);
}
BÀI 4:
Tạo struct SinhVien với các trường thông tin: họ tên, điểm. Xây
dựng các hàm:
- Nhập thông tin sinh viên
- Xuất thông tin sinh viên
- Sắp xếp giảm dần theo cột/trường dữ liệu điểm
Input: Nhập vào họ tên, điểm của sinh viên
Output:
Output:
- Hiển thị ra thông tin sinh
viên, điểm, học lực (1 sinh viên)
Code:
#include<stdio.h>
struct SinhVien{
char tenSinhVien[50];
float diemTrungBinh;
};
typedef struct SinhVien SV;
void xepLoai(SV sv){
printf("\nHoc luc: ");
if (sv.diemTrungBinh >= 9){
printf ("Xuat sac!");
} else if (sv.diemTrungBinh >= 8){
printf ("Gioi!");
} else if (sv.diemTrungBinh >= 6.5){
printf ("Kha!");
} else if (sv.diemTrungBinh >= 5){
printf ("Trung binh!");
} else printf ("Yeu!");
}
void xepLoaiVietGon(SV sv){ // tương tự hàm xepLoai, có thể dùng 1 trong 2 hàm
printf("\nHoc luc: ");
if (sv.diemTrungBinh >= 9) printf ("Xuat sac!");
else if (sv.diemTrungBinh >= 8) printf ("Gioi!");
else if (sv.diemTrungBinh >= 6.5) printf ("Kha!");
else if (sv.diemTrungBinh >= 5) printf ("Trung binh!");
else printf ("Yeu!");
}
void nhapSinhVien(SV &sv){
printf("\nNhap ten sinh vien: ");
// getchar();
fflush(stdin);
gets(sv.tenSinhVien);
printf("\nNhap diem trung binh: ");
scanf("%f", &sv.diemTrungBinh);
}
void xuatSinhVien(SV sv){
printf("\nTen sinh vien: %s", sv.tenSinhVien);
printf("\nDiem trung binh: %.2f", sv.diemTrungBinh);
xepLoai(sv);
}
int main(){
SV sv;
nhapSinhVien(sv);
xuatSinhVien(sv);
}
- Hiển thị ra thông tin sinh viên, điểm, học lực, sắp xếp theo thứ
tự điểm giảm dần (danh sách sinh viên)
Code:
#include<stdio.h>
struct SinhVien{
char tenSinhVien[50];
float diemTrungBinh;
};
typedef struct SinhVien SV;
void xepLoai(SV sv){
printf(" Hoc luc: ");
if (sv.diemTrungBinh >= 9){
printf ("Xuat sac!");
} else if (sv.diemTrungBinh >= 8){
printf ("Gioi!");
} else if (sv.diemTrungBinh >= 6.5){
printf ("Kha!");
} else if (sv.diemTrungBinh >= 5){
printf ("Trung binh!");
} else printf ("Yeu!");
}
void xepLoaiVietGon(SV sv){
printf("\nHoc luc: ");
if (sv.diemTrungBinh >= 9) printf ("Xuat sac!");
else if (sv.diemTrungBinh >= 8) printf ("Gioi!");
else if (sv.diemTrungBinh >= 6.5) printf ("Kha!");
else if (sv.diemTrungBinh >= 5) printf ("Trung binh!");
else printf ("Yeu!");
}
void nhapSinhVien(SV &sv){
printf("\nNhap ten sinh vien: ");
// getchar();
fflush(stdin);
gets(sv.tenSinhVien);
printf("\nNhap diem trung binh: ");
scanf("%f", &sv.diemTrungBinh);
}
void nhapSinhVienDS(SV sv[], int n){
for (int i = 0; i < n; i++){
printf("\nNhap thong tin sinh vien thu %d ", i + 1);
nhapSinhVien(sv[i]);
}
}
void xuatSinhVien_BanDau(SV sv){
printf("\nTen sinh vien: %s", sv.tenSinhVien);
printf("Diem trung binh: %.2f", sv.diemTrungBinh);
xepLoai(sv);
}
void xuatSinhVien(SV sv){
printf("\nTen sinh vien: %s", sv.tenSinhVien);
printf(" Diem trung binh: %.2f", sv.diemTrungBinh);
xepLoai(sv);
}
void xuatSinhVienDS(SV sv[], int n){
for (int i = 0; i < n; i++){
printf("\nThong tin sinh thu %d ", i + 1);
xuatSinhVien(sv[i]);
}
}
void sapXep(SV sv[], int n){
int i, j;
for (i = 0; i < n - 1; i++){
for (j = i + 1; j < n; j++){
if (sv[i].diemTrungBinh < sv[j].diemTrungBinh){
SV svtmp;
svtmp = sv[i];
sv[i] = sv[j];
sv[j] = svtmp;
}
}
}
}
int main(){
int n;
printf("\nNhap so luong sinh vien can them thong tin: ");
scanf("%d", &n);
SV sv[n];
nhapSinhVienDS(sv, n);
sapXep(sv, n);
xuatSinhVienDS(sv, n);
}
BÀI 5:
Tạo struct NhanVien với các trường thông tin: mã nhân viên, tên nhân
viên, lương căn bản. Xây dựng các hàm:
- Nhập thông tin nhân viên
- Xuất danh sách nhân viên
- Sắp xếp tên theo thứ tự từ a đến z
- Sắp xếp mức lương căn bản theo thứ tự giảm dần
- Và một số hàm khác nếu cần thiết
Input: Nhập thông tin cho n nhân viên, n là số lượng nhân viên
Output:
- Hiển thị thông tin nhân viên theo tên đã sắp xếp theo yêu cầu xây dựng
hàm
- Hiển thị thông tin nhân viên theo mức lương căn bản đã sắp xếp theo yêu cầu xây dựng hàm
- Hiển thị thông tin nhân viên theo mức lương căn bản đã sắp xếp theo yêu cầu xây dựng hàm
- Hiển thị thông tin 2 nhân viên có mức lương cao nhất.
- Hiển thi thông tin 1 nhân viên có mức lương cao/thấp nhất.
- Bài 85.1
- Bài 85.2
- Bài 85.3
- Bài 85.4
- Bài 85.5
- Bài 85.6
Nhập xuất một nhân viên
#include<stdio.h>
struct NhanVien{
char maNhanVien[20];
char tenNhanVien[50];
int luongCanBan;
};
typedef struct NhanVien NV;
void nhapNhanVien(NV &nv){
printf("Nhap ma NV: ");
scanf("%s", &nv.maNhanVien);//vi ko co khoang trang
printf("Nhap ten NV: ");
fflush(stdin);
gets(nv.tenNhanVien);
printf("Nhap muc luong can ban: ");
scanf("%d", &nv.luongCanBan);
}
void xuatNhanVien(NV nv){
printf("\nMa NV: %s", nv.maNhanVien);
printf("\nTen NV: %s", nv.tenNhanVien);
printf("\nLuong can ban: %d", nv.luongCanBan);
printf("\n");
}
int main(){
NV nv;
nhapNhanVien(nv);
xuatNhanVien(nv);
}
Nhập xuất n nhân viên
#include<stdio.h>
struct NhanVien{
char maNhanVien[20];
char tenNhanVien[50];
int luongCanBan;
};
typedef struct NhanVien NV;
void nhapNhanVien(NV &nv){
printf("Nhap ma NV: ");
scanf("%s", &nv.maNhanVien);//vi ko co khoang trang
printf("Nhap ten NV: ");
fflush(stdin);
gets(nv.tenNhanVien);
printf("Nhap muc luong can ban: ");
scanf("%d", &nv.luongCanBan);
}
void xuatNhanVien(NV nv){
printf("\nMa NV: %s", nv.maNhanVien);
printf("\nTen NV: %s", nv.tenNhanVien);
printf("\nLuong can ban: %d", nv.luongCanBan);
printf("\n");
}
void nhapNhanVienDS(NV nv[], int n){
for (int i = 0; i < n; i++){
printf("\nNhap thong tin NV thu %d!\n", i + 1);
nhapNhanVien(nv[i]);
}
}
void xuatNhanVienDS(NV nv[], int n){
for (int i = 0; i < n; i++){
printf("\nNhap thong tin NV thu %d!", i + 1);
xuatNhanVien(nv[i]);
}
}
int main(){
int n;
printf("\nNhap so luong NV can them: ");
scanf("%d", &n);
NV nv[n];
nhapNhanVienDS(nv, n);
xuatNhanVienDS(nv, n);
}
Nhập n nhân viên, xuất danh sách nhân viên đã sắp xếp mức lương căn
bản theo thứ tự giảm dần
#include<stdio.h>
struct NhanVien{
char maNhanVien[20];
char tenNhanVien[50];
int luongCanBan;
};
typedef struct NhanVien NV;
void nhapNhanVien(NV &nv){
printf("Nhap ma NV: ");
scanf("%s", &nv.maNhanVien);//vi ko co khoang trang
printf("Nhap ten NV: ");
fflush(stdin);
gets(nv.tenNhanVien);
printf("Nhap muc luong can ban: ");
scanf("%d", &nv.luongCanBan);
}
void xuatNhanVien(NV nv){
printf("\nMa NV: %s", nv.maNhanVien);
printf("\nTen NV: %s", nv.tenNhanVien);
printf("\nLuong can ban: %d", nv.luongCanBan);
printf("\n");
}
void nhapNhanVienDS(NV nv[], int n){
for (int i = 0; i < n; i++){
printf("\nNhap thong tin NV thu %d!\n", i + 1);
nhapNhanVien(nv[i]);
}
}
void xuatNhanVienDS(NV nv[], int n){
for (int i = 0; i < n; i++){
printf("\nNhap thong tin NV thu %d!", i + 1);
xuatNhanVien(nv[i]);
}
}
void hoanVi(NV &nv1, NV &nv2){
NV temp;
temp = nv1;
nv1 = nv2;
nv2 = temp;
}
void sapXep_DangSo(NV nv[], int n){
for (int i = 0; i < n - 1; i++){
for (int j = i + 1; j < n; j++){
if (nv[i].luongCanBan < nv[j].luongCanBan){
hoanVi(nv[i], nv[j]);
}
}
}
}
int main(){
int n;
printf("\nNhap so luong NV can them: ");
scanf("%d", &n);
NV nv[n];
nhapNhanVienDS(nv, n);
sapXep_DangSo(nv, n);
xuatNhanVienDS(nv, n);
}
Nhập n nhân viên, xuất danh sách nhân viên đã sắp xếp tên theo thứ
tự từ a đến z
#include<stdio.h>
#include<string.h>
struct NhanVien{
char maNhanVien[20];
char tenNhanVien[50];
int luongCanBan;
};
typedef struct NhanVien NV;
void nhapNhanVien(NV &nv){
printf("Nhap ma NV: ");
scanf("%s", &nv.maNhanVien);//vi ko co khoang trang
printf("Nhap ten NV: ");
fflush(stdin);
gets(nv.tenNhanVien);
printf("Nhap muc luong can ban: ");
scanf("%d", &nv.luongCanBan);
}
void xuatNhanVien(NV nv){
printf("\nMa NV: %s", nv.maNhanVien);
printf("\nTen NV: %s", nv.tenNhanVien);
printf("\nLuong can ban: %d", nv.luongCanBan);
printf("\n");
}
void nhapNhanVienDS(NV nv[], int n){
for (int i = 0; i < n; i++){
printf("\nNhap thong tin NV thu %d!\n", i + 1);
nhapNhanVien(nv[i]);
}
}
void xuatNhanVienDS(NV nv[], int n){
for (int i = 0; i < n; i++){
printf("\nNhap thong tin NV thu %d!", i + 1);
xuatNhanVien(nv[i]);
}
}
void hoanVi(NV &nv1, NV &nv2){
NV temp;
temp = nv1;
nv1 = nv2;
nv2 = temp;
}
void sapXep_DangChuoi(NV nv[], int n){
for (int i = 0; i < n - 1; i++){
for (int j = i + 1; j < n; j++){
if (strcmp(nv[i].tenNhanVien, nv[j].tenNhanVien) > 0){
hoanVi(nv[i], nv[j]);
}
}
}
}
int main(){
int n;
printf("\nNhap so luong NV can them: ");
scanf("%d", &n);
NV nv[n];
nhapNhanVienDS(nv, n);
sapXep_DangChuoi(nv, n);
xuatNhanVienDS(nv, n);
}
Hiển thị thông tin 2 nhân viên có mức lương cao nhất.
Trên cơ sở mức lương đã sắp xếp chúng ta gọi hàm xuất 2 nhân viên là
được
xuatNhanVienDS(nv, 2);
Hiển thi thông tin 1 nhân viên có mức lương cao/thấp nhất.
void timLuong_Max(NV nv[], int n){
NV maxLuongNV = nv[0];
int viTriMax = 0;
int maxLuong = nv[0].luongCanBan;
for (int i = 0; i < n; i++){
if (nv[i].luongCanBan > maxLuong){ // tùy yêu cầu mà thay đổi dấu của biểu thức so sánh
maxLuongNV = nv[i];
viTriMax = i; // lưu vị trí thỏa điều kiện
}
}
xuatNhanVien(nv[viTriMax]);
}