Это программа, которая суммирует метки каждого ученика и сортирует общее число, но не меняет порядок других параметров, таких как имя ученика и их метки. Как сортировать структуру в целом, сохраняя общие оценки в качестве основы для сортировки? Я не хочу использовать какие-либо встроенные функции и делать это с помощью элементарных методов.
#include<stdio.h>
#include<conio.h>
struct stnd
{
int sub[20];
char name[20];
int total;
}
stnd[20];
main()
{
int i, j, n=4, m=4,k;
for(i=0; i<n; i++)
for(j=0; j<m; j++)
scanf("%d",&stnd[i].sub[j]);
for(i=0; i<n; i++)
scanf(" %s",stnd[i].name);
for(i=0; i<n; i++)
{
stnd[i].total=0;
for(j=0; j<m; j++)
stnd[i].total=stnd[i].total+stnd[i].sub[j];
}
for(i=0; i<n; i++)
{
for(j=i+1; j<n; j++)
{
if(stnd[i].total<stnd[j].total)
{
k=stnd[i].total;
stnd[i].total=stnd[j].total;
stnd[j].total=k;
}
}
}
printf("Rank\t Chin\t Math\t Eng\t Comp\t total\t name\n");
for(i=0; i<n; i++)
{
printf("%d\t",i+1);
for(j=0; j<m; j++)
printf("%d\t",stnd[i].sub[j]);
printf("%d\t",stnd[i].total);
printf("%s\t\n",stnd[i].name);
}
getch();
}
В функции, где вы меняете, просто замените структуру вместо общего:
// Where you declare k, declare it as a struct stnd
struct stnd k;
// Where you swap, just swap the structures, not the totals
k = stnd[i];
stnd[i] stnd[j];
stnd[j] = k;
Когда вы устанавливаете struct stnd
, он выполняет struct stnd
копию объекта, который вы копируете, что именно то, что вам нужно для сортировки.