Cần giải thích về bài tập C++ kết hợp struct và mảng

Xin chào các bác, em bí quá nên phải lên đây hỏi ạ, thầy giao đề như thế này:

Bài tập ứng dụng cấu trúc và mảng :

  • Nhập danh sách N sinh viên , mỗi sinh viên có các thành phần dữ liệu : mã sinh viên, họ tên, điểm m môn, điểm trung bình .
  • Tính điểm trung bình của từng sinh viên.
  • Hiện lại danh sách theo từng dòng, mỗi dòng có mã sv, họ tên, điểm trung bình.

Gợi ý: tham khảo kiểu cấu trúc sinhvien trong bài giảng để làm chương trình, thay 3 môn toán, lý, hóa bằng diemmon[15] ( điểm của các môn trong học kỳ).

Hiện tại thì em không biết làm sao để viết code nhập m môn vào phần struct, mong các tiền bối chỉ hướng đi cho em ạ. Em xin chân thành cảm ơn!

Bạn viết được phần nào rồi, có thể post lên đây được không.

1 Like
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <string>
#include <cmath>

using namespace std;

struct sinhvien{
	std::string hoten;
	std::string mssv;
	float diemmon[15],diemtb;
};
typedef struct sinhvien Sinhvien;
void nhapthongtinsv(Sinhvien &x){
	fflush(stdin);
	cout<<"\nNhap ma so sinh vien: ";
	getline(cin,x.mssv);
	cout<<"\nNhap ho ten sinh vien: ";
	getline(cin,x.hoten);
	cout<<"\nSinh vien nay hoc bao nhieu mon: ";
	
}
void xuatthongtinsv(Sinhvien x){
	cout<<"\nMa so sinh vien: "<<x.mssv;
	cout<<"\nHo ten sinh vien: "<<x.hoten;
}

void nhapdanhsachsv(Sinhvien arr[],int n){
	for(int i=0;i<n;i++){
		cout<<"\n\n\t\t Nhap thong tin sinh vien thu "<<i+1;
		nhapthongtinsv(arr[i]);
	}
}

void xuatdanhsachsv(Sinhvien arr[],int n){
	for(int i=0;i<n;i++){
		cout<<"\n\n\t\t Thong tin sinh vien thu "<<i+1;
		xuatthongtinsv(arr[i]);
	}
}

int main(){
	Sinhvien arr[100];
	int n;
	cout<<"\nNhap so luong sinh vien: ";
	cin>>n;
	cout<<"\nNhap danh sach sinh vien\n";
	nhapdanhsachsv(arr,n);
	xuatdanhsachsv(arr,n);
	return 0;
}

đây bác, em bí k biết cần phải làm ntn ạ

Nhớ dùng Markdown nhé:
Cách post Code dùng Markdown trong Category Programming - meta - Dạy Nhau Học (daynhauhoc.com)

Cho tui hỏi thêm là bạn đang học C hay C++ vậy?

Về phần câu hỏi của bạn thì, điểm m môn bạn cần con số m, nghĩa là yêu cầu người dùng nhập số môn, sau đó nhập điểm cho từng môn. Đó là ý tưởng.

2 Likes

Em hiện tại đang học C++ bác ạ
Hiện tại em đã viết được code như này rồi, còn mỗi bước tính điểm trung bình e chưa nghĩ ra, nếu bác biết mong bác giải đáp hộ em :smiley:

#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <string>
#include <cmath>

using namespace std;

struct sinhvien{
	std::string hoten;
	std::string mssv;
	int m;
	float diemmon[15],diemtb;
};
typedef struct sinhvien Sinhvien;
void nhapthongtinsv(Sinhvien &x){
	fflush(stdin);
	cout<<"\nNhap ma so sinh vien: ";
	getline(cin,x.mssv);
	cout<<"\nNhap ho ten sinh vien: ";
	getline(cin,x.hoten);
	cout<<"\nNhap so luong mon hoc: ";
	cin>>x.m;
	for(int j=0;j<x.m;j++){
		cout<<"Nhap diem mon hoc thu "<<j+1<<": ";
		cin>>x.diemmon[j];
	}
}
void xuatthongtinsv(Sinhvien x){
	cout<<"\nMa so sinh vien: "<<x.mssv;
	cout<<"\nHo ten sinh vien: "<<x.hoten;
	for(int j=0;j<x.m;j++){
		cout<<"\nDiem mon hoc thu "<<j+1<<": "<<x.diemmon[j]<<endl;
	}
}
void nhapdanhsachsv(Sinhvien arr[],int n){
	for(int i=0;i<n;i++){
		cout<<"\n\n\t\t Nhap thong tin sinh vien thu "<<i+1;
		nhapthongtinsv(arr[i]);
	}
}

void xuatdanhsachsv(Sinhvien arr[],int n){
	for(int i=0;i<n;i++){
		cout<<"\n\n\t\t Thong tin sinh vien thu "<<i+1;
		xuatthongtinsv(arr[i]);
	}
}
int main(){
	Sinhvien arr[100];
	int n;
	cout<<"Nhap so luong sinh vien: ";
	cin>>n;
	nhapdanhsachsv(arr,n);
	xuatdanhsachsv(arr,n);
	return 0;
}

Cách tính điểm trung bình là lấy tổng điểm các môn chia cho số môn, để cho đơn giản, bạn cần phải tính luôn từ lúc nhập điểm, nếu không thì phải phát sinh thêm một biến trong struct để lưu số môn. Nếu bạn đã học các kiểu khác, chẳng hạn như Vector thì dễ dàng lấy size() hơn.

3 Likes

Cảm ơn bro nhé, mình làm xong r.
Close topic.
Code cho ae nào cần ạ

#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <string>
#include <cmath>

using namespace std;
int tong;
struct sinhvien{
	std::string hoten;
	std::string mssv;
	int m;
	float tong;
	float diemmon[15];
};
typedef struct sinhvien Sinhvien;
void nhapthongtinsv(Sinhvien &x){
	fflush(stdin);
	cout<<"\nNhap ma so sinh vien: ";
	getline(cin,x.mssv);
	cout<<"\nNhap ho ten sinh vien: ";
	getline(cin,x.hoten);
	cout<<"\nNhap so luong mon hoc: ";
	cin>>x.m;
	for(int j=0;j<x.m;j++){
		cout<<"Nhap diem mon hoc thu "<<j+1<<": ";
		cin>>x.diemmon[j];
		x.tong=x.tong+x.diemmon[j];
	}
}
void xuatthongtinsv(Sinhvien x){
	cout<<"\nMa so sinh vien: "<<x.mssv;
	cout<<"|Ho ten sinh vien: "<<x.hoten;
	cout<<"|Diem trung binh: "<<x.tong/x.m;
}
void nhapdanhsachsv(Sinhvien arr[],int n){
	for(int i=0;i<n;i++){
		cout<<"\n\n\t\t Nhap thong tin sinh vien thu "<<i+1;
		nhapthongtinsv(arr[i]);
	}
}

void xuatdanhsachsv(Sinhvien arr[],int n){
	for(int i=0;i<n;i++){
		cout<<"\n\n\t\t Thong tin sinh vien thu "<<i+1;
		xuatthongtinsv(arr[i]);
	}
}
int main(){
	Sinhvien arr[100];
	int n;
	cout<<"Nhap so luong sinh vien: ";
	cin>>n;
	nhapdanhsachsv(arr,n);
	xuatdanhsachsv(arr,n);
	return 0;
}
2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?