Cách liệt kê danh sách các sinh viên thuộc diện cùng lớp in theo dạng điểm thi giảm dần

void sapxepdiemthigiam (sinhvien lh[], int n)   //Sap xep sinh vien giam dan theo diem thi
{
 sinhvien tmp;
 for (int i=0;i<n-1;i++)
    {
       for (int j=i+1;j<n;j++)
          {
             if (lh[i].diemthi < lh[j].diemthi)
                {
                     tmp=lh[i];
                     lh[i]=lh[j];
                     lh[j]=tmp;
                  }
            }
      }
    for (int i=0;i<n;i++)
    printf("MSSV: %s\nMalop: %s\nHo ten: %s\nDiem thi: %2f\n\n",lh[i].mssv,lh[i].malop,lh[i].hoten,lh[i].diemthi);
}
void timkiemdssvcunglop (sinhvien lh[],int n)   //Danh sach sinh vien cung lop co diem thi giam dan
{

       sinhvien tmp;
	char Mlop[10];
   int i=0,j,dem=0;
   printf("\n\nNhap Ma Lop can tim: ");
	scanf("%s",&n);
  if (strlen(id))
    while (i<n)
   
       if (stricmp(lh[i].malop,Mlop)==0)
          {
sapxepdiemthigiam(lh,n);
              
               dem++;
               break;
            }
         else
          i++;
                {
             if (lh[i].diemthi < lh[j].diemthi)
                {
                     tmp=lh[i];
                     lh[i]=lh[j];
                     lh[j]=tmp;
                  }
          	 }
             
      if (!dem)
       printf("Khong ton tai ma lop nay.\n");
}

Đây là đoạn nhỏ trong bài code //Struct Sinh Vien// nhưng khi run thì chỉ cho kết quả chỉ xếp theo điểm thi giảm dần mà không xuất sinh viên theo thứ tự lớp.
Mong mọi người giúp đỡ giải đáp. Mình cảm ơn rất nhiều.

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