Bài toán:
Cho thông tin điểm các môn học sau: NNLT, Tin học, Toán A1. Hãy khai báo một cấu trúc mô tả điểm các môn học của 1 sinh viên. Sau đó viết hàm thực hiện các chức năng sau:
Nhập, xuất thông tin điểm của 1 sinh viên.
Tính điểm trung bình 3 môn.
Xếp loại cho sinh viên đó theo điều kiện:
Xuất sắc: ĐTB>=9
Giỏi với: 8.0<=ĐTB<9
Khá với: 6.5<=ĐTB<8.0
Trung bình: 5.0<=ĐTB<6.5
Yếu: ĐTB<5
Xử lý bài toán:
Khai báo thư viện
#include<stdio.h> #include<conio.h> #include<math.h>
Khai báo struct sinh viên gồm:
Họ tên
Mã số sinh viên
Lớp
Năm sinh
Điểm ngôn ngữ lập trình
Điểm tin học
Điểm toán a1
struct SinhVien { char hoten[30],MSSV[20],lop[10]; float DiemNNLT,Tinhoc,ToanA1; int namsinh; }; typedef SinhVien sinhvien;
Khai báo các hàm cần sử dụng
void nhap1sv(sinhvien &sv); void xuat1sv(sinhvien sv); float DiemTB(sinhvien sv); char* XepLoai(sinhvien sv);
Viết hàm nhập
void nhap1sv(sinhvien &sv) { printf("\nNhap vao ho va ten sinh vien: "); fflush(stdin); gets(sv.hoten); printf("Nhap vao ma so sinh vien: "); fflush(stdin); gets(sv.MSSV); printf("Nhap vao lop cua sinh vien "); fflush(stdin); gets(sv.lop); printf("\nNam sinh cua sinh vien: "); scanf("%d",&sv.namsinh); do { printf("\nNhap vao diem mon NNLT "); scanf("%f",&sv.DiemNNLT); if(sv.DiemNNLT>10 || sv.DiemNNLT<0) printf("\nDiem tu 0 den 10!\nVui long kiem tra lai"); }while(sv.DiemNNLT < 0 || sv.DiemNNLT > 10); do { printf("\nNhap vao diem mon tin hoc "); scanf("%f",&sv.Tinhoc); if(sv.Tinhoc > 10 || sv.Tinhoc < 0) printf("\nDiem tu 0 den 10!\nVui long kiem tra lai"); }while(sv.Tinhoc > 10 || sv.Tinhoc < 0); do { printf("\nNhap vao diem mon toan A1 "); scanf("%f",&sv.ToanA1); if(sv.ToanA1 > 10 || sv.ToanA1 < 0) printf("\nDiem tu 0 den 10!\nVui long kiem tra lai"); }while(sv.ToanA1 < 0 || sv.ToanA1 > 10); }
Viết hàm xuất
void xuat1sv(sinhvien sv) { printf("\nHo va ten sinh vien: %s",sv.hoten); printf("\nMa so sinh vien: %s",sv.MSSV); printf("\nLop hoc: %s",sv.lop); printf("\nNam sinh: %d",sv.namsinh); printf("\nDiem mon NNLT: %8.2f",sv.DiemNNLT); printf("\nDiem mon tin hoc: %8.2f",sv.Tinhoc); printf("\nDiem mon toan A1: %8.2f",sv.ToanA1); printf("\nDiem trung binh: %8.2f",DiemTB(sv)); printf("\nXep loai: %s",XepLoai(sv)); }
Viết hàm tính trung bình
float DiemTB(sinhvien sv) { float tb; tb=(sv.DiemNNLT +sv.Tinhoc +sv.ToanA1)/3; return tb; }
Viết hàm xếp loại
char*XepLoai(sinhvien sv) { float tb=DiemTB(sv); if(tb>=9) return "Xuat sac"; else if(tb>=8 && tb<9) return "Gioi"; else if(tb>=6.5 && tb<8) return "Kha"; else if(tb>=5 && tb<6.5) return "Trung binh"; else return "Yeu"; }
Viết hàm main
void main() { sinhvien sv; nhap1sv(sv); xuat1sv(sv); getch(); }
Mình chia sẽ code này đê các bạn tham khảo các vấn đề tương tự. Tuy nhiên các bạn nên tự làm lại, đừng nên copy. Nếu gặp vấn đề gì khó khăn, hoặc thắc mắc gì, các bạn có thể đặt câu hỏi ở cuối bài. Mình sẽ giải đáp.
Chúc các bạn thành công!
anh cho em hỏi là em muốn tìm sinh viên nu có điểm trung bình cao nhất thì làm thế nào?
Bạn phải tìm được bạn nữ đầu tiên. gán max=sv.DTB, sau đó tìm bạn nữ tiếp theo so sánh điểm trung binh với bạn đầu tiên. nếu lớn hơn thì cập nhật lại. lặp lại đến hết danh sách sv.
e làm thế này rồi tịt k làm đc nữa a xem giúp e với
“`void timnu(sinhvien ds[], int n,int vt)
{
int i;
int d;
char nu[5];
for(i=0;i<n;i++)
{
if(strcmp(nu,ds[i].gioitinh)==0)
{
d=i;break;
}
}
vt=d;
for(i=i+1;i<n;i++)
if((strcmp(nu,ds[i].gioitinh)==0)&&(ds[i].diemtb)<ds[vt].diemtb)
vt=i;
}“`
bạn nên dùng float hoặc double tìm nữ(…), if(nu,….) nu nó là chuỗi nên phải có dấu ‘nu’, rồi thêm điều kiện if(i==N) return -1 là không tìm thấy bạn nữ nào
Anh có code ko anh ? em tham khảo với ạ :'(( em cx khó nghĩ ở ý này
các acj cho e hỏi muốn sắp xếp họ tên sinh viên theo an pha bê kiểu theo bảng chữ cái thì code tn ạ
AD biết cách khai báo mảng cấu trúc để lưu trữ danh sách SV và đọc nội dung file lưu vào mảng cấu trúc. Mình đọc đề không hiểu . AD giúp em câu này nhé
có hướng dẫn rồi mà bạn, bạn tự làm rồi gởi code để mọi người góp ý
Chương trình quản lý cần phải thực hiện được việc tìm kiếm theo Mã sinh viên
thì làm sao ạ
thì em làm cái cấu trúc sinh viên thôi. phần tìm kiềm thì nhập vào mã sinh viên rồi tìm xem nó có trong cái danh sách sv của mình ko ? nếu có thì hiện thị ra sinh viên đó
Chào anh chị.
Em mới học phần lập trình C cơ bản mong anh, chị chỉ giúp.
Làm sao để điểm trung bình sau khi tính xong nó trả về a.dtb để in ra màn hình được ạ
#include
int i;
typedef struct Diem
{
float t,l,h;
};
typedef struct Hsinh
{
char ten[30],msv[20];
Diem tlh;
float dtb;
};
void Nhap ( Hsinh a[] , int n)
{
int i;
for (i=1;i<=n;i++)
{
fflush(stdin);
printf("sinh vien thu %d ten : ",i);
gets(a[i].ten);
printf(" lop: ");
gets(a[i].msv);
printf("diem mon toan : ");
scanf("%f",&a[i].tlh.t);
printf("diem mon ly : ");
scanf("%f",&a[i].tlh.l);
printf("diem mon hoa : ");
scanf("%f",&a[i].tlh.h);
}
}
void DTB ( Hsinh a[] , int n , Hsinh a[].dtb)
{
float t;
for(i=1;i<=n;i++)
t=((a[i].tlh.t) + (a[i.tlh.l) +(a[i].tlh.h))/3 ;
}
void Xuat (Hsinh a[], int n)
{
int i;
for (i=1;i<=n;i++)
printf("%25s | %10s |%.3f\n",a[i].ten,a[i].msv,a[i].dtb);
}
main()
{
Hsinh a[100];
int n;
printf("nhap vao vo phan tu : ");
scanf("%d",&n);
Nhap(a,n);
printf (" \ndanh sach la :\n ");
Xuat(a,n);
}