/*auto readmore*/ /*auto readmore*/ /* an hien script*/ // an hien password /*an hien ma chuong trinh cong tru */ /*Scrollbox thanh cuon*/ /***Nhung CODE***/ /* dòng xanh dòng trắng */ /* https://cdnjs.com/libraries/prism lay thu vien, can vao ten file ma goi 1. copy link vao vi du:prism-python.min.js 2. ten ngon nua la python */ /*=== New posts ===*/ /*header slider*/ /*=== bai viet lien quan===*/ /*===tabcode===*/

[Tự Học Lập Trình C - Qua Các Bài Tập] COM108_Nhập Môn Lập Trình - Bài 8 - Cấu Trúc (Structure) Trong C - P2 - Ôn Tập

NỘI DUNG:
Ôn tập các kiến thức liên quan đến cấu trúc (struct) trong C

YÊU CẦU:

Tìm hiểu lý thuyết rước khi xem bài này

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:
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: 
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 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: 
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 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.
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]);
}


Xong!

No comments:

Post a Comment

/*header slide*/