Bài tập về Struct

Cho một danh sách sinh viên được mô tả chi tiết như sau:

  • Danh sách sinh viên gồm n sinh viên. với n được nhập bất kỳ.
  • Thông tin một sinh viên bao gồm: Số thứ tự, Mã số sinh viên, Họ tên sinh viên, Điểm Nhập môn lập trình, Môn toán A1, Môn toán A2, Môn Vật lý kỹ thuật, Môn anh văn, Điểm trung bình tích lũy, Xếp loại (xuất sắc, giỏi, khá, trung bình, yếu).
  • Thông tin môn học bao gồm: Mã môn, Tên môn, Số tín chỉ, Điểm.
    Thực hiện các yêu cầu sau:
    a) Hãy thiết kế và xây dựng các cấu trúc (struct) phù hợp cho bài toán
    b) Xây dựng một chương trình hoàn chỉnh cho một lớp học đảm bảo các thao tác sau:
  • Hàm nhập xuất danh sách sinh viên (2 điểm).
  • Tìm một sinh viên thông qua mã số sinh viên hoặc qua tên sinh viên (1 điểm)
  • Tìm sinh viên có điểm trung bình cao nhất (1 điểm)
  • Liệt kê danh sách các sinh viên thuộc một loại bất kỳ (1 điểm)
  • Thêm, xóa một sinh viên ra khỏi danh sách (2 điểm)
  • Sắp xếp danh sách sinh viên tăng dần (1 điểm).
  • Theo điểm trung bình tích lũy
  • Hoặc Theo tên theo thứ tự ABC …
    Lưu ý:
  • ĐTBTC là trung bình cộng của tất cả các môn dựa trên điểm số và số tín chỉ.
  • Lưu ý: Xếp loại được tính như sau:
  • Xuất sắc: ĐTBTL>=9
  • Giỏi với: 8.0<=ĐTBTL<9
  • Khá với: 6.5<=ĐTBTL<8.0
  • Trung bình: 5.0<=ĐTBTL<6.5
  • Yếu: ĐTBTL<5

Em code thế này đước điểm tối đa không mọi người (chỉ câu a thôi nha ^^)
P/s Phần này em chưa học nên chưa có kinh nghiệm

#include<stdio.h>
#include<conio.h>
struct SinhVien
{
	char Hovaten[30],MSSV[10],Ngaysinh[10];
	float diemtoan,diemanhvan;
	
};
struct Thongtinmonhoc
{
	//Mã môn, Tên môn, Số tín chỉ, Điểm.
	char Mamon[10],Tenmon[10];
	int Sotinchi;
	float diem;
};
void nhapthongtinmonhoc(Thongtinmonhoc &x)
{
	fflush(stdin);
	printf("\nNhap Ten Mon Hoc: ");
	gets(x.Tenmon);
	fflush(stdin);
	printf("\nNhap Ma Mon Hoc: ");
	gets(x.Mamon);
	printf("\nNhap so tinh chi: ");
	scanf("%d",&x.Sotinchi);
	printf("\nNhap diem: ");
	scanf("%f",&x.diem);

}
void xuatthongtinmonhoc(Thongtinmonhoc x)
{
	printf("\nTen Mon Hoc: %s",x.Tenmon);
	printf("\nMa Mon Hoc: %s",x.Mamon);
	printf("\nSo Tinh Chi: %d",x.Sotinchi);
	printf("\nDiem: %.2f",x.diem);

}
void nhapdulieuHS(SinhVien a[],int &n)
{
	
	for(int i=0;i<n;i++)
	{
		printf("\n------------------------------------\n");
		fflush(stdin);
		printf("\nNhap Ho Va Ten SV: ");
		gets(a[i].Hovaten);
		fflush(stdin);
		printf("\nNhap MSSV: ");
		gets(a[i].MSSV);
		fflush(stdin);
		printf("\nNhap ngay sinh: ");
		gets(a[i].Ngaysinh);
		printf("\nNhap diem toan: ");
		scanf("%f",&a[i].diemtoan);
		printf("\nNhap diem anh van: ");
		scanf("%f",&a[i].diemanhvan);
		
	}
}
void xuatdulieuHS(SinhVien a[],int n)
{
	for(int i=0;i<n;i++)
	{
		printf("\n------------------------------------\n");
		printf("\nHo va ten: %s",a[i].Hovaten);
		printf("\nMSSV: %s",a[i].MSSV);
		printf("\nNgay sinh: %s",a[i].Ngaysinh);
		printf("\nDiem toan: %0.1f",a[i].diemtoan);
		printf("\nDiem anh van: %0.1f",a[i].diemanhvan);
		printf("\n------------------------------------\n");
	}
}
void main()
{
	int n;
	Thongtinmonhoc x;
	SinhVien a[100];
	printf("\nNhap so luong SV: ");
	scanf("%d",&n);
	nhapdulieuHS(a,n);
	xuatdulieuHS(a,n);
	nhapthongtinmonhoc(x);
	xuatthongtinmonhoc(x);
	getch();
}
2 Likes

