Код почти готов, но не знаю как быть дальше. В структуре я указываю количество студентов, потом заполняю поля: 
Фамилия, Группа, Оценка1, Оценка2, Оценка3. Sr- средний бал за экзамены. Думал сначала сделать Sr как поле, чтобы потом можно было 
отсортировать структуру по среднему баллу в порядке спадания.  Но что-то всё же не так сделал в структуре. Код прилагаю: 
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
	setlocale(0, ".1251");
	struct student
	{
		char surname, gr;
		int ex1, ex2, ex3, sr;
	};
	int kol = 0;
	cout << "Введiть кiлькiсть студентiв: "; 
	cin >> kol;
	student *z = new student[kol];
	setlocale(0, ".1251");
	cout << "Введiть почергово рядки з вiдомостями про успiшнiсть " << kol
		<< " студентiв: \nПрiзвище \tГрупа \tОцiнка1 \tОцiнка2 \tОцінка3" << endl;
	for (int i = 0; i < kol; i++)
	{
		puts(z[i].surname, z[i].gr, &z[i].ex1, &z[i].ex2, &z[i].ex3, &z[i].sr);
	}
	int Count = 0;
	double sr; 
	for (int i = 0; i < kol; i++)
	{
		if (z[i].ex1 >= 60 && z[i].ex2 >= 60 && z[i].ex3 >= 60)
		{
			Count++;
			z[i].sr = (z[i].ex1 + z[i].ex2 + z[i].ex3) / 3.0;
			setlocale(0, ".OCP");
			printf("%s\t%s\t%i\t%i\t%i\t%i\n", z[i].surname, z[i].gr, z[i].ex1, z[i].ex2, z[i].ex3, z[i].sr);
		}
	}
	char* tempS, tempG;
	int temp1, temp2, temp3, tempSr;
	for (int i = 0; i < Count; i++)
	{
		for (int j = 0; j < Count - i; j++)
		{
			if (z[i].sr < z[i + 1].sr)
			{
				tempS = z[i].surname;
				z[i].surname = z[i + 1].surname;
				z[i + 1].surname = tempS;
				tempG = z[i].gr;
				z[i].gr = z[i + 1].gr;
				z[i + 1].gr = tempG;
				temp1 = z[i].ex1;
				z[i].ex1 = z[i + 1].ex1;
				z[i + 1].ex1 = temp1;
				temp2 = z[i].ex2;
				z[i].ex2 = z[i + 1].ex2;
				z[i + 1].ex2 = temp2;
				temp3 = z[i].ex3;
				z[i].ex3 = z[i + 1].ex3;
				z[i + 1].ex3 = temp3;
				tempSr = z[i].sr;
				z[i].sr = z[i + 1].sr;
				z[i + 1].sr = tempSr;
			}
		}
	}
	for (int i = 0; i < kol; i++)
	{
		if (z[i].ex1 >= 60 && z[i].ex2 >= 60 && z[i].ex3 >= 60)
		{
			z[i].sr = (z[i].ex1 + z[i].ex2 + z[i].ex3) / 3.0;
			setlocale(0, ".OCP");
			printf("%s\t%s\t%i\t%i\t%i\t%i\n", z[i].surname, z[i].gr, z[i].ex1, z[i].ex2, z[i].ex3, z[i].sr);
		}
	}
	system("pause");
	return 0;
}
UPD: Готовые функции и методы не подходят