30/09/2018, 16:16

Bài tập cấu trúc dữ liệu(Làm sao nhập được N sinh viên)

Phần này chưa học, nên muốn tìm hiểu trước. Code trên là của người khác
Đề thi là như thế này:
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 (3 điểm).
    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
#include <stdio.h>
#include <conio.h>

#pragma pack(1) // Tránh bị làm tròn bộ nhớ.
// Khai báo cấu trúc dữ liệu sinh viên.
struct SinhVien
{
	char MaSo[30];
	float DiemToan, DiemLy, DiemHoa;
};
typedef struct SinhVien SINHVIEN; // Đổi "struct SinhVien" thành "SINHVIEN"

void NhapDuLieu(SINHVIEN &);
void XuatSinhVien(SINHVIEN);
float TinhDiemTrungBinh(SINHVIEN);

// Hàm nhập dữ liệu sinh viên.
void NhapDuLieu(SINHVIEN &x) // Chú ý: Phải có &: Tham chiếu.
{
	fflush(stdin); // Xóa bộ nhớ đệm.
	printf("
Nhap vao ho ten: ");
	gets(x.MaSo);

	// Nhập điểm toán.
	do{
		printf("
Nhap vao diem toan: ");
		scanf("%f", &x.DiemToan);

		if(x.DiemToan < 0 || x.DiemToan > 10)
		{
			printf("
Diem toan khong hop le. Xin kiem tra lai !");
		}
	}while(x.DiemToan < 0 || x.DiemToan > 10);

	// Nhập điểm lý.
	do{
		printf("
Nhap vao diem ly: ");
		scanf("%f", &x.DiemLy);

		if(x.DiemLy < 0 || x.DiemLy > 10)
		{
			printf("
Diem ly khong hop le. Xin kiem tra lai !");
		}
	}while(x.DiemLy < 0 || x.DiemLy > 10);

	// Nhập điểm hóa.
	do{
		printf("
Nhap vao diem hoa: ");
		scanf("%f", &x.DiemHoa);

		if(x.DiemHoa < 0 || x.DiemHoa > 10)
		{
			printf("
Diem hoa khong hop le. Xin kiem tra lai !");
		}
	}
         while(x.DiemHoa < 0 || x.DiemHoa > 10);
}

// Hàm xuất sinh viên.
void XuatSinhVien(SINHVIEN x)
{
	printf("
Ma so: %s", x.MaSo);
	printf("
Diem toan: %f", x.DiemToan);
	printf("
Diem ly: %f", x.DiemLy);
	printf("
Diem hoa: %f", x.DiemHoa);
	printf("
Diem trung binh la: %f", TinhDiemTrungBinh(x));
}

// Tính điểm trung bình của sinh viên.
float TinhDiemTrungBinh(SINHVIEN x)
{
	return (x.DiemToan + x.DiemLy + x.DiemHoa) / 3;
}

void main()
{
	SINHVIEN x;
	NhapDuLieu(x);
	XuatSinhVien(x);
	printf("
sizeof = %d", sizeof(x));
	getch();
}
Nguyễn Minh Dũng viết 18:16 ngày 30/09/2018

Em viết cái đề cụ thể ra đi @Kelvin_Nguy_n? Em trình bày khó hiểu quá

Thực tế khắc nghiệt viết 18:25 ngày 30/09/2018

có gì mà ko nhập được n sinh viên. mình mới tạo 1 struct với danh sách học sinh trong lớp học. bạn tìm khoá wiki có j ko hiểu hỏi mình

Kelvin Nguyễn viết 18:18 ngày 30/09/2018

Phần này chưa học, nên muốn tìm hiểu trước. Code trên là của người khác
Đề thi là như thế này:
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 (3 điểm).
    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
Thực tế khắc nghiệt viết 18:31 ngày 30/09/2018

quá dễ. đầu tiên bạn hãy tạo các thông tin cho 1 sinh viên đi. sau đó là bao nhiêu sinh viên chẳng được. làm từng bước nhỏ trc tránh sai xót. có j cứ lên đây hỏi ok

BaoLe viết 18:26 ngày 30/09/2018

Theo mình là bạn có thể dùng danh sách liên kết hoặc dùng mảng cũng được,nhưng dùng danh sách liên kết có vẻ thú vị hơn đấy.Bạn có thể tham khảo các video về danh sách liên kết của anh Đạt đấy.

CPP C++ Bài 01 - Giới thiệu C++ và Visual Studio C++ Bài 02 - Hello World C++ Bài 03 - Hello world (phần 2) C++ Bài 04 - Biến và kiểu dữ liệu C++ Bài 05 - CIN (phần 1) C++ Bài 06 - CIN (phần 2) C++ Bài 07 - Khai báo biến, Phép Gán C++ Bài 08 - Tầm vực của biến C++ Bài 09 - Câu lệnh If C++ Bài 10 - Hàm cơ bản kiểu void C++ Bài 11 - Hàm có tham số, tham số mặc định C++ Bài 12 - Hàm có nhiều tham số C++ Bài 13 - Class hay lớp C++ Bài 14 - Cách sử dụng biến trong class/lớp (Phần 1) C++ Bài 15 - Cá…

Thực tế khắc nghiệt viết 18:20 ngày 30/09/2018

danh sách liên kết của anh Đạt đấy.

đề yêu cầu dùng struct mà hehe

Nguyễn Minh Dũng viết 18:20 ngày 30/09/2018

Không nên hỏi chèn vào topic của người khác @Nhanh_Lan_R_ng, em có topic riêng của em rồi mà.
I moved a post to an existing topic: Off-topics will be moved here

Truong Pham viết 18:26 ngày 30/09/2018

Dùng mảng hoặc biến con trỏ để lưu dữ liệu sinh viên

Kelvin Nguyễn viết 18:20 ngày 30/09/2018

Tìm một sinh viên thông qua mã số sinh viên hoặc qua tên sinh viên thi lam như thế nào?

Đỗ Trung Quân viết 18:17 ngày 30/09/2018

Tìm một sinh viên thông qua mã số sinh viên hoặc qua tên sinh viên thi lam như thế nào?

Tìm 1 số có ở trong mảng không thì bạn làm thế nào?

Truong Pham viết 18:26 ngày 30/09/2018

Viết 1 hàm tìm mã hoặc tên

Thực tế khắc nghiệt viết 18:25 ngày 30/09/2018
char *trichTen(char *hoten)
{
    int k = strlen(hoten) - 1;
    while (k >= 0 && hoten[k] != ' ') k--;
    return (hoten + k + 1);
}
 
void timTheoTen(char ten[10])
{
    printf("\nNhung sinh vien co ten '%s':\n", ten);
    Nut *p = dau;
    while (p != NULL)                       //duyệt danh sách
    {
        if (strcmp(trichTen(p->HoTen), ten) == 0)
            printf("- %s (%g diem)\n", p->HoTen, p->Diem);
        p = p->Tiep;
    }
}

Tìm một sinh viên thông qua mã số sinh viên hoặc qua tên sinh viên thi lam như thế nào?

Nguyễn Duy Quang viết 18:32 ngày 30/09/2018

Kiểu cấu trúc struct trong C
Bạn có thể tham khảo những video này. Ngoài ra đang quay lại video cấu trúc struct C++ có những câu hỏi trên của bạn .

X viết 18:23 ngày 30/09/2018

2 posts were split to a new topic: Thắc mắc bài tập struct

Tran Huyen viết 18:18 ngày 30/09/2018

Bài liên quan
0