gồm có truct sinh viên thuộc kiểu môn học và struct danh sách sinh viên kiểu sinh viên
nghĩa là struct monhoc, sinhvien, danhsachsv

Mình ngĩ bạn cần thêm struct DanhSachSV.
Struct SinhVien các thuộc tính : Điểm Nhập môn lập trình,Môn toán A1, Môn toán A2, Môn Vật lý kỹ thuật, Môn anh văn, Điểm trung bình tích lũy, Xếp loại chưa có kìa bạn…

Mình chưa hiểu thuộc tính điểm ở đây có ý nghĩa j ???

1 Like

Mình cũng không hiểu luôn :frowning:

Struct SinhVien các thuộc tính : Điểm Nhập môn lập trình,Môn toán A1, Môn toán A2, Môn Vật lý kỹ thuật, Môn anh văn, Điểm trung bình tích lũy, Xếp loại chưa có kìa bạn.
Cái này do mình làm biếng :slight_smile:

chạy luôn :running: .
p/s: đùa chứ, k hiểu thì bạn hỏi thầy …hi

Ê mà làm câu

  • Tìm một sinh viên thông qua mã số sinh viên hoặc qua tên sinh viên
    thì làm sao ấy nhĩ

Thì viết hàm TimKiem với tham số đầu vào là keywork( char [30]) (do Hoten, MSSV bạn lưu kiểu đó), duyệt toàn bộ danh sách sinh viên, ku nào có MSSV hoặc Hoten trùng với Keywork thì lôi nó ra. Không có thì trả về null.

1 Like

xin lỗi vài ngày qua bận 1 số chuyện giải quyết vì thế ko tham gia để trả lời đc. Ý mình nói ở đây là lồng struct. nghĩa là ta có struct monhoc.h, sinhvien.h và danhsachsv.h
bạn làm từ từ thôi. với mảng các sinh viên trong danhsachsv và mảng monhoc trong sinhvien.
vídụ : sinhvien có nhiều môn học mà. :smile:

1 Like

Có 2 struct độc lập cần tạo trước là MonHoc (thông tin môn học) và Ngay (kiểu ngày/ tháng/ năm). Sau đó sử dụng 2 struct này trong struct SinhVien (lưu ý struct SinhVien không cần phải có thông tin điểm trung bình tích lũy và xếp loại vì dữ liệu này có thể được tính toán dựa trên điểm số các môn nên không cần lưu lại). Hơn nữa, bạn cũng không cần struct DanhSachSV vì cơ bản bạn có thể khai báo một mảng SinhVien và sử dụng :blush:

viết chương trình có sử dụng kiểu dữ liệu struct và định nghĩa các hàm để thực hiện các công việc sau:
a) Nhập MSSV (số nguyên), họ lót (chuỗi), tên (chuỗi) và điểm (số thực) của không quá 20 sinh viên (2 điểm).
b) Tìm các sinh viên có điểm thấp nhất và cao nhất (2 điểm).
c) Tính điểm trung bình của các sinh viên (2 điểm).
d) Tìm họ tên của sinh viên có MSSV được nhập từ bàn phím (2 điểm).
e) Tìm tất cả sinh viên (gồm MSSV, họ tên và điểm) có tên giống với tên được nhập từ bàn phím (2 điểm).
anh bạn anh chị giúp mình giải bài này với.cám ơn ạ!!

Tạo topic mới đi bạn. Hơn nữa bạn nhờ giúp mà đưa nguyên cái đề như thế này không ổn, dù biết cũng không ai rãnh làm cho bạn hết :wink: Bạn nên làm, và cố gắng làm và hỏi những khó khăn, khuất mắt

ban oi cho minh hoi neu ma cau hoi khac mot chut la : dung nhap khi ma MSSV la trong thi lam ntn

Tạo topic mới đi bạn. Nhớ gõ tiếng Việt có dấu.

1 Like

2 posts were split to a new topic: Thuật toán tìm kiếm trên danh sách liên kết

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?