Консультация № 181123
06.12.2010, 00:48
56.55 руб.
0 1 1
Здравствуйте, уважаемые эксперты! Прошу Вас ответить на следующий вопрос:
необходимо написать программу на Microsoft Visual C++ 2010 Express Edition по структурам:1. Описать структуру с именем STUDENT, с полями: фамилия, имя, номер группы, успеваемость (массив из пяти элементов). Ввести несколько структур. Затем напечатать их по возрастанию, используя в качестве первичного ключа – номер группы, в качестве вторичного – фамилию студента. Затем напечатать фамилии студентов, у которых средний балл выше, чем средний балл по всем студентам.
Указание: при выполнении работы оформить два варианта текста программы: 1) с использованием массива структур
2) с использованием указателя на массив структур и операции выбора элемента структуры «–>» (т.е. без использования индекса).

Обсуждение

давно
Профессор
230118
3054
09.12.2010, 19:23
общий
это ответ
Здравствуйте, Посетитель - 347391!

Первый вариант программы:


Приложение:
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <stdlib.h>


#define NUMBER 10

struct Student{
char fName[30];
char lName[30];
int group;
int grades[5];
int medgrade;
};

int cmp(const void* p1, const void* p2)
{
if ( ((Student*)p1)->group > ((Student*)p2)->group) return 1;
if ( ((Student*)p1)->group < ((Student*)p2)->group) return -1;
return strcmp( ((Student*)p1)->lName, ((Student*)p2)->lName);
}


int main()
{
Student aStudent[NUMBER];

//Заполняем
for (int i = 0; i<NUMBER; i++){
printf("\nStudent %i\nEnter name: ", i+1);
scanf("%s", aStudent[i].fName);
printf("\nStudent %i\nEnter last name: ", i+1);
scanf("%s", aStudent[i].lName);
printf("Enter group: ");
scanf("%i", &(aStudent[i].group));

for (int j = 0; j<5; j++){
printf("Enter grades %i: ", j+1);
scanf("%i", &(aStudent[i].grades[j]));
}

}

//Сортируем
qsort(aStudent, NUMBER, sizeof(Student), cmp);



float totalmed;
for(int i =0; i < NUMBER; i++){
double mid = 0;
for (int j = 0; j<5; j++)
{
mid += aStudent[i].grades[j];
totalmed+= aStudent[i].grades[j];
}
mid /= 5.0;
printf("\nStudent %i\nName: %s\ngroup: %i", i, aStudent[i].lName, aStudent[i].group);
aStudent[i].medgrade=mid;
};

printf("\Our best students are:\n");
totalmed=totalmed/(5.*NUMBER);
for(int i =0; i < NUMBER; i++)
{
if(aStudent[i].medgrade>totalmed)
printf("\nStudent %i\nName: %s\ngroup: %i", i, aStudent[i].lName, aStudent[i].group);
}

getch();

return 0;
}
Форма ответа