这个代码怎么改才能实现功能

这个代码如何改才能实现功能?
#include<stdio.h>

typedef struct cj

{

int no;

char name[8];

int C;

int math;

int eng;

int uausall;

int check;

float count;

}CJ;

void main()

{

  CJ s[26];

  int i,j;

  float yxl,bjgl;

  char f;

  i=0;

printf("\n 学生成绩信息 \n");  

do{

  f='\0';

  printf("学号:");

  scanf("%d",&s[i].no);

  printf("姓名:");

  scanf("%s",&s[i].name);

  printf("C语言:");

  scanf("%d",&s[i].C);

  printf("高数:");

  scanf("%d",&s[i].math);

  printf("英语:");

  scanf("%d",&s[i].eng);

  printf("平时成绩:");

  scanf("%d",&s[i].uausall);

  printf("考勤成绩:");

  scanf("%d",&s[i].check);

  s[i].count=(s[i].C+s[i].math+s[i].eng)*0.7+s[i].uausall*0.2+s[i].check*0.1;

  printf("是否继续输入?(Y/N)");

  while(f!='y'&&f!='Y'&&f!='n'&&f!='N') f=getchar();

  i++;

}while(f!='N'&&f!='n');

printf("\n---------------------------------\n");

printf("学号 姓名 C语言 高数 英语 平时成绩 考勤成绩 总成绩");

for(j=0;j<i;j++)

printf("\n%-10d%-10s%-10d%-11d%-12d%-14d%-14d%-8f%",s[j].no,s[j].name,s[j].C,s[j].math,s[j].eng,s[j].uausall,s[j].check,s[j].count);

 }
这是我写的 只能实现成绩的输入和输出。这么改才能让总成绩按从大到小排序 并且 将需要补考的同学的名单及各自所需补考的科目显示出来? 我曾想过用若干个函数分别实现后两个功能,可是怎么也不成功 请问代码该怎么写?

------解决方案--------------------
调用个排序算法。需要补考只需要设定个判断,小于60就特殊处理。

参考
http://blog.csdn.net/shan9liang/article/details/7533466