mọi người xem giúp tớ bài này với nha!
đề bài yêu cầu :sau khi nhập thông tin về hs vào thì sắp xếp các hoc sinh đó theo thứ tự tổng điểm tăng dần.
mình viết đoạn ct đổi chỗ rồi nhưng gặp vấn đề là khi các phần tử từ 0 đến (n-2) dc sắp xếp ok rồi.phần tử (n-1) là lớn nhất,nó lại đem so sánh với phần tử còn lại.>:<,công cốc!
tiện cho minh hỏi dùng cấp phất bộ nhớ động trong bài này như thế nào cho hợp lý!
thanks trước nha!
Code:
#include<stdio.h>
#include<string.h>
typedef struct 
{
 		  char name[60];
 		  int year,diem;
} std;
std nhapdl(std *a)
{
 	 	printf("\nTen : ");
 	 	fflush(stdin);
		gets(a->name);
		printf("\nNam Sinh : ");
		scanf("%i",&(a->year));
		printf("\nnhap tong diem  : ");
		scanf("%i",&(a->diem));
      return *a;
		}
int main()
{
 	 int n,i,j;
 	 std p[100][1],t[100][1]={" ",0,0};
 	 printf("\nnhap so hoc sinh : ");
 	 scanf("%i",&n);
 	 for(i=0;i<n;i++)
 	 {
	  					  printf("*****************************");
	  					  nhapdl(p[i]);
    }
    printf("*****************************");
    for(i=0;i<n;i++)
    for(j=1;j<n;j++)
    {
	  					  if ((p[i]->diem)>(p[j]->diem))
							 {
							         strcpy(t[i]->name,p[i]->name);
										(t[i]->year)=(p[i]->year);	
										(t[i]->diem)=(p[i]->diem);
									   strcpy(p[i]->name,p[j]->name);
										(p[i]->year)=(p[j]->year);
										(p[i]->diem)=(p[j]->diem);
										strcpy(p[j]->name,t[i]->name);
										(p[j]->year)=(t[i]->year);
										(p[j]->diem)=(t[i]->diem);	
											
				        }
	  				  
    }
    for(i=0;i<n;i++)
    printf("\n%s\t%i\t%i\n",p[i]->name,p[i]->year,p[i]->diem);
    system("pause");
    return 0;
	 